以下のようなフォームがあったとき、pythonでログインしようとします。
<form method="post" action="https://test.jp/login.php"> <input name="token" type="hidden" value="jfkslaj4j348j"> <input type="hidden" name="token" value="jfkslaj4j348j"> <input type="text" name="email" > <input type="password" name="password" > </form>
自分が書いたコードは以下です。
python
1#coding:utf-8 2import requests 3from bs4 import BeautifulSoup 4 5url = "https://test.jp/login.php" 6r = s.get(url) 7html = r.text 8soup = BeautifulSoup(html,"html.parser") 9token = soup.find(attrs={"name" : "token"}).get("value") 10 11login_info = { 12 "token" : token, 13 "token" : token, 14 "email" : "test@hogehoge", 15 "password" : "password" 16} 17 18s.post(url,data=login_info)
しかし、ご存知の通り、辞書はキーが重複した場合、上書きされてしまい、サーバーに送信する時にはlogin_info
は以下のようになってしまいログインすることができません。
python
1login_info = { 2 "token" : token, 3 "email" : "test@hogehoge", 4 "password" : "password" 5} 6
どなたか、ログインする方法をご教示いただけないでしょうか...
デベロッパーツールで実際に送信されているPOSTリクエストのbodyをチェックしてみましたか?
"pythonでのログイン"です。
いえ、Pythonでログインしたいというのは、ブラウザでのログイン行為をPythonでエミュレートするということですよね。
つまり、ブラウザでのログイン時の挙動をちゃんと観察しましたか?ということです。
失礼しました。もちろん確認しました。token,token,email,passwordが送信されていました
送る値は、間違っていないのですが、pythonのrequestsモジュールは、ログイン時に送る値を辞書として送るので、キーが同じtokenという値は、一つになってしまって、ログインできないということです。