ここでやっていることに感謝します。通常、私はStackoverflowの助けを借りて私の問題を把握することができますが、今回は私は立ち往生しています。うまくいけばあなたは私を助けることができる!Pythonリクエストのログインに失敗しました
質問はかなり簡単です:this webpageにログインする方法Pythonのリクエスト?
マイ手順:
- は、ログインURL
- ログイン情報を提供します。 HTMLによると、私は '電子メール'と 'パスワード'を提供する必要があります。
- ログインが成功した場合
- チェックHTMLをログインするセッションと利用ポストを作成
残念ながら、簡単なアプローチは、このケースで動作するようには思えません。例えば、details
の出力は次のようになります。ログインが成功した場合
<script>
dataLayer = [{
'environment': 'production',
'loggedIn': '0',
'userCode': '',
'rank': '',
'totalBalance': '0',
'overAgeCasino': '0'
}];
</script>
もちろん、'loggedIn'
の'0'
が'1'
に変更する必要があります。
例では、「csrftoken」を追加する必要があり、HTMLの「隠れた」タイプであることがわかりました。ただし、type = 'hidden'部分の名前はこれと関係がないように見えますが、値もありません(link to screenshot of HTML)。 どこかに私はCSFRトークンはまたのCookieJarに保存されているが、それがないとされていることを読む:
<RequestsCookieJar[<Cookie PHPSESSID=5dib6cf6kpvf29dsn725ljcec7 for .napoleongames.be/>, <Cookie locale=en_GB for .napoleongames.be/>, <Cookie user=false for .napoleongames.be/>]>
私はそれは難しいログインが不可能であることを信じることを見つけるが、私はアイデアを使い果たしました。誰かがurllib(2)でそれを行う方法を知っているなら、それはまた役に立ちます。私はそれを円滑に走らせることができなかったので、セレンを使いたくないです。
コード:
import requests
from bs4 import BeautifulSoup
from datetime import date
date_str = str(date.today())
login_url = 'https://en-gb.sports.napoleongames.be/user/login'
protected_url = 'proctected_url'
payload = {'email': '[email protected]',
'password': '*********'}
with requests.Session() as session:
session.get(login_url)
login_page = session.post(login_url,
data=payload)
html_body = BeautifulSoup(login_page.content, 'html.parser').find(
name='body', attrs={'id': 'user_login'})
details = html_body.findAll('script')[0]
page = session.get(protected_url)
ヘッダ:フォームを送信すると
{'Date': 'Wed, 06 Sep 2017 23:45:52 GMT', 'Server': 'Apache', 'Expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'Cache-Control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'Pragma': 'no-cache', 'X-Frame-Options': 'SAMEORIGIN', 'X-Cache-Page': 'MISS', 'Set-Cookie': 'locale=en_GB; Expires=Mon, 05-Mar-2018 23:45:52 GMT; Domain=.napoleongames.be; Path=/, user=false; expires=Mon, 05-Mar-2018 23:45:52 GMT; Max-Age=15552000; path=/; domain=.napoleongames.be, loyalty=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.napoleongames.be', 'Strict-Transport-Security': 'max-age=15768000', 'Vary': 'Accept-Encoding', 'Content-Encoding': 'gzip', 'Content-Length': '10840', 'Connection': 'close', 'Content-Type': 'text/html'}
残念ながら、現代のウェブサイトのフレームワークの多くは、javascriptに大きく依存しています。もちろん、要求は処理できません。あなたの作品は、定期的に現代のWebページをスクラップする必要がある場合、私は強くセレンに慣れて、それは優秀で、この種の問題を簡単に解決することを強くお勧めします。 @DanielleM。 –
リクエストにはjavascriptがあります。 [Link](https://stackoverflow.com/a/38081914/7073884) –
@DanielleM。いいえ、楽しかったです。私はセレンを使用するときに発生するエラーを把握する必要があります。最初に解決策がダウングレードされているパスの問題がありましたが、何かがgeckodriverに間違っていて、次に推奨ソリューションがアップグレードされていたので、リクエストに集中しました – Rob