2011-12-27 41 views
4

我最近一直在搞表單提交,我正在編寫一個Python腳本來查看我是否可以通過僅輸入驗證碼來創建Steam帳戶。作爲參考,我正在提交的網站是https://store.steampowered.com/join/。如圖所示由機械化的要求,填寫表格如下:用Python提交表單

<create_account POST https://store.steampowered.com/join/ application/x-www-form-urlencoded 
<TextControl(accountname=)> 
<SelectControl(choose_accountname=[*, , ])> 
<PasswordControl(password=)> 
<PasswordControl(reenter_password=)> 
<TextControl(email=)> 
<TextControl(reenter_email=)> 
<HiddenControl(challenge_question=) (readonly)> 
<TextControl(secret_answer=)> 
<HiddenControl(captchagid=1009037421128850761) (readonly)> 
<TextControl(captcha_text=)> 
<HiddenControl(action=submit_agreement) (readonly)> 
<CheckboxControl(i_agree_check=[on])> 
<HiddenControl(ticket=) (readonly)>> 

幾乎一切似乎工作,但我有一個小麻煩機械化和urllib2的正確提交表單。我確信我只是在做一些小而簡單的錯誤,但我花了很長時間試圖找到這個錯誤。我現在的要求配製在簡單的幾行,像這樣:

def submit_form(self, captcha_text): 
    self.form["accountname"]=account_prefix+get_next_number() 
    self.form["password"]=account_password 
    self.form["reenter_password"]=account_password 
    email = emails.pop() 
    self.form["email"] = email 
    self.form["reenter_email"] = email 
    control = self.form.find_control("challenge_question") 
    control.disabled = False 
    control.readonly = False 
    control.value = "NameOfSchool" 
    self.form["secret_answer"] = secret_answer 
    self.form["captcha_text"] = captcha_text 
    self.form.find_control(id="i_agree_check").items[0].selected = True 
    print urllib2.urlopen(self.form.click()).read() 
    inc_account_number() 
    resave_email_list(emails) 

大部分申請的可能是正確的,並有只有幾行我真的認爲可疑。隨着mechanize我試圖檢查「我同意並且年滿13歲或以上」方框self.form.find_control(id="i_agree_check").items[0].selected = True。根據我的一些測試,我認爲這條線可能實際工作,但ReadOnly challenge_question部分的整個設置很可能是錯誤的。作爲參考,該代碼段爲:

control = self.form.find_control("challenge_question") 
    control.disabled = False 
    control.readonly = False 
    control.value = "NameOfSchool" 

提交的失敗將是提交方法最後一種可能性:urllib2.urlopen(self.form.click()).read()

如果任何人有什麼可能會錯誤任何的想法,甚至替代方法來完成使用Python的任務,我將非常感謝。我努力搜索,失敗了。如果可以的話,伸出援助之手!

回答

0

獲取頁面https://store.steampowered.com/join/並搜索正則表達式<input type="hidden" id="captchagid" name="captchagid" value="(.+)">

驗證碼網址將會是https://store.steampowered.com/public/captcha.php?gid=<gid>

用POST數據獲取https://store.steampowered.com/join/createaccount/

accountname=<name>&password=<password>&email=<email>&challenge_question=<question>&secret_answer=<secretansewer>&captchagid=<gid>captcha_text=<captch_text>&i_agree=1&ticket=&count=4 
+0

它真有工作&計數= 4每一次?以及如何提交這樣的POST請求? – Paul 2011-12-28 01:02:09

+0

@Paul urllib.urlopen(url,post_data) – 2011-12-28 10:35:21

+0

我想出了一點搜索。顯然,如果您不重複使用驗證碼,則計數無關緊要。一切都很好!感謝一束。 – Paul 2011-12-29 20:11:44