没有属性“名称”时如何为表单字段分配值?

时间:2019-06-07 12:19:33

标签: python login mechanicalsoup

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

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的新手,因此非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

  

如果您认为自己正确使用了MechanicalSoup,但是   提交仍然不符合您的期望,可能   解释是该页面使用JavaScript动态生成   在真实的浏览器中提交表单时的回复内容。普通的   症状是表单元素缺少必需的属性(例如   表单缺少动作属性或输入缺少名称   属性)。

     

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

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

2。使用工具   支持Selenium之类的JavaScript。