2010-03-07 83 views
1

這是腳本>>Python:網絡登錄腳本,有什麼問題?

import ClientForm 
import urllib2 
request = urllib2.Request("http://ritaj.birzeit.edu") 

response = urllib2.urlopen(request) 
forms = ClientForm.ParseResponse(response, backwards_compat=False) 
response.close() 

form = forms[0] 
print form 
sooform = str(raw_input("Form Name: ")) 
username = str(raw_input("Username: ")) 
password = str(raw_input("Password: ")) 

form[sooform] = [username, password] 

request2 = form.click() 
try: 
    response2 = urllib2.urlopen(request2) 
except urllib2.HTTPError, response2: 
    pass 

print response2.geturl() 
print response2.info() # headers 
print response2.read() # body 
response2.close() 

時啓動腳本,,我得到這個

Traceback (most recent call last): 
    File "C:/Python26/ritaj2.py", line 9, in <module> 
    form = forms[0] 
IndexError: list index out of range 

什麼問題,第,,我在Windows上運行,蟒蛇2.6.4

更新:

我想要一個腳本,登錄此網站,並打印迴應:)

+0

你自己調查問題多久了? – 2010-03-07 13:50:57

+0

我試圖讓這個腳本大約兩天前,並沒有得到任何東西,每次我有一個代碼,它顯示了一個錯誤,,所以如果你可以幫助我使這個網站的登錄腳本,我會感激: ) – 2010-03-07 14:04:52

回答

1

唯一<form>在HTML代碼中投放在那個網址是:

<form method="GET" action="http://www.google.com/u/ritaj"> 

這是一個自定義的Google搜索,與登錄無關(另外,出於某種原因,ClientForm在識別該特定表單時遇到了一些問題 - 但該表單對您無用,所以我沒有探索這個問題進一步)。

您仍然可以通過使用

forms = ClientForms.ParseResponseEx(response) 

這使得forms[0]包含未在表單中的所有控件的人工一個獲得在控制在頁面中。

具體而言,這種方法標識名稱如下控制,以(再有一點這裏解析困惑,但希望不是你一個殺手...):

>>> f = forms[0] 
>>> [c.name for c in f.controls] 
['q', 'sitesearch', 'sa', 'domains', 'form:mode', 'form:id', '__confirmed_p', '__refreshing_p', 'return_url', 'time', 'token_id', 'hash', 'username', 'password', 'persistent_p', 'formbutton:ok'] 

所以你應該能夠設置「非表格形式」f的控件usernamepassword,並從此處繼續。

(A位:raw_input已經返回一個字符串,失去那些冗餘的str()調用)。

0

實際地址似乎是使用https而不是http。 (!它保存到一個文件,並查找自己)檢查urllib2文檔,看它是否處理HTTPS(我相信你需要SSL)

+0

是它使用HTTPS,我是新的Python編程,所以你可以幫助我在這:) – 2010-03-07 13:57:23