SeleniumでChromeを自動操作する際、毎回「未ログイン(初期状態)」になってしまうのは、Seleniumが起動するたびに使い捨ての新しいプロファイル(クッキーやセッション情報を持たない状態)を作成するからです。
これを解決し、ログイン状態を保持(または自動ログイン)するには主に3つの方法があります。
方法1:既存のChromeユーザープロファイルを読み込む(推奨)
普段使っているChrome、またはSelenium専用のChromeプロファイルを指定して起動することで、クッキーやログインセッションをそのまま引き継ぐことができます。 [1]
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
# ⚠️ 注意: ブラウザを完全に閉じてから実行してください
# Windowsの場合のパス例 (ユーザー名は自身のものに変更)
options.add_argument(r"--user-data-dir=C:\Users\ユーザー名\AppData\Local\Google\Chrome\User Data")
# Macの場合のパス例
# options.add_argument("--user-data-dir=/Users/ユーザー名/Library/Application Support/Google/Chrome")
# プロファイル名を指定(デフォルトは 'Default'、別プロファイルなら 'Profile 1' など)
options.add_argument("--profile-directory=Default")
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
- メリット: 2段階認証が必要なサイトでも、一度手動でログインすれば次回からスキップできます。
- 注意点: 指定したプロファイルの通常のChromeブラウザが既に開いているとエラーになります。必ず完全に閉じてからスクリプトを実行してください。
方法2:Cookie(クッキー)を保存・読込する
ログイン後のクッキーをファイルに保存しておき、次回起動時にそれを読み込ませてログイン状態を再現します。
① 最初だけ手動でログインしてクッキーを保存する [2]
import json
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
# 画面が開いたら、30秒以内に手動でログインを完了させてください
time.sleep(30)
# ログイン後のクッキーを取得してファイルに保存
cookies = driver.get_cookies()
with open("cookies.json", "w") as f:
json.dump(cookies, f)
driver.quit()
② 次回以降、クッキーを読み込んで自動ログインする
import json
from selenium import webdriver
driver = webdriver.Chrome()
# 💡 クッキーを追加する前に、必ずそのサイトのドメインに一度アクセスする必要があります
driver.get("https://example.com")
# 保存したクッキーを読み込んでブラウザに追加
with open("cookies.json", "r") as f:
cookies = json.load(f)
for cookie in cookies:
driver.add_cookie(cookie)
# ページをリフレッシュするとログイン状態になります
driver.refresh()
- メリット: 通常のChromeを閉じる必要がなく、並列処理もしやすいです。
- 注意点: クッキーの有効期限が切れると再保存が必要です。また、2段階認証などのセキュリティが厳しいサイトでは失敗することがあります。
方法3:毎回IDとパスワードを自動入力する
コード内で毎回ログイン画面の要素(inputタグ)を探し、IDとパスワードを打ち込んでログインボタンをクリックさせます。
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
# 要素を見つけて入力(セレクターはサイトに合わせて変更してください)
driver.find_element(By.NAME, "username").send_keys("your_email@example.com")
driver.find_element(By.NAME, "password").send_keys("your_password")
driver.find_element(By.ID, "login-button").click()
- メリット: コードがシンプルで完結します。
- 注意点: ログインのたびに「ロボットではありません」などの認証(CAPTCHA)や、スマホへの2段階認証通知が飛ぶサイトでは、この方法だけでは突破できません。
どの方法で進めたいかによって、さらに詳しいコードの調整が可能です。
もし上手くいかない場合は、以下の点について教えていただけますか?
- ログインしたい特定のウェブサイト(可能であれば)
- 該当のサイトは2段階認証や画像認証(私はロボットではありません)がありますか?
- 現在お使いのOS(Windows / Mac / Linux) [3]

