使用 br.submit() 时无法通过机械化获得正确的结果

Can't get proper results with mechanize when using br.submit()

我正在尝试提交一个表单,并在提交表单后获取它前往的页面的结果。我正在使用机械化。

1) 当我使用代码点击第一个按钮时,它得到了响应。但是当我阅读响应时,它显示的是同一页面的来源(表单所在的页面)。不是提交表单后浏览器重定向到的页面。

    from mechanize import Browser
    br = Browser()
    br.open("http://link.net/form_page.php")
    br.select_form(nr=0)
    br.form['number'] = '0123456789'
    response = br.submit(nr=0) 
    print response.read()

现在,当我执行此操作时,会显示同一页面的来源(即 form_page.php)。但是,它应该显示 "results.php" 的来源(这是我手动执行时浏览器指向的地方)

2) 页面中有多个提交按钮。我只点击第一个。但是当我尝试使用 nr=1 或 nr=2 单击其他提交按钮时,它显示此错误。

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib/python2.7/dist-packages/mechanize  /_mechanize.py", line 524, in select_form
    raise FormNotFoundError("no form matching "+description)
    mechanize._mechanize.FormNotFoundError: no form matching nr 1

你能帮帮我吗?

这看起来类似于 问题,提交在重定向之前调用一些 Javascript 来验证输入。可能值得查看页面的 HTML 并检查它在提交时做了什么。

尝试以下操作:

import mechanize
br = mechanize.Browser()
br.open("http://link.net/form_page.php")
br.select_form(nr=0)
br['number'] = '0123456789'             ### try instead of 'br.form[]'
response = br.submit()                  ### no need to specify form again
text = response.read()

不要忘记 'br.set_handle_robots(False)'、'br.set_all_readonly(False)' 等...

确保您选择了正确的表格或确保网页上有您正在选择的表格。您可以通过以下代码进行检查:

for form in br.forms():
    print form

并查看返回给您的结果。