1

我试图让 mechanize 模块与 GAE 一起工作,但没有运气。我使用了最新版本的 mechanize 以及来自此处 Python Mechanize + GAEpython code的 GAE 特定版本。

我想做的是登录网站并提交表格。

示例代码

import mechanize

def mech(uname,passw,txtto,msg):
    br = mechanize.Browser()
    br.open("http://example.com")
    br.select_form(nr=0)

    br["username"]= uname
    br["password"]= passw
    # br.form

    response = br.submit()
    br.select_form(nr=0)
    # print br.form

    br["txt"] = txtto 
    br["message"] = msg

    br.submit()
    br.back()

使用机械化模块,我得到

'str' object has no attribute 'fileno' 

和gaemechanize我得到

app.mechanize.ClientForm.ControlNotFoundError

ControlNotFoundError: no control matching name 'txt'

该代码已经过测试并且可以在 gae 之外运行,所以这不是问题。如果这有帮助,我正在使用 kay 框架。

4

1 回答 1

0

看起来您正试图从 Python GAE 应用程序中执行此操作。在 Google Cloud Functions 中不存在非弹性环境 GAE 代码可以做什么的许多限制(例如,限制向其他进程发送的限制等)。我建议您从 Google Cloud Function 中尝试此操作。虽然(还)没有对 GCF 的官方 python 支持,但有一个github 项目可以让您将 python 代码部署到 GCF。

我能够使用 Node.js chromium 远程插件在 GCF 中获得一些类似的浏览器自动化代码,所以我认为 GCF 也可以为你工作。

使用云功能也会减轻您的 GAE 应用程序的负载,因此它是一个更好的解决方案,因为这实际上更像是一项后台工作。

无论您决定使用 Node.js 还是 Python 来编写云函数,一旦设置好,您就可以从 Python GAE 应用程序中的 Pub/Sub 或 HTTP 触发器轻松调用它。

https://cloud.google.com/functions/

于 2018-02-13T08:10:21.153 回答