Webスクレイピングが動かなくなったとき 【Microsoft Edge & selenium】

Python

Python のウェブスクレイピングが動かなくなったときの確認手順、設定手順についてまとめておきます。

以下の環境で動作確認をしています。
環境: Windows 11, Microsoft Edge, Python 3.x, selenium

背景 ウェブドライバー webdriver で自動ウェブ操作!

日頃、Python で selenium を使って、ブラウザの操作を自動化しています。

具体的には、Microsoft Edge を自動操作するドライバーをダウンロードして、Python から webdriver を呼び出すとブラウザの操作を自動化できます。
多くの場合、webdriver はウェブサイトの自動テストなどに使われますが、日頃、いつも見るサイトの操作をスクリプト化してしまって、バッチファイルのダブルクリック程度で自動操作するととても便利です。(下記の関連リンクにいくつか事例を挙げておきます。)

ところが、いつもどおり、Microsoft Edge で Web スクレイピングをしようとしたところ、突然、動かなくなりました。ブラウザとドライバのバージョンを確認し、ドライバ側を更新したところ動くようになりました。
そこで、確認手順、設定手順をまとめ、公開しておきます。

現象:エラー “only supports Microsoft Edge version XXX” が出る

Python のプログラムで “driver = webdriver.Edge( path0 ) ” 等(★1)と記載して、コンソールから Microsoft Edge を動かそうとしたところ、以下のエラーが出ました。

エラー表示の例
Message: session not created: This version of Microsoft Edge WebDriver only supports Microsoft Edge version 117
Current browser version is 120.X.XXXX.XX with binary path C:\….(★2)

※ 「使っている Microsoft Edge WebDriver は Edge の version 117 しか対応していません。現在のブラウザのバージョンは 120.X.XXXX.XX になっています」といった表示になっています。そこで、以下の確認をします。

バージョンの確認とダウンロード

確認 Edge とドライバのバージョンを確認する

① Microsoft Edge ブラウザの URL の欄に以下を入力し、ブラウザのバージョンを確認します。
edge://settings/help

→ 例:バージョン 120.0.2210.91  ★3

② 確認のため、下記のリンク先を参照し、Microsoft Edge のリリースノートを参照します。
・ Microsoft Edge release notes for Stable Channel | Microsoft Docs
→ 例:Version 120.0.2210.91: December 21, 2023 ★4

※ ①と②を参照し、パソコンにインストールされている Micorosft Edge のバージョンと、Microsoft 側でリリースされている最新の Edge のバージョンを確認します。つまり、Windows の自動更新の機能でブラウザが最新版にバージョンアップされているかどうかを確認します。
もし、ブラウザが最新版に自動更新されていない場合、以下のドライバの更新が二度手間となる可能性があります。Microsoft Edge のバージョンアップを検討してみてください。多くの場合、Windows パソコンを再起動するか、または、Windows Update を実行することで、自動更新されると思います。
※ 経験的には、バージョンの冒頭の3桁の数値が一致していれば(バージョンの末尾の桁が多少違っていても)、問題なく動くと思います。

Microsoft Edge ドライバのダウンロード

③ つぎに、以下のサイトにアクセスし、上記の★3(または★4)に対応した、x64 の edgedriver_win64.zip をダウンロードし、解凍します。
・ https://developer.microsoft.com/ja-jp/microsoft-edge/tools/webdriver/
※ ダウンロードできる種類が複数ありますが、特に理由がなければ(業務などで使用するバージョンが指定されている、常に最新版に更新しておきたい、などの理由がなければ)、一番左の「安定したチャネル」の x64 をクリックしてダウンロードすれば、問題なく動くと思います(Windows の場合)。
※ また、ダウンロードするファイル(zipファイル)のバージョンは、上記の★3(または★4)と、冒頭3桁のリリース番号が同一であって、それ以降の番号が最大(最新)となるものを使います。
具体的には、zip のファイル名でドット “.” で区切られた4つの数字のうち、冒頭の1つめの数値(xx.yy.yy.yy の xx 部分の数値、例: “120” )が Edge のバージョンと一致し、それ以降の数値が最大(最新)となるファイルとします。バグの対応がされていると考えられるためです。

④ ★1のパスで指定しているドライバ(旧バージョン)を、③でダウンロードした msedgedriver.exe で差し替えます。

→ これで動作しました! (私の場合)

注意: 過去、ドライバ自身にバグがあった!

ダウンロードするドライバは、リリース番号の冒頭の数字(例: “120”)が一致していて、それ以降は最新となるものを使うようにします。
過去の私の事例では、バージョンが完全一致するドライバを使ったところ動かないことがありました。新しくリリースされているほうのドライバを設定したところ、★1の selenium が正常に動きました。

推測ですが、Microsoft Edge とドライバの最新版をいったん同時にリリースしたけれども、ドライバにバグがあったので、ドライバ(msedgedriver.exe)側だけアップデートした、といったことがあるようです。
これは、ホームページ上での Microsoft Edge のリリースの数とドライバ msedgedriver.exe のリリースの数とが一致していないことからも推測できます。
Edge のバージョンより新しい msedgedriver.exe がリリースされている場合は、最新バージョンのドライバを自分で探して使ってください、ということのようです。明記はされていません。バグなのであまり詳しくは書かないのか。。

まとめ

Webスクレイピングが突然動かなくなったときの対処方法をまとめました。

なお、私の環境の場合、過去、スクレイピングが動かなくなった原因は以下の2つとなっています。
① Microsoft Edge が自動更新されて、ドライバのバージョンと合わなくなった。
② Microsoft Edge とバージョンが完全に一致するドライバにはバグがあった。

英語サイトを含めてネット検索をしても、このような状況について明文で説明されたサイトが見つかりませんでした。そこで、生じた現象と把握している内容をまとめ、公開しておきます。
とはいえ、確認もないまま知らないうちに自動アップデートされて動かなくなってしまう仕様とは一体どんなものなのであろうか。。ブラウザのフォントなども突然更新されることがあるし、pyautogui も動かなくなるし。。医療機器や ATM などでもし、ネットワークのシステムに Windows を使っていると、問題が起こるような気もします。

関連リンク
・ Webスクレイピング時のパッケージの使い分け 【requests vs. selenium】
・ 指定した URL からリンクを抽出する 【Python】
・ 「このページに到達できません」と表示されたとき 【Windows10】
・ ウェブ検索と結果の取得を自動化する【Python & selenium】
・ Raspberry Pi でブラウザを自動操作してみる 【Python】
・ 検索方法のまとめ 【Google】

タイトルとURLをコピーしました