我想使用以下代码从网站填写表单:
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的新手,因此非常感谢您的帮助。
答案 0 :(得分:1)
mechanicalsoup
Q&A部分专门回答了您的问题:
如果您认为自己正确使用了MechanicalSoup,但是 提交仍然不符合您的期望,可能 解释是该页面使用JavaScript动态生成 在真实的浏览器中提交表单时的回复内容。普通的 症状是表单元素缺少必需的属性(例如 表单缺少动作属性或输入缺少名称 属性)。
在这种情况下,通常有两个选择:
- 如果您知道服务器期望从表单接收什么内容 提交,则可以使用MechanicalSoup手动添加 内容,例如new_control()。这不太可能可靠 解决方案,除非您正在测试自己拥有的网站。
2。使用工具 支持Selenium之类的JavaScript。