2016-04-07 58 views
-1

我是机械化的新手,我不太明白它是如何工作的,我尝试了很多教程,但其中大多数已经过时并且不起作用。如何使用机械化来填充Python中的HTML表单

第一个问题是,机械化会产生什么效果?它是否会在特定的浏览器中填写表单,以便最终用户可以看到它,或者是否使机械化浏览器中的所有内容都无法被最终用户看到?

我正在尝试使机械化填写表单,重新加载页面后窗体更改输入名称,我如何通过数字更改其值?

import mechanize 

br = mechanize.Browser() 

br.set_handle_robots(False) 

br.addheaders = [("User-agent","Mozilla/5.0")] 

gitbot = br.open("https://arkhamnetwork.org/community/register") 

br.select_form(nr=0) 

br["user[username]"] = "username" 

br["user[email]"] = "email"  

br["user[password]"] = "password" 

sign_up = br.submit() 

的错误,我正在执行的代码后得到: NameError: name 'username' is not defined

我要填写网页上的所有形式,而不使用输入的名字,我该怎么办呢?

+0

你需要传递一个字符串作为用户名I,E'“foobar的”',你能指望什么'username'为:填充表单这个特定的网站上

码?你需要同样的电子邮件和密码。另外'br [“user [login]”]'错误 –

+0

“name” - 页面上的第一个字段。 – ShellRox

+1

是的,但你必须通过用户名,我会在一分钟内写一个答案,并告诉你如何去做 –

回答

1

我已经找到解决方案:

形式实际上是一个包含控件,这就是为什么我需要选择形式。

import mechanize 

br = mechanize.Browser() 

response = br.open("https://arkhamnetwork.org/community/register") 

br.addheaders = [("User-agent","Mozilla/5.0")] 

gitbot = br.open("https://arkhamnetwork.org/community/register") 

br.select_form(nr=1) 

br.set_all_readonly(False) 

br.form.set_value("test", nr=0) 

br.method = "POST" 

response = br.submit() 

print response.geturl('http://arkhamnetwork.org/community/register/register')