繁体   English   中英

使用Mechanize提交表单(Python)

[英]Submitting Forms with Mechanize (Python)

好吧,我正在尝试使用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:或者我做错了吗? 如果是后者,我将如何去做?

要使用其名称选择表单,您应该使用:

br.select_form(name="order")

您在这里做什么:

br.form["username"] = 'usernamehere'

正在尝试为所选表单下的控件设置值,因此当他找不到它时,它会引发您看到的异常。

您可能有几个问题

  • 如果表单是通过javascript生成的,则无法使用机械化解决问题-至少不能以一种直接的方式解决-在这种情况下,我建议您尝试使用selenium -您可以尝试查看页面HTML源-如果您没有使用纯html格式的表单,很显然,它是通过javascript插入DOM的。 另外,如果表单是通过javascript提交的,则机械化对您没有帮助

  • 此外,表单可能不在首页上-您可能需要设置机械化以遵循重定向

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM