ChromeDriverとChromeのバージョン不一致エラーの解決
問題の説明
Selenium 4.10.0とChrome 115を使用している環境で、以下のエラーが発生します:
ValueError: There is no such driver by url https://chromedriver.storage.googleapis.com/LATEST_RELEASE_115.0.5790
この問題の根本的な原因は、ChromeDriverManager
が旧式のダウンロードURL(chromedriver.storage.googleapis.com
)を使用しているためです。Chrome 115以降では、Chromiumチームが「Chrome for Testing」という新しい配信システムに移行したのに伴い、ドライバーの取得方法が変更されました。
重要な背景
Chrome 114までと115以降ではドライバー管理システムが完全に変更されました:
- 115以前:
chromedriver.storage.googleapis.com
から取得 - 115以降:
Chrome for Testing
システムから取得
最新のベストプラクティスによる解決策
解決策1: Selenium Managerの活用(推奨)
Selenium 4.10.0以降にはSelenium Managerが標準搭載され、ドライバー管理を自動化します。ChromeDriverManager
は不要です:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
service = Service()
options = Options()
driver = webdriver.Chrome(service=service, options=options)
driver.get('https://www.crawler-test.com')
print(driver.title)
driver.quit()
Selenium Managerの特徴
- 自動ダウンロード:PATHにドライバーがない場合、適切なバージョンを自動取得
- バージョン管理不要:ブラウザバージョンとドライバーの互換性を自動解決
- 設定不要:追加ライブラリ不要でシンプルな実装
解決策2: Chrome for Testingの手動設定
テスト環境を完全に制御したい場合、Chrome for Testingを手動で設定します:
- Chrome for Testing ダッシュボードで安定版を確認
- ChromeとChromeDriverをダウンロード
- パスを通して明示的に指定:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
chrome_path = '/path/to/chrome-for-testing/chrome'
driver_path = '/path/to/chrome-for-testing/chromedriver'
options = Options()
options.binary_location = chrome_path # Chromeのパスを明示
service = Service(executable_path=driver_path) # ChromeDriverのパスを明示
driver = webdriver.Chrome(service=service, options=options)
解決策3: スクリプトによる自動設定(Docker環境向け)
CI/CDパイプラインやDocker環境では、インストールスクリプトで自動化できます:
# Chrome for Testingの最新安定版取得
CHROME_VERSION=$(curl -sS https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_STABLE)
# ChromeDriverのインストール
curl -sS -o /tmp/chromedriver.zip \
"https://storage.googleapis.com/chrome-for-testing-public/$CHROME_VERSION/linux64/chromedriver-linux64.zip"
unzip /tmp/chromedriver.zip -d /opt/
ln -s /opt/chromedriver-linux64/chromedriver /usr/local/bin/
# Chromeのインストール
curl -sS -o /tmp/chrome.zip \
"https://storage.googleapis.com/chrome-for-testing-public/$CHROME_VERSION/linux64/chrome-linux64.zip"
unzip /tmp/chrome.zip -d /opt/
ln -s /opt/chrome-linux64/chrome /usr/local/bin/
環境変数の注意
Windowsではlinux64
をwin64
に、macOSではmac-arm64
/mac-x64
に置き換えてください
一時的な回避策
すぐにSeleniumをアップグレードできない場合のワークアラウンド:
回避策1: webdriver-managerの更新
問題が修正されているwebdriver-manager
3.8.6+を使用:
pip install --upgrade webdriver-manager
回避策2: 特定バージョンの明示指定
114系など利用可能なバージョンを固定:
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
# 114系の最終バージョンを明示的に指定
service = Service(ChromeDriverManager(version="114.0.5735.90").install())
バージョン指定のリスク
この方法は一時的な回避策です:
- Chromeの自動更新で再び互換性が崩れる
- セキュリティフィックスが適用されない
よくある質問
Q. Chromeの自動更新を無効化すべきですか?
推奨しません。セキュリティリスクが増大します。代わりにSelenium Managerなど互換性管理を自動化するソリューションを採用してください。
Q. Firefoxに切り替えるのは良い解決策ですか?
根本解決にならず、Chrome固有の問題を先送りするだけです。ブラウザの特性に合わせた適切なテスト環境構築が重要です。
ベストプラクティスの推奨
- Selenium 4.10.0+へのアップグレード
- Selenium Managerの採用
- ドライバー管理がシンプルに
- バージョン不一致問題の根本解決
- Chrome for Testingの検討
- テスト専用ブラウザを使用
- 本番環境からの分離が可能
今後のメンテナンスを考慮すると、Selenium Managerを使用した公式ソリューションの採用が最も効率的で信頼性の高い方法です。