私はいくつかの情報をスクラップするためにウェブサイトにアクセスしようとしていますが、Pythonを使用してログイン情報を投稿する際に問題があります。ここに私のコードは、これまでのところです:ここではリクエストモジュール(Pythonバージョン3.5.1)を使用してWebサイトにログインできません
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という:8N0Z-TND5-NV71-C4N4-43BK: OWASP_CSRFTOKENを渡します-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.cookieメソッドを削除し、手動でCSRFコードをcsrfmiddlewaretoken引数に入力してみました。参照URLを変更しようとしましたが、同じエラーが発生しています。
ご協力いただければ幸いです。
がどこにフォームデータを見ていると、あなたの
c.text
にトークンを見て必要がありますか?特に 'csrfmiddlewaretoken'ですか? –私はログイン後にページからフォームデータを取り出しました。私はドキュメントの例としてそれを見たので、私は 'csrfmiddlewaretoken'を使用しました。私は別の何かを使用しているはずですか?また、ヘッダーなどの情報が必要な場合は、私が投稿して嬉しいことをお知らせください。 – raidboss
はい、実際のフォームデータの名前、開発者ツールを開いて、間違ったURLにも投稿しています。https:// subscriber.hoovers.com/H/j_spring_security_check' ans 'OWASP_CSRFTOKEN'はcsrfトークンの名前 –