Selenium で Chrome/Edge のプロファイルが使えなくなった問題の解決方法
最近、SeleniumでChromeやEdgeを起動して、普段使っているブラウザのログイン状態や設定を引き継ごうとしたら、突然動かなくなって困った経験はありませんか?
特に
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: Chrome failed to start: crashed.
や
(session not created: DevToolsActivePort file doesn't exist)
といったエラーが出て、ブラウザが起動してもすぐに閉じてしまったり、立ち上がっても操作できなかったり...。
もしあなたが同じ状況で悩んでいるなら、この記事がお役に立てるかもしれません。今回は、私がこの問題に直面し、ウェブ上の最新情報を参考に解決した方法を共有します!
なぜ急にプロファイルが使えなくなったのか?原因を探る
以前は、Seleniumのオプションで --user-data-dir
に、普段使っているChromeやEdgeの「User Data」フォルダのパスを指定すれば、簡単にログイン状態などを引き継ぐことができました。
# 以前のChromeプロファイル指定(例)
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--user-data-dir=C:\\Users\\あなたのユーザー名\\AppData\\Local\\Google\\Chrome\\User Data')
# ...
# driver = webdriver.Chrome(options=options)
しかし、ChromeやEdgeの最新バージョン(どうやら2025年5月頃から挙動が変わったようです)では、この指定方法でうまくプロファイルを読み込めず、WebDriverがブラウザと通信するための準備(DevToolsActivePort
というファイルを使います)ができない状況が発生しているようです。セキュリティ強化などが影響している可能性が考えられます。
さらに、このエラーの最も一般的で大きな原因は、指定しようとしているユーザープロファイルディレクトリを、Selenium スクリプトの実行時に、手動で起動している他の Chrome/Edge ブラウザが使用している ことです。同じプロファイルに複数のブラウザプロセスが同時にアクセスしようとすると、競合が発生し、WebDriverが通信を確立できずにエラーとなります。
今回の私のケースでも、結局はこの「ブラウザの手動起動」が主な原因でした...!基本的なことですが、意外と見落としがちです。
最新版に対応!プロファイルの新しい指定方法「新しい作法」
ウェブで最新情報を探したところ、どうやら最新のChrome/Edgeでは、User Data フォルダを直接 --user-data-dir
で指定するのではなく、ブラウザの実行ファイルがあるフォルダ(Chromeなら...\Google\Chrome
、Edgeなら...\Microsoft\Edge
)の配下に新しくフォルダを作成し、それをUser Dataディレクトリとして指定する という「新しい作法」が必要になっているようです。
そして、既存のプロファイル(ログイン情報など)を引き継ぎたい場合は、その新しいフォルダの中に普段使っているプロファイル(通常は「Default」フォルダ)の中身をコピーする必要があるとのことです。
具体的な手順は以下のようになります。
元のプロファイルパスを確認する:
-
普段使っているChromeまたはEdgeを手動で起動します。
-
アドレスバーに
chrome://version/
(Chrome) またはedge://version/
(Edge) と入力してEnterキーを押します。 -
表示される情報の中から「プロファイル パス」を探します。
- 例:
C:\Users\あなたのユーザー名\AppData\Local\Google\Chrome\User Data\Default
- 例:
-
このパスの末尾にある
Default
フォルダが、後でコピーする対象です。 -
その親フォルダである
User Data
フォルダ、さらにその親のChrome
(またはEdge
) フォルダの場所も確認しておきます。
Selenium コードで新しいパスを指定する:
-
あなたの Python スクリプトを開き、Selenium WebDriver を起動する部分を探します。
-
ChromeOptions
またはEdgeOptions
オブジェクトを作成し、--user-data-dir
オプションに 手順2で作成した新しいフォルダのパス を指定します。
Selenium コードでの修正例 (Python):
あなたのスクリプトの、WebDriver を起動する箇所のオプション設定部分を、以下のように修正してください。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options # Chromeの場合
# from selenium.webdriver.edge.options import Options # Edgeの場合
from webdriver_manager.chrome import ChromeDriverManager # Chromeの場合
# from webdriver_manager.microsoft import EdgeChromiumDriverManager # Edgeの場合
from selenium.webdriver.chrome.service import Service # Chromeの場合
# from selenium.webdriver.edge.service import Service # Edgeの場合
# ... (その他の import や関数定義) ...
# WebDriverを初期化している関数 (例としてmain関数内のOptions設定部分)
# def main(): # または、WebDriverを初期化している関数
# オプションを設定
options = Options() # または EdgeOptions()
# ... (その他のオプション設定があればそのまま) ...
# 例: options.add_argument('--disable-gpu')
# 例: options.add_argument('--no-sandbox')
# 元の --user-data-dir 指定があれば、削除またはコメントアウトします
# # options.add_argument('--user-data-dir=C:\\Users\\あなたのユーザー名\\AppData\\Local\\Google\\Chrome\\User Data')
# ★★★ ここにウェブ情報に基づいた新しいプロファイル指定を追加 ★★★
# 手順2で作成し、手順3でDefaultプロファイルをコピーした新しいフォルダの正確なパスを指定します。
# パスは r'' で囲むと \ をそのまま扱えて便利です。
new_selenium_profile_path = r'C:\Users\あなたのユーザー名\AppData\Local\Google\Chrome\SeleniumProfile' # ★★★ ここをあなたの新しいフォルダの正確なパスに置き換えてください ★★★★
# --user-data-dir オプションに新しいフォルダのパスを指定します。
options.add_argument(f'--user-data-dir={new_selenium_profile_path}')
# ウェブ情報に基づいた新しい作法では、通常 --profile-directory オプションは指定しません。
# Selenium は指定された --user-data-dir の中に Default プロファイルなどを探しに行きます。
# もし Default フォルダが見つからなければ、Seleniumが新しく作成します。
# ★★★ 修正ここまで ★★★
# Chromeドライバーの起動 (Edgeの場合は webdriver.Edge)
# try: # エラーハンドリングがあればそのまま
# service = Service(ChromeDriverManager().install()) # Chromeの場合
# driver = webdriver.Chrome(service=service, options=options)
# ... (以降のSelenium操作コード) ...
まとめ
-
Chrome/Edge の最新バージョンでは、User Data フォルダ直下ではなく、
...\Chrome
や...\Edge
フォルダ内に新しくフォルダを作成し、そこにプロファイルをコピーして--user-data-dir
で指定するという「新しい作法」が必要になっています。 -
DevToolsActivePort file doesn't exist
やChrome failed to start: crashed
といったエラーの最も一般的な原因は、Selenium 実行中に指定プロファイルを他のブラウザプロセスが使用していることです。 -
新しいプロファイル指定方法でコードを修正し、スクリプト実行前に必ずブラウザを手動で完全に終了させる ことで、これらの問題を解決し、ログイン状態を引き継いで Selenium を実行できるようになります。
もしあなたが同じエラーで困っていたなら、ぜひこの方法を試してみてください。そして、この情報が他の誰かの助けになれば幸いです。
追記:
今回の情報は2025年5月現在のものですが、ブラウザのアップデートにより今後挙動が変わる可能性もあります。
補足
Chrome は、以下のほうの新しい情報引き継ぐ感じなので、
cmd 開いて、例えば以下みたいに
chrome.exe --user-data-dir="C:\Users\ユーザー名\AppData\Local\Google\Chrome\SeleniumProfile" --profile-directory="Default"
そんでこっちでログインとかしておくとか。