Help us understand the problem. What is going on with this article?

Python requests で取得したログインセッションクッキーを Selenium ブラウザに渡してログインする

More than 3 years have passed since last update.

何を言ってるのか

クライアントがモバイルアプリなど、Webブラウザ以外を想定している Web アプリがあるとします。

それは、よくある Web サービスで見るようなログインページを持たないとします。クライアントアプリにログインフォームが入っているためです。

でも、自動テストとかする時は、Selenium のブラウザからアクセスして動作を見たい。
そんな時。

コード

python
import requests
from selenium import webdriver

cookie_name = 'session_id'

# requests でログインしてセッションクッキーを作る
s = requests.session()
login_data = {
    'email': 'xxxx@xxxx.xx',
    'password': 'xxxxxxxxxx',
}
res = s.post('https://example.com/login/', data=login_data)
res.raise_for_status()

# セッションクッキーの値
cookie_value = s.cookies.get(cookie_name)

# Firefox起動
driver = webdriver.Firefox()
# 事前に、ターゲットドメインの適当なページを開いておく。
# これをしないと、add_cookie でエラーになる
driver.get('https://example.com/')
# requests で取得したセッションクッキーを Firefox に渡す
driver.add_cookie({
        'name': cookie_name,
        'value': cookie_value,
        'domain': 'example.com'})
# ログイン後のページを表示
driver.get('https://example.com/mypage/')

これで、Firefox でログイン後のページが見れます。

なお、webdriver.Chrome でも同様に add_cookie メソッドが動きますので、同様にログインできます。多分、他の web ドライバでも動きます。

ダメだった例

ローカルに、適当なフォームの HTML を作り、その action= をログインURL にした場合、method="POST" にしてもなぜか GET でリクエストされました。最近のブラウザだとセキュリティのためかクロスドメインでの POST での送信はできなくなっている模様。

がんばれば selenium だけでできるかもしれない案

Selenium で、ログイン先のドメインの適当なページを開いて、JS でログインフォームを作り、そこから POST 送信すればログインできるかもしれません。でも大変そうなのでやってないです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした