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

Python

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

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

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

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

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

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

現象:エラー “only supports MSEdge version xx” が出る

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

エラー表示の例
Message: session not created: This version of MSEdgeDriver only supports MSEdge version 95
Current browser version is 100.X.XXXX.XX with binary path ….(★2)

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

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

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

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

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

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

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

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

④ ★1のパスで指定している msedgedriver.exe を、③でダウンロードしたもので差し替えます。

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

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

ダウンロードするドライバは、リリース番号の冒頭の数字(例: “100”)だけが一致していて、それ以降は最新となるものとします。
過去、バージョンが完全一致するドライバでは動きませんでしたが、新しくリリースされているほうのドライバを設定したところ、★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をコピーしました