Skip to content

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は不要です:

python
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の特徴

  1. 自動ダウンロード:PATHにドライバーがない場合、適切なバージョンを自動取得
  2. バージョン管理不要:ブラウザバージョンとドライバーの互換性を自動解決
  3. 設定不要:追加ライブラリ不要でシンプルな実装

解決策2: Chrome for Testingの手動設定

テスト環境を完全に制御したい場合、Chrome for Testingを手動で設定します:

  1. Chrome for Testing ダッシュボードで安定版を確認
  2. ChromeとChromeDriverをダウンロード
  3. パスを通して明示的に指定:
python
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環境では、インストールスクリプトで自動化できます:

bash
# 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ではlinux64win64に、macOSではmac-arm64/mac-x64に置き換えてください

一時的な回避策

すぐにSeleniumをアップグレードできない場合のワークアラウンド:

回避策1: webdriver-managerの更新

問題が修正されているwebdriver-manager 3.8.6+を使用:

bash
pip install --upgrade webdriver-manager

回避策2: 特定バージョンの明示指定

114系など利用可能なバージョンを固定:

python
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固有の問題を先送りするだけです。ブラウザの特性に合わせた適切なテスト環境構築が重要です。

ベストプラクティスの推奨

  1. Selenium 4.10.0+へのアップグレード
  2. Selenium Managerの採用
    • ドライバー管理がシンプルに
    • バージョン不一致問題の根本解決
  3. Chrome for Testingの検討
    • テスト専用ブラウザを使用
    • 本番環境からの分離が可能

今後のメンテナンスを考慮すると、Selenium Managerを使用した公式ソリューションの採用が最も効率的で信頼性の高い方法です。