2016-06-14 150 views
0

我試圖訪問一個網站以獲取一些信息,但是我無法通過Python發佈登錄信息。這是我到目前爲止的代碼:使用請求模塊無法登錄到網站(Python版本3.5.1)

import requests 

c = requests.Session() 
url = 'https://subscriber.hoovers.com/H/login/login.html' 
USERNAME = 'user' 
PASSWORD = 'pass' 

c.get(url) 
csrftoken = c.cookies['csrftoken'] 
login_data = dict(j_username=USERNAME, j_password=PASSWORD,   
csrfmiddlewaretoken=csrftoken, next='/') 
c.post(url, data=login_data, headers=dict(Referer=url)) 
page = c.get('http://subscriber.hoovers.com/H/home/index.html') 
print(page.content) 

下面是從後登錄頁面的表單數據:

爲j_username:用戶 爲j_password:通過 OWASP_CSRFTOKEN:8N0Z-TND5-NV71-C4N4-43BK -B13S-A1MO-NZQC OWASP_CSRFTOKEN:8N0Z-TND5-NV71-C4N4-43BK-B13S-A1MO-NZQC

這是我收到錯誤:

Traceback (most recent call last): 
    File "C:/Users/10023539/Desktop/pyscripts/webscraper ex.py", line 9, in <module> 
    csrftoken = c.cookies['csrftoken'] 
    File "C:\Program Files (x86)\Python35-32\Lib\site-packages\requests\cookies.py", line 293, in __getitem__ 
    return self._find_no_duplicates(name) 
    File "C:\Program Files (x86)\Python35-32\Lib\site-packages\requests\cookies.py", line 351, in _find_no_duplicates 
    raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path)) 
KeyError: "name='csrftoken', domain=None, path=None" 

我相信這個問題與'OWASP_CSRFTOKEN'標籤有關嗎?我還沒有找到任何在線任何地方的這個特定CSRF名稱的解決方案。我也嘗試刪除c.cookies方法,並手動將CSRF代碼輸入到csrfmiddlewaretoken參數中。我也試着改變了referal的URL,仍然得到相同的錯誤。

任何援助將不勝感激。

+0

你在哪裏看到的表單數據?特別是'csrfmiddlewaretoken'? –

+0

我在登錄後從頁面獲取表單數據。我使用'csrfmiddlewaretoken',因爲我在文檔中看到了這個例子。我應該使用不同的東西嗎?另外,如果您需要更多頭部或其他信息,請告訴我,我很樂意發佈。 – raidboss

+0

是的,在實際表單數據中的名稱,打開開發人員工具,你會看到你也張貼到不正確的網址,它是'https:// subscriber.hoovers.com/H/j_spring_security_check' ans'OWASP_CSRFTOKEN'是名稱爲csrf標記 –

回答

-1

首先你抓KeyError例外,這意味着cookies字典中沒有鍵csrftoken

因此,您需要探索您的響應以找到正確的CSRF令牌cookie名稱。 例如,您可以打印所有Cookie:

for key in c.cookies.keys(): 
    print('%s: %s' % (key, c.cookies[key])) 

UPD:其實你的迴應沒有CSRF的cookie。 你需要看令牌位於c.textpyquery

<input type="hidden" name="OWASP_CSRFTOKEN" class="csrfClass" value="X48L-NEYI-CG18-SJOD-VDW9-FGEB-7WIT-88P4"> 
+0

感謝您的信息。你可以請更具體一點嗎?我在迴應中究竟在尋找什麼?另外,還有其他方法可以查看我的回覆嗎?在將此代碼放入時,我仍然收到錯誤。 – raidboss

+0

html是動態生成的,因此您不會在源代碼中獲取該代碼 –