首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mechanize提交表单(Python)

使用Mechanize提交表单(Python)
EN

Stack Overflow用户
提问于 2011-12-20 12:46:03
回答 2查看 11.9K关注 0票数 8

嗯,我正在尝试使用Python和机械化登录到一个网站。

我已经打开了这个网站:

代码语言:javascript
复制
site = br.open("http://example.com/login.php")

我有一个表单列表(使用br.forms)。

代码语言:javascript
复制
<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)>>

我一直在尝试提交用户名和密码字段。

我试着这样做:

代码语言:javascript
复制
br.select_form(nr=0)
br.form["username"] = 'usernamehere'
br.form["password"] = 'passwordhere'
br.submit()

然后我意识到我试图填写的表单并不是页面上的第一个表单,但是更改0对任何事情都没有帮助。在这样的页面上选择表单应该怎么做?

然而!这不是唯一的问题。

当我运行它时,我得到这个错误:

代码语言:javascript
复制
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:还是我做得完全错了?如果是后者,我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-20 12:58:05

要使用表单的名称选择表单,应使用:

代码语言:javascript
复制
br.select_form(name="order")

您在这里做的事情:

代码语言:javascript
复制
br.form["username"] = 'usernamehere'

正在尝试为所选窗体下的控件设置值,因此当他找不到该值时,它会抛出您看到的异常。

票数 4
EN

Stack Overflow用户

发布于 2011-12-20 12:53:33

你可能会有几个问题

  • 如果表单是通过javascript生成的,你不能用mechanize解决它--至少不能直接解决--在这种情况下,我建议你试着使用selenium --你可以试着看看页面的html源代码--如果你没有纯HTML格式的表单,很明显它是由javascript插入DOM的。此外,如果表单是通过javascript提交的,则mechanize也不会帮助您重定向
  • ,表单可能不在第一页上-您可能希望将mechanize设置为遵循

的重定向

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8570920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档