好吧,我正在尝试使用Python登录网站并进行机械化。
我打开了网站:
site = br.open("http://example.com/login.php")
我有一份表格清单(有br.forms)。
<GET http://example.com/search.php application/x-www-form-urlencoded
<HiddenControl(search=1) (readonly)>
...
<POST http://example.com/login.php application/x-www-form-urlencoded
<TextControl(username=)>
<PasswordControl(password=)>
<CheckboxControl(stay=[1])>
<SubmitControl(<None>=Log in) (readonly)>>
我一直在尝试提交用户名和密码字段。
我尝试这样做:
br.select_form(nr=0)
br.form["username"] = 'usernamehere'
br.form["password"] = 'passwordhere'
br.submit()
然后我意识到我试图填写的表单不是页面上的第一个,但更改0对任何事都没有帮助。如何在这样的页面上选择表单?
然而!这不是唯一的问题。
当我运行它时,我收到此错误:
Traceback (most recent call last):
File "C:\Python26\login.py", line 34, in <module>
br.form["username"] = 'usernamehere'
...
ControlNotFoundError: no control matching name 'username'
我该如何解决这个问题? D:或者我完全错了吗?如果是后者,我该怎么做呢?
答案 0 :(得分:4)
使用您应该使用的名称选择表单:
br.select_form(name="order")
你在这做什么:
br.form["username"] = 'usernamehere'
正在尝试为所选表单下的控件设置一个值,所以当他找不到它时,它会抛出你看到的异常。
答案 1 :(得分:0)
您可能有几个问题
如果表单是通过javascript生成的,则无法通过机械化解决 - 至少不能直接解决 - 在这种情况下,我建议您尝试使用selenium
- 您可以尝试查看页面HTML源代码 - 如果你没有纯HTML格式的表单,很明显它是通过javascript插入到DOM中的。此外,如果表单是通过javascript提交的,那么mechanize将无法帮助您
此外,表单可能不在第一页上 - 您可能希望设置机械化以遵循重定向