1

我想使用以下代码从网站填写表格:

import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser.open("Web page url")
browser.follow_link("login")
browser.get_url()
browser.select_form('div[class="p30"]')
browser.get_current_form().print_summary()

>>> <input class="form-input" id="mail" type="text"/>
>>> <input class="form-input" id="pass" type="password"/>

正如您所看到的,.print_summary() 返回我想要为其赋值的确切字段,但是它们中的任何一个都没有属性“名称”,所以我无法更改它。我已经阅读了 Mechanicalsoup 教程,其中的表单具有该属性“名称”:

<input name="custname"/>
<input name="custtel" type="tel"/>
<input name="custemail" type="email"/>

它可以简单地使用以下方法进行更改:

browser["custname"] = "Me"
browser["custtel"] = "00 00 0001"
browser["custemail"] = "nobody@example.com"

我是 mechincalsoup 的新手,因此非常感谢任何帮助。

4

1 回答 1

1

mechanicalsoup 问答部分专门回答了您的问题:

如果您认为自己正确地使用了 MechanicalSoup,但表单提交仍然没有按照您的预期进行,可能的解释是当您在真实浏览器中提交表单时,页面使用 JavaScript 动态生成响应内容。一个常见的症状是表单元素缺少必需的属性(例如,如果表单缺少操作属性或输入缺少名称属性)。

在这种情况下,您通常有两种选择:

  1. 如果您知道服务器希望从表单提交中接收什么内容,那么您可以使用 MechanicalSoup 手动添加该内容,即使用 new_control()。除非您正在测试您拥有的网站,否则这不太可能是一个可靠的解决方案。

2.使用支持JavaScript的工具,比如Selenium。

于 2019-06-07T14:13:19.777 回答