Python爬虫類シミュレーションのログインに失敗し、ログインページの解決方法にリダイレクトしました.

1707 ワード

今日はサイトにログインするシミュレーションを試みましたが、登るページはログインしなければアクセスできないのでrequestsを使います.セッション()はCookieを保持し、登るページにアクセスします.
しかし、この爬虫類はシミュレーションログインに成功したり、失敗したりして、おかしいです.
ログインに成功したかどうかをテストするコードクリップは、次のとおりです.
    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' !')