【问题标题】:robobrowser how to locate a form by namerobobrowser 如何按名称查找表单
【发布时间】:2017-12-01 00:44:40
【问题描述】:

我正在使用 robobrowser 登录网站。

我遇到的问题是登录页面有 2 个表单,它们都具有相同的操作,但名称不同。

<form action="/login" name="changedomain">
...
</form>

第二种形式是:

<form action="/login" name="signin">
...
</form>

我的python代码如下:

import re
from robobrowser import RoboBrowser
browser = RoboBrowser(history=True, parser="lxml")
browser.open("http://example.com")
form = browser.get_form()

问题是如果我使用:

form = browser.get_form()[1]

我收到一个 BadRequestKeyError,但我找不到任何有关如何按名称查找表单的文档。唯一的文档说要使用该操作,但表单具有相同的操作属性。 欢迎提出任何建议。

【问题讨论】:

  • 尚未对此进行测试,但 get_form 接受标准 BeautifulSoup 参数,因此可能会这样:browser.get_form({'name':'signin'})
  • browser.get_form({'class':'signin'}) 和 browser.get_form({'class':'.signin'}) 不起作用(对于唯一有意义的标识符是一个类),所以我怀疑名字也不是这样工作的。

标签: python python-2.7 robobrowser


【解决方案1】:

我有使用以下代码的工作代码;

form = browser.get_form('Form1')

这是另一个例子——打印表单的html;

from robobrowser import RoboBrowser

browser = RoboBrowser(history=True, parser="html.parser")
browser.open("https://stackoverflow.com")
form = browser.get_form(id="search")
print(form.parsed)

产量

<form action="/search" autocomplete="off" class="searchbar" id="search" method="get" role="search">
<input autocomplete="off" class="f-input js-search-field" maxlength="240" name="q" placeholder="Search…" tabindex="1" type="text" value=""/>
<button aria-label="Search..." class="btn-topbar-primary js-search-submit" type="submit"><svg aria-hidden="true" class="svg-icon iconSearch" height="18" viewbox="0 0 18 18" width="18"><path d="M12.86 11.32L18 16.5 16.5 18l-5.18-5.14v-.35a7 7 0 1 1 1.19-1.19h.35zM7 12A5 5 0 1 0 7 2a5 5 0 0 0 0 10z"></path></svg></button>
</form>

【讨论】:

  • 一旦选择,我可以打印所选表格的来源以验证我的表格是否正确吗?
  • @dnraikes;我更新了答案以显示“打印”。我的建议是使用允许逐步调试的良好 IDE,例如 pycharm。只需创建 browser.open() 语句,我就可以在调试器中检查浏览器对象——很明显,'parsed' 属性显示了 html。
【解决方案2】:

如何选择第二种形式的第一个答案是:

form = browser.get_forms()[1] # note the get_forms() not get_form()

第二个问题怎么看表格来源的答案基本是:

print(form) # this prints a dictionary of all input fields and their values from the selected form.

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 2018-04-15
    • 1970-01-01
    • 2023-01-27
    • 2019-02-04
    • 2018-07-30
    • 1970-01-01
    • 2015-11-01
    • 2021-05-19
    相关资源
    最近更新 更多