Python
HTML
Requests

Pythonのrequestsモジュールでログインしようとしたらうまくいかなかった話

問題

いろんな参考記事を見ていると(Qiitaログインなど)、ログインページに対して

payload = {
    'userid': 'my_id',
    'password': 'my_pass'
}
s = requests.Session()
p = s.post(login_url, data=payload)

r = s.get(want_to_access_url)

まあだいたいこんな感じで処理をしておられて、それでうまくいくよ!とのことだったのですが、僕がログインしようと思ったページはなぜかできない...。

exciteメールとかで試すとうまくいくのに...。

解決

ソースコードをよくよく読み返していると、ログインフォームの上部分に

<form action="/login/login/" method="post">

こんなコードがありました。

ググってみると

action属性とは
・formタグに指定する属性で、必ず指定しなければならない
・フォームの送信ボタンを押して送信されるデータの送信先を指定する
・データの送信先のことをURIという
・指定するのはデータを受け渡す処理をしてくれるサーバーのCGIプログラムのURI

ということで、
URLの末尾をactionのパスに書き換えればいいんじゃね!?

add-action-path
failed_url = 'https://ssl.syosetu.com/login/input/'  #ブラウザからアクセスした時表示されるURL
success_url = 'https://ssl.syosetu.com/login/login/'  #うまくログインできるURL

と試して見たら、ドンピシャでうまくいきました。

WEBの勉強しなきゃ...。汗

「あれ?ログインできない!なんで!」と思われた方はお試しください!