【Python】Seleniumが突然エラーに!ChromeとDriverのバージョン不一致(144 vs 145)の解決策と備忘録

 

今日、いつも使っているPythonのスクレイピングツールを起動したら、突然エラーが出て動かなくなってしまいました。昨日までは普通に動いていたのに……。

というわけで、備忘録として、原因と解決策(将来を見越したコードの書き方)をまとめておきます。

 

エラーの内容

ひかわ
出てきたエラーメッセージはこんな感じです。

 

SessionNotCreatedException: Message: session not created:
This version of ChromeDriver only supports Chrome version 145
Current browser version is 144.0.7559.97

「ChromeDriverはバージョン145用だけど、お前のPCのChromeは144だぞ」 と言われています。

 

原因:リリースのタイムラグ

ひかわ
調べてみると、ちょうど今日、Google Chromeの最新安定版(Stable)として「バージョン145」がリリースされたばかりでした。

 

私が使っているライブラリ undetected_chromedriver は、起動時に「ネット上の最新のドライバー(145)」を自動でダウンロードしてきます。しかし、私のPCのChromeブラウザにはまだアップデートが配信されておらず、「144」のままでした。

※最新バージョンチェック(https://googlechromelabs.github.io/chrome-for-testing/#stable

  • ツール: 最新の145を使おうとする(仕事が早い)
  • PC本体: まだ144のまま(更新が追いついてない)

この「バージョンの食い違い」が原因でした。

 

ハマったポイント

ひかわ
最初は「手動で古いドライバー(144)をフォルダに入れればいいじゃん」と思って入れ替えたのですが、ツールを再起動するとまたエラーに。

 

実は undetected_chromedriver は、起動するたびに「あ、古いドライバー使ってるね? 最新版(145)に書き換えてあげるよ!」というお節介機能が働くため、手動でファイルを戻しても無駄だったのです。

 

解決策:コード側でバージョンを指定する

ライブラリの自動更新を一時的に無視して、「強制的にバージョン144を使え」と命令する必要がありました。

uc.Chrome() のオプションに version_main を追加すれば解決します。

# 修正前
driver = uc.Chrome(options=opt)

# 修正後(144を強制指定)
driver = uc.Chrome(options=opt, version_main=144)

これで、勝手に145に更新されることなく、無事に起動するようになりました。

 

将来のための「スイッチ式」コード

ただし、ずっと「144固定」にしておくと、将来自分のPCのChromeが「145」や「146」に上がった時に、今度は逆に「古すぎるぞ」と怒られてしまいます。

そこで、「通常モード(自動)」と「緊急モード(固定)」を簡単に切り替えられるように、コードを以下のように書き換えました。

 

# =================================================================
# ★Chromeドライバーのバージョン設定 (トラブル対策用スイッチ)
# =================================================================
# PCのChromeとドライバーのバージョンが合わずエラーになる時は、
# 下の【B】を有効にしてください。普段は【A】を使います。

# 【A】通常モード (自動取得)
# ※Chromeが正常に更新されているならこちらを使う(将来はこちらに戻す)
# d = uc.Chrome(options=opt)

# 【B】固定モード (バージョン指定)
# ※「Driverだけ先行して、本体が古い」という食い違いエラーが出た時の緊急用
d = uc.Chrome(options=opt, version_main=144)
# =================================================================

これで、PCのChromeがアップデートされたら # を付け替えて【A】に戻すだけで済みます。

 

まとめ

  • undetected_chromedriver は最新版を勝手に拾ってくる。
  • Chromeのメジャーアップデート直後は、PCの更新が追いつかずエラーになりやすい。
  • version_main 引数を使えば、一時的にバージョンを固定できる。

同じエラーで困っている方の参考になれば幸いです。