【问题标题】:Submitting Forms with Mechanize (Python)使用 Mechanize (Python) 提交表单
【发布时间】:2012-01-24 03:35:00
【问题描述】:

嗯,我正在尝试使用 Python 登录一个网站并进行机械化。

我已经打开了网站:

site = br.open("http://example.com/login.php")

我有一个表格列表(带有 br.forms)。

<GET http://example.com/search.php application/x-www-form-urlencoded
<HiddenControl(search=1) (readonly)>
...
<POST http://example.com/login.php application/x-www-form-urlencoded
<TextControl(username=)>
<PasswordControl(password=)>
<CheckboxControl(stay=[1])>
<SubmitControl(<None>=Log in) (readonly)>>

我一直在尝试提交用户名和密码字段。

我试过这样做:

br.select_form(nr=0)
br.form["username"] = 'usernamehere'
br.form["password"] = 'passwordhere'
br.submit()

然后我意识到我试图填写的表格并不是页面上的第一个表格,但是更改 0 并没有任何帮助。在这样的页面上选择表单应该怎么做?

但是!这不是唯一的问题。

当我运行它时,我得到了这个错误:

Traceback (most recent call last):
File "C:\Python26\login.py", line 34, in <module>
br.form["username"] = 'usernamehere'
...
ControlNotFoundError: no control matching name 'username'

我该如何解决这个问题? D:还是我做错了?如果是后者,我该怎么做呢?

【问题讨论】:

    标签: python forms login mechanize


    【解决方案1】:

    要使用您应该使用的名称选择表单:

    br.select_form(name="order")
    

    你在这里做什么:

    br.form["username"] = 'usernamehere'
    

    正在尝试为所选表单下的控件设置值,因此当他找不到它时,它会抛出您所看到的异常。

    【讨论】:

    • br.select_form(name = "username") 抛出错误:FormNotFoundError: no form matching name 'username' - 和以前一样,但这次是我刚刚添加的行。
    • 你确定你的名字是对的吗?在 br.forms() 中尝试表单:打印表单
    • 阳性。我检查了 br.forms() 和原始 html。
    • 你能告诉我页面是什么吗?如果你不介意的话,我可以试试看
    【解决方案2】:

    你可能有几个问题

      1234563查看页面 HTML 源代码 - 如果您没有纯 html 格式的表单,很明显它是通过 javascript 插入到 DOM 中的。另外,如果表单是通过 javascript 提交的,mechanize 也帮不了你
    • 另外,表单可能不在首页 - 您可能希望设置 mechanize 以跟随重定向

    【讨论】:

    • 不,这不是 JavaScript。而且我可以使用 urllib 很好地访问表单...我宁愿使用 mechanize 因为我不确定 cookiejar 是如何工作的,我需要保持登录状态 >_> 而 login.php 是表单位置。我很确定。
    猜你喜欢
    • 2016-12-04
    • 2011-10-31
    • 1970-01-01
    • 2016-01-19
    • 2014-04-12
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多