2013-12-22 72 views
2

我一直用這個指南,以幫助我:http://www.pythonforbeginners.com/cheatsheet/python-mechanize-cheat-sheet/登錄到堆棧溢出與機械化和Python

我想登錄到堆棧溢出並打印出使用Python機械化我的登錄響應。我一直在進行故障排除以找到表單名稱來選擇並輸入我的信息,但目前出現錯誤「ValueError:必須提供至少一個參數來指定控件」,因爲我試圖打印出所有窗體和控件以幫助我想出了我需要選擇的東西。

import mechanize 

    #make browser object 
    browser = mechanize.Browser() 

    #open stack login page 
    browser.open("http://stackoverflow.com/users/login#login-in") 

    #print all the forms on the page 
    print("\n Printing all forms on page...\n") 
    for form in browser.forms(): 
      print("Form Name:", form.name) 
      print form 
    print("\n Done printing forms...\n") 

    #printing the controls of each form 

    browser.form=list(browser.forms())[0] 

    print("\n Printing controls of form 0 \n") 
    for control in browser.form.controls: 
      print control 
      print "type=%s, name=%s, value=%s" % (control.type, control.name, browser[control.name]) 

    browser.form=list(browser.forms())[1] 

    print("\n Printing controls of form 1 \n") 
    for control in browser.form.controls: 
      print control 
      print "type=%s, name=%s, value=%s" % (control.type, control.name, browser[control.name]) 

    browser.form=list(browser.forms())[2] 

    print("\n Printing controls of form 2 \n") 
for control in browser.form.controls: 
      print control 
      print "type=%s, name=%s, value=%s" % (control.type, control.name, browser[control.name]) 

print("\n Done printing all controls \n") 

它看起來像有在頁面上3種形式,但它們不包含電子郵件地址和密碼輸入,我找登錄。我究竟做錯了什麼?

回答

1

SO的登錄表單似乎使用廣泛的JavaScript。請注意,所有與您在發佈的頁面上登錄相關的按鈕都會調用JavaScript函數。 mechanize無法執行JavaScript,因此不會顯示您需要的內容。

您可以使用SeleniumPython bindings來驅動瀏覽器。您也可以使用CasperJS切換到使用JavaScript處理所有內容。

+0

謝謝,我想我已經與Selenium一起工作,只需做一些編輯! –