「Seleniumでクッキーを読み込みたい」
「ログインした状態でスクレイピングしたい」
このような場合には、この記事の内容が参考となります。
この記事では、Seleniumによるクッキーの利用方法を解説しています。
本記事の内容
- Seleniumによるクッキーの利用
- EditThisCookieを使ったクッキーの保存
- Seleniumによるクッキーの読み込み
それでは、上記に沿って解説していきます。
Seleniumによるクッキーの利用
Seleniumでは、クッキーを利用することが可能です。
そのためには、クッキーを取得する必要があります。
そもそも、Seleinumについてよくわからない場合は次の記事をご覧ください。
クッキーの取得方法には、複数の方法があります。
今回は、Chrome拡張機能を使った方法を説明します。
そのChrome拡張機能は、以下。
EditThisCookie
https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?hl=ja
EditThisCookieを使って、ブラウザからクッキーをコピーします。
そして、コピーした情報をテキストに保存。
そのテキストから読み込んだ情報をSeleniumで利用することになります。
イメージできましたか?
実際にやってみるとすぐに理解できます。
まずは、EditThisCookieを使ってクッキーを保存してみましょう。
EditThisCookieを使ったクッキーの保存
EditThisCookieのインストールは、他のChrome拡張機能を同じです。
EditThisCookieをインストールできたら、次のページへアクセスします。
World Wide Web Consortium (W3C)
https://www.w3.org/
このページ(サイト)を選んだ理由は、クッキーがシンプルだからです。
ページにアクセスしたら、クッキーを確認します。

Chrome DevTools(デベロッパーツール、開発者ツール)から、確認できます。
この値をEditThisCookieで取得しようということです。
EditThisCookieを起動しましょう。

これは、「拡張機能」アイコンをクリックした状態です。
ここで「EditThisCookie」を選択。

EditThisCookieが、起動しました。
初期状態では、「_pk_ses.447.fbaa」を選択しているようです。
有効期限が、日本時間に変換されています。
これは、何気に嬉しいです。
もう一方の「_pk_id.447.fbaa」も確認しておきましょう。

両方の値ともに、Chrome DevToolsで確認した値と同じですね。
これをまとめて取得するには、次のボタンをクリックします。

オンマウスで次のように表示されます。
クッキーのエクスポート機能ですね。

このボタンをクリックすると、次のように表示されます。

これでクリップボードに、クッキーが保存されました。
内容は、json形式となっています。
[
{
"domain": "www.w3.org",
"expirationDate": 1672642884,
"hostOnly": true,
"httpOnly": false,
"name": "_pk_id.447.fbaa",
"path": "/",
"sameSite": "lax",
"secure": false,
"session": false,
"storeId": "0",
"value": "0eec6ec7740f76e7.1638687684.",
"id": 1
},
{
"domain": "www.w3.org",
"expirationDate": 1638689483,
"hostOnly": true,
"httpOnly": false,
"name": "_pk_ses.447.fbaa",
"path": "/",
"sameSite": "lax",
"secure": false,
"session": false,
"storeId": "0",
"value": "1",
"id": 2
}
]
これをcookie.txt(名前は何でもOK)に保存します。
ここまでの処理でクッキーの保存が、完了しました。
次は、Seleniumでこのクッキーを読み込みます。
Seleniumによるクッキーの読み込み
実際のコードで確認しましょう。
import json
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome import service as fs
CHROMEDRIVER = "chromedriverのパス"
# 対象ページ
URL = "https://www.w3.org/"
# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path=CHROMEDRIVER)
options = Options()
options.add_argument(f'service={chrome_service}')
driver = webdriver.Chrome(options=options)
# 対象ページへアクセス(1回目)
driver.get(URL)
json_open = open('cookie.txt', 'r')
cookies = json.load(json_open)
for cookie in cookies:
tmp = {"name": cookie["name"], "value": cookie["value"]}
driver.add_cookie(tmp)
# 対象ページへアクセス(2回目)
driver.get(URL)
このコードは、Selenium 4で動きます。
Selenium 3とSelenium 4では仕様が若干異なります。
そのあたりは、次の記事で説明しています。
コードに戻ります。
先程、クッキーを読み込み処理は次の部分です。
# 対象ページへアクセス(1回目)
driver.get(URL)
json_open = open('cookie.txt', 'r')
cookies = json.load(json_open)
for cookie in cookies:
tmp = {"name": cookie["name"], "value": cookie["value"]}
driver.add_cookie(tmp)
# 対象ページへアクセス(2回目)
driver.get(URL)
json形式であるため、jsonとして読み込んでいます。
nameとvalueだけを抜き出して、利用します。
add_cookieの詳細は、マニュアルをご覧ください。
それよりも、重要なことは2回アクセスすることです。
Seleniumの仕様として、クッキー追加を行う時点で対象サイトへはアクセス済みが前提となります。
1回目のアクセスを行わないと、次のエラーが発生します。
selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
そのため、2回アクセスするような処理をコーディングしています。
負荷軽減のためには、1回目はサイズの小さいページにした方がいいかもしれません。
そして、2回目はクッキーを保持してアクセスしたいページにアクセスするという感じです。
では、コードの実行結果を見てみましょう。
ブラウザが立ち上がり、対象ページにアクセスします。
Chrome DevToolsでクッキーを確認します。
(「Console」や「Application」が初期の英語表示です)

見事に、同じ値のクッキーを読み込んでいます。
以上、Seleniumによるクッキーの読み込みを説明しました。



