【问题标题】:Can't get proper results with mechanize when using br.submit()使用 br.submit() 时无法通过 mechanize 获得正确的结果
【发布时间】:2015-09-20 00:17:40
【问题描述】:

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

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

你能帮帮我吗?

【问题讨论】:

  • 您正在选择 nr=0 的表单。为什么回溯错误返回 nr 1?你用它做了什么?

标签: python forms web-scraping beautifulsoup mechanize


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    尝试以下方法:

    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)”等...

    【讨论】:

      【解决方案3】:

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

      for form in br.forms():
          print form
      

      并查看返回给您的结果。

      【讨论】:

        猜你喜欢
        • 2016-10-24
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多