我正在写脚本登录网站。见下面的脚本
import mechanize
browser = mechanize.Browser()
print "Login to myweb"
browser.open('https://www.example.com/index.php/devicelogin')
#Login page. Give user credentials
browser.select_form(nr=0)
browser.form["username"] = 'username'
browser.form["passwd"] = 'password'
browser.submit()
html = browser.response().read()
print html当我运行它时,它会给我带来错误。
Login to myweb
Traceback (most recent call last):
File "test.py", line 10, in <module>
browser.form["username"] = 'username'
File "build\bdist.win32\egg\mechanize\_form.py", line 2780, in __setitem__
File "build\bdist.win32\egg\mechanize\_form.py", line 3101, in find_control
File "build\bdist.win32\egg\mechanize\_form.py", line 3185, in _find_control
mechanize._form.ControlNotFoundError: no control matching name 'username'现在,如果我在browser.select_form(nr=0)中更改了browser.select_form(nr=0),那么它就能正常工作。
那么如何确定nr值呢?
发布于 2015-08-24 10:39:00
来自机械化源代码:
如果提供的话,nr是表单的序列号(其中0是第一个)。
所以页面中的第一个表单是0,第二个是1,第三个是2,等等。
但是,如果无法通过计数来确定表单的数量,并且表单没有名称,则可以这样做:
for n in range(len(browser.forms())):
browser.select_form(nr=n)
try:
browser.form["username"] = 'username'
browser.form["passwd"] = 'password'
browser.submit()
except mechanize._form.ControlNotFoundError:
continue # check next form
break
html = browser.response().read() 在指定表单的情况下,只需调用browser.select_form('my_form_name')即可跳过所有计数并检索它。
最后,如果您的表单没有名称属性,并且不想遍历表单,那么您可能想看看机械汤,它为您提供了在文档中导航的可能性,就像您使用BeautifulSoup一样(因为它是在它的基础上构建的)和一个类似机械的API。
https://stackoverflow.com/questions/32092709
复制相似问题