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 91
Current browser version is 93.XX with binary path ….(★2)

※ バージョンに問題があるといった表示になっています。そこで、以下の確認をします。

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

Edge とドライバのバージョンを調べる

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

② 下記のリンク先を参照し、Microsoft Edge のリリースノートを確認します。
・ Microsoft Edge release notes for Stable Channel | Microsoft Docs
→ 例:Version 87.0.664.41: November 19

※ ①と②から、Micorosft Edge のバージョンと、最新のリリースのバージョンがわかります。
加えて、Microsoft Edge が、②の最新版となっているかどうかから、自動更新でバージョンアップされているかどうかがわかります。
私のケースでは、何らの通知もなく、ブラウザが自動で更新されていました。

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

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

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

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

ポイント ~ オリジナルのドライバにバグが生じうる

ダウンロードするドライバは、リリース番号の冒頭の数字が Microsoft Edge と一致するバージョンの中で、最新となるものとします。

→ バージョンが完全一致するドライバでは動きませんでしたが、新しくリリースされているほうのドライバを設定したところ、★1の selenium が正常に動いた、ということが実際にありました。

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

まとめ

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

なお、私のケースの場合、動かなくなった原因は以下の2つでした。
① Microsoft Edge が知らないうちに自動更新された。
② Microsoft Edge とバージョンが完全に一致するドライバでは selenium が動かなかった。

英語サイト含め、ネット検索をしても、このような状況について説明されたサイトが見つかりませんでした。そこで、生じた現象と把握している内容をまとめ、公開しておきます。
とはいえ、確認もないまま知らないうちに自動アップデートされ動かなくなってしまう仕様とは一体どんなものなのであろうか。
医療機器や ATM などでもし、Windows を組み込んだネットワーク機器があった場合、問題が起こるような気もします。。

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

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