Python爬虫類シミュレーションのログインに失敗し、ログインページの解決方法にリダイレクトしました.
1707 ワード
今日はサイトにログインするシミュレーションを試みましたが、登るページはログインしなければアクセスできないのでrequestsを使います.セッション()はCookieを保持し、登るページにアクセスします.
しかし、この爬虫類はシミュレーションログインに成功したり、失敗したりして、おかしいです.
ログインに成功したかどうかをテストするコードクリップは、次のとおりです.
原理はhttps://example.com/mypageページはログインユーザのみが正常にアクセスできるページであり、非ログインユーザがこのページにアクセスするとログインページにリダイレクトされますhttps://example.com/login?referer=/mypage/したがって、応答オブジェクトのurlとアクセスするターゲットurlが一致しているかどうかを比較すればよい.
ログインに成功することもあるので、FormData、headersとは関係ありません.
timeに参加してみます.sleep(3)postアカウント情報とgetアカウントページの間に3秒の遅延を増やし,何度か再試行した結果も同様であり,排除した.
次に、ログインに失敗した場合とログインに成功した場合に、応答オブジェクトのリクエスト履歴を印刷します.
応答オブジェクトのhistoryメソッドは、リダイレクトを追跡し、Responseオブジェクトのリストを返すために使用できます.シミュレーションログインに成功した場合response.historyは空のリストを返します(ログインしたユーザーはこのページに直接アクセスでき、リダイレクトされないため)、ログインに失敗した場合[]を返します.つまり、ログインに失敗した場合、302ステータスコードのリダイレクトが発生します.
なぜこのようなことが起こったのか分かりませんが、getターゲットページにallow_を追加します.redirects=Falseパラメータでリダイレクト処理を無効にすると、シミュレーションログインは常に成功します.
しかし、この爬虫類はシミュレーションログインに成功したり、失敗したりして、おかしいです.
ログインに成功したかどうかをテストするコードクリップは、次のとおりです.
account_page = 'https://example.com/mypage'
response = session.get(account_page)
if response.url == account_page:
print(u' !')
else:
print(u' !')
原理はhttps://example.com/mypageページはログインユーザのみが正常にアクセスできるページであり、非ログインユーザがこのページにアクセスするとログインページにリダイレクトされますhttps://example.com/login?referer=/mypage/したがって、応答オブジェクトのurlとアクセスするターゲットurlが一致しているかどうかを比較すればよい.
ログインに成功することもあるので、FormData、headersとは関係ありません.
timeに参加してみます.sleep(3)postアカウント情報とgetアカウントページの間に3秒の遅延を増やし,何度か再試行した結果も同様であり,排除した.
次に、ログインに失敗した場合とログインに成功した場合に、応答オブジェクトのリクエスト履歴を印刷します.
account_page = 'https://example.com/mypage'
response = session.get(account_page)
if response.url == account_page:
print(u' !')
print(response.history) #
else:
print(u' !')
print(response.history) # []
応答オブジェクトのhistoryメソッドは、リダイレクトを追跡し、Responseオブジェクトのリストを返すために使用できます.シミュレーションログインに成功した場合response.historyは空のリストを返します(ログインしたユーザーはこのページに直接アクセスでき、リダイレクトされないため)、ログインに失敗した場合[]を返します.つまり、ログインに失敗した場合、302ステータスコードのリダイレクトが発生します.
なぜこのようなことが起こったのか分かりませんが、getターゲットページにallow_を追加します.redirects=Falseパラメータでリダイレクト処理を無効にすると、シミュレーションログインは常に成功します.
account_page = 'https://example.com/mypage'
response = session.get(account_page, allow_redirects=False)
if response.url == account_page:
print(u' !')
else:
print(u' !')