2016-04-07 59 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')