閉じる

Python SeleniumでのCookie操作:取得・保存・削除の具体的手順

Pythonを使用したWebスクレイピングやブラウザ自動化において、セッションの維持やログイン状態の管理は非常に重要な要素です。

Seleniumを利用することで、ブラウザが保持するCookieを自由に操作し、効率的な自動化スクリプトを構築することが可能になります。

本記事では、SeleniumでCookieを取得、保存、そして削除するための具体的な手順をプログラムコードと共に詳しく紹介します。

Cookieの基本的な扱い方を理解することで、ログイン処理をスキップしたり、特定のユーザー設定を保持したままブラウザを操作したりできるようになります。

最新のブラウザ仕様に対応した実装方法を学び、実務で役立つスキルを身に付けましょう。

SeleniumにおけるCookie操作の重要性

Webサイトは、ユーザーのセッション情報やログイン状態を識別するためにCookieを利用しています。

Seleniumで自動テストやスクレイピングを行う際、実行のたびにログイン処理を繰り返すと、サイト側に負荷をかけるだけでなく、セキュリティブロックの対象になるリスクがあります。

一度ログインした際のCookieを保存し、次回の実行時にそれを読み込むことで、ログインプロセスを省略し、効率的に作業を進めることができます。

また、Cookieを削除することで、ブラウザをクリーンな状態に戻し、キャッシュの影響を受けないテストを実行することも可能です。

Cookieの構造とSeleniumの対応

SeleniumにおけるCookieは、Pythonの辞書(dict)形式として扱われます。

各Cookieには、名前(name)、値(value)、ドメイン(domain)、パス(path)、有効期限(expiry)などの属性が含まれています。

SeleniumのWebDriverは、これらの情報を取得したり、新しいCookieをブラウザに追加したりするための専用メソッドを提供しています。

Cookieを取得する方法

まずは、現在ブラウザに保存されているCookieを取得する方法を確認しましょう。

Cookieを取得するには、get_cookies() または get_cookie() メソッドを使用します。

すべてのCookieを取得する

get_cookies() を使用すると、現在アクセスしているドメインに関連するすべてのCookieをリスト形式で取得できます。

Python
from selenium import webdriver

# WebDriverのセットアップ
driver = webdriver.Chrome()

# 対象のサイトにアクセス
driver.get("https://example.com")

# すべてのCookieを取得
cookies = driver.get_cookies()

# 取得したCookieを表示
for cookie in cookies:
    print(cookie)

driver.quit()
実行結果
[{'domain': '.example.com', 'expiry': 1735689600, 'httpOnly': False, 'name': 'session_id', 'path': '/', 'sameSite': 'Lax', 'secure': True, 'value': 'abc123xyz'}]

特定の名称を指定してCookieを取得する

特定のCookieの値だけが必要な場合は、get_cookie(name) を使用します。

引数には取得したいCookieの名前を文字列で渡します。

Python
# 特定のCookie名(例: 'session_id')を指定して取得
session_cookie = driver.get_cookie("session_id")
print(session_cookie)

指定した名前のCookieが存在しない場合、このメソッドは None を返します。

Cookieを保存・読み込みして再利用する方法

取得したCookieをファイルとして保存しておけば、ブラウザを閉じた後でもセッションを復元できます。

一般的には、Python標準の json モジュールを使用してJSON形式で保存するのが便利です。

CookieをJSONファイルに保存する

以下のコードは、取得したCookieを cookies.json という名前のファイルに書き出す例です。

Python
import json
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

# (ここで手動ログインや自動ログイン処理を行う)

# Cookieを取得してファイルに保存
cookies = driver.get_cookies()
with open("cookies.json", "w") as f:
    json.dump(cookies, f)

driver.quit()

保存したCookieを読み込んでブラウザに追加する

保存したCookieを読み込み、ブラウザにセットすることでログイン状態を復元します。

注意点として、Cookieを追加する前に必ずそのCookieが属するドメインに一度アクセスしておく必要があります。

Python
import json
import time
from selenium import webdriver

driver = webdriver.Chrome()

# 1. まずドメインにアクセス(これを行わないとCookieを追加できない)
driver.get("https://example.com")

# 2. JSONファイルからCookieを読み込む
with open("cookies.json", "r") as f:
    cookies = json.load(f)

# 3. 各Cookieをブラウザに追加
for cookie in cookies:
    # expiry(有効期限)がfloat型で保存されている場合にエラーが出ることがあるためintに変換
    if "expiry" in cookie:
        cookie["expiry"] = int(cookie["expiry"])
    driver.add_cookie(cookie)

# 4. ページをリフレッシュしてCookieを反映させる
driver.refresh()

# ログイン状態が維持されているか確認
time.sleep(5)
driver.quit()

Cookieを削除する方法

特定のテストケースや、セッションをリセットしたい場合にはCookieの削除が必要です。

Seleniumでは、特定のCookieを選択して削除する方法と、すべてのCookieを一括で削除する方法が用意されています。

特定のCookieを削除する

delete_cookie(name) を使用すると、指定した名前のCookieのみを削除できます。

Python
# 'session_id' という名前のCookieを削除
driver.delete_cookie("session_id")

すべてのCookieを削除する

ブラウザに保存されているすべてのCookieを削除するには、delete_all_cookies() を使用します。

Python
# すべてのCookieを削除
driver.delete_all_cookies()

# 削除後にページをリフレッシュして状態を確定させる
driver.refresh()

これにより、ブラウザはログアウト状態や初期状態に戻ります。

Cookie操作における注意点とトラブルシューティング

Cookieの操作には、いくつか実務上の落とし穴があります。

ここでは、よくある問題とその対策について解説します。

ドメインの不一致によるエラー

add_cookie() を実行する際、現在ブラウザが開いているページのドメインと、追加しようとしているCookieのドメインが一致していないとエラーが発生します。

必ず driver.get("URL") で対象サイトを開いてからCookie操作を行ってください。

SameSite属性の影響

近年のブラウザセキュリティ強化により、SameSite 属性が厳格に管理されています。

Cookieを手動で作成して add_cookie() する場合、SameSite 属性が適切に設定されていないとブラウザに拒否されることがあります。

基本的には、ブラウザから get_cookies() で取得した値をそのまま利用するのが最も安全です。

有効期限(expiry)の形式

Cookieの有効期限を示す expiry は、UNIXタイムスタンプの整数値である必要があります。

JSONから読み込んだ際に浮動小数点(float)になっているとエラーの原因となるため、int() でキャストすることをお勧めします。

実用的な活用例:ログイン情報の永続化

実際の開発現場では、ログイン状態を維持するために以下のようなフローがよく使われます。

まず、初回起動時に手動、あるいは自動でログインを行い、その直後にCookieをローカルストレージへ保存します。

二回目以降の起動時には、スクリプトの冒頭で保存されたファイルの有無を確認します。

ファイルが存在すれば、それを読み込んでブラウザにセットし、ログイン画面をスキップして目的のページへ直接遷移します。

これにより、二要素認証(2FA)が必要なサイトでも、セッションが有効な限り自動操作を継続することが可能になります。

サンプル:Cookieを利用した自動ログインスキップ

Python
import os
import json
from selenium import webdriver

def setup_driver_with_cookies(url, cookie_file):
    driver = webdriver.Chrome()
    driver.get(url)

    if os.path.exists(cookie_file):
        with open(cookie_file, "r") as f:
            cookies = json.load(f)
        for cookie in cookies:
            driver.add_cookie(cookie)
        driver.refresh()
        print("Cookieを読み込みました。")
    else:
        print("Cookieファイルが見つかりません。ログイン後に保存してください。")
    
    return driver

# 使用例
target_url = "https://example.com/dashboard"
file_path = "user_session.json"
driver = setup_driver_with_cookies(target_url, file_path)

# ログイン状態での処理を記述...

driver.quit()

まとめ

PythonとSeleniumを組み合わせたCookie操作は、Web自動化の柔軟性を飛躍的に高めてくれます。

get_cookies() で情報を取得し、JSON形式で保存、そして add_cookie() で復元するという一連の流れは、スクレイピングの実務において必須のテクニックです。

また、不要になった情報を delete_all_cookies() で整理することで、安定したテスト環境を維持できます。

ドメインへの事前アクセスデータ型の変換といった注意点を守りながら、効率的なブラウザ操作を実現しましょう。

本記事で紹介した手順を参考に、ぜひご自身のプロジェクトにCookie管理を取り入れてみてください。

URLをコピーしました!