【问题标题】:RoboBrowser form submissionRoboBrowser 表单提交
【发布时间】:2017-07-23 08:37:35
【问题描述】:

我正在尝试使用 robobrowser 在网站上自动提交表单,但在我提交表单后,我没有得到正确的响应,而是显示我所在的页面。这是我的代码

from robobrowser import RoboBrowser

browser = RoboBrowser()
browser.open("https://tin.tin.nsdl.com/pantan/StatusTrack.html")
form = browser.get_forms()[0]
form["ST_SEARCH_TYPE"].value = 'P'
form["ST_ACK_NUM"].value = 'Some Number'      #the ack. no.  

browser.submit_form(form)
browser.select('b')                           #shows the same page again

【问题讨论】:

标签: python robobrowser


【解决方案1】:

您可以尝试但指定并传递表单的id..

browser = RoboBrowser(id='IdOfTheForm')

如果这不起作用,您可以尝试传递标头, 通过使用requests 喜欢。

import requests
start = requests.session()
open = start.get('UrlOfTheWebsite')
print(open.headers)

并通过这样做放置您想要的合适标题

start.headers = open.headers
browser = RoboBrowser(id='IdOfTheForm',session=start,history=True)

如果你显示响应的内容,你可以使用parsed方法。

res = browser.submit_form(form)
print(res.parsed)

您甚至可以在提交表单时在 submit 中指定按钮 name。你必须检查button的名称

res = browser.submit_form(form, submit='NameOfTheButton')

然后尝试。

print(res.parsed)  

如果它不提供源代码,希望它可以工作。

【讨论】:

  • 谢谢,这有助于拼写所有内容,但是如果按钮没有名称而只有 id 怎么办?我尝试使用 Id 但得到错误'str' object has no attribute 'name'
  • 嗨!没有提及submit= 是否有效,因为据我所知,providing an button name is optional Robobrowser 可以为您完成任务,因为它已经选择了表单,并且提交按钮是在表单本身中。
  • 但是,如果按钮有一个 href,那么您可以通过 browser.follow_link(hrefOfTheButton) 访问链接。其他情况是,如果按钮是javascript call,它可能无法这样做,因为您必须转到网络选项卡,并通过手动单击按钮检查对 URL 的请求,然后获取请求到网址。希望这会有所帮助。
  • 谢谢!我得试一试。我确实在 python 2 中运行了脚本,它在没有指定按钮名称的情况下工作。但是让它与 python 3 一起工作会很好,因为我打算用它来构建脚本的其余部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多