我試圖訪問一個網站以獲取一些信息,但是我無法通過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,仍然得到相同的錯誤。
任何援助將不勝感激。
你在哪裏看到的表單數據?特別是'csrfmiddlewaretoken'? –
我在登錄後從頁面獲取表單數據。我使用'csrfmiddlewaretoken',因爲我在文檔中看到了這個例子。我應該使用不同的東西嗎?另外,如果您需要更多頭部或其他信息,請告訴我,我很樂意發佈。 – raidboss
是的,在實際表單數據中的名稱,打開開發人員工具,你會看到你也張貼到不正確的網址,它是'https:// subscriber.hoovers.com/H/j_spring_security_check' ans'OWASP_CSRFTOKEN'是名稱爲csrf標記 –