PowerShellからWebブラウザを操作しようとした場合、操作するWebブラウザを選ぶ必要がある。選択肢はいくつかあり、本連載ではMicrosoft Edgeを使うことにしたのだが、それにはいくつか理由がある。今回はこれについて取り上げる。

→連載「PowerShell Core入門 - 基本コマンドの使い方」の過去回はこちらを参照。

WebDriverを使ってWebブラウザを操作する

Webブラウザを外部のプログラムから自由気ままに操作できてしまうと、それはセキュリティ的に好ましい状態ではない。そのため、デフォルトでは外部からWebブラウザを操作することはできないようになっている。

しかし、WebアプリケーションやWebページ開発などで、繰り返し特定の操作をして動作確認を行う必要があるような開発では、デバッグの段階で何度も何度もWebブラウザを操作しなければいけないことがある。これを手動で行うのは現実的ではない。デバッグや互換性確保のために行う操作を自動化できるかどうかは、開発者にとって死活問題だ。

前回、こうした目的のために「WebDriver」というプロトコル(インタフェース)が用意されていることを説明した。操作したい内容をプログラムで組み、WebDriverを経由してWebブラウザに伝えると、Webブラウザはプログラムに従って、まるでユーザーが直接操作しているかのように動作してくれる。

ということは、WebDriverに対応していれば、どのWebブラウザを使っても良さそうな気がする。しかし、そうではないのが現実だ。

WebDriverの対応はまちまち。そしてこれからも変わりそう

StatCounterの調査(2022年10月)によれば、Windowsで利用される主要なWebブラウザは、対象を日本に絞った場合、シェアの多い順から次のようになっている。

  1. Google Chrome
  2. Microsoft Edge
  3. Mozilla Firefox

MacではSafariの使用が多いので、WindowsとMacの両方で考えるなら上記の4番目にSafariが加わることになる。

  1. Google Chrome
  2. Microsoft Edge
  3. Mozilla Firefox
  4. Apple Safari

シェアで考えればGoogle Chromeを、Windowsにデフォルトで入っているのでどこでも確実に使えそうだという点ならMicrosoft Edgeを、Chrome系の実装以外を使うならFirefoxを、MacならSafariを……といった感じで漠然と選択肢は見えてくる。しかし、使い物になるかどうかは実際に使ってみないとわからないのが現状だ。

WebDrvierは現在でも策定段階にあり、プロトコルや挙動が固まっておらず、WebブラウザごとのWebDriver対応も完璧ではない。実際問題として、この機能はEdgeでは動くけどChromeだと動かない、Chromeだと動くけどFirefxoだと動かない、といったようなケースが存在する。さらに、同じWebブラウザでも、Windowsだと動かないけどMacだと動く、といったこともある。この辺りはOSの動作ポリシーなども関わってくるため、完全に同じにはならない。

こうしたことから、少なくとも現状では、実際に使ってみないと目的とする動作を自動化できるかどうかはわからないのだ。

WebDriver対応の調査結果サンプル

筆者が上記4つのWebブラウザで動作確認を行い、最終的に連載で使いたい機能が全て動くのがMicrosoft Edgeだった。Windows標準のWebブラウザであり、結果としては都合がよかったとも言える。

理想的には十分な時間をかけて全てのWebブラウザとWebDriverについて調査を行いたいところだが、実際の開発においても調査にかけられる時間は常に限定的だろう。限られた時間の中で調査を行い、候補を絞っていかなければならない。そういった中途半端な状態の連続、というのがリアルな開発の現場だったりする。

ここで、それぞれのWebブラウザについて調べた結果を簡単にまとめておく。

  • Google Chrome - 概ね機能する。ただし、ダイアログの起動においてウインドウサイズが意図せぬもので動作することがあり、その点が使いにくかった
  • Microsoft Edge - 挙動がGoogle Chromeとよく似ている。概ね機能し、特に不自由がなかった(ただし、動かない機能があることも確認している)
  • Mozilla Firefox - WebDriverバイナリの適用範囲が広く利用が簡単。ただし、結構動かないケースがあり、開発に使うには難しかった
  • Safari - (Macでのみ確認)。WebDriver機能が最初から統合されておりバイナリを別途インストールする必要すらなく、準備は最も簡単。ただし、上記3つのWebブラウザでは機能したベーシック認証の入力を自動化する方法が機能しなかった。ベーシック認証に自動入力が機能しないと自動化ツールとしては使いにくい

ざっと調査した結果、Google ChromeかMicrosoft Edgeを使うのが良いと判断した。Microsoft Edgeを選択したのは、このWebブラウザが最初からWindowsにインストールされているからだ。

ただし、この結果は執筆時点での話、という点に注意してほしい。WebDriver周りは今後変わることも考えられるので、動いていた機能が動かなくなったり、逆に動かなかった機能が動くようになったりすることは十分あり得る。WebDriver経由でWebブラウザ操作の自動化に取り組む場合、その時点で自分で調査を行い、そのとき自分にとって都合の良いWebブラウザを選択してもらえばと思う。

WebDriver経由で使うには

WebDriver経由でWebブラウザを方法はWebブラウザごとに異なっている。先ほどの4つのWebブラウザに関してまとめると次のようになる。

  • Google Chrome - Webブラウザのバージョンに合わせたWebDriverバイナリが必要(chromedriver.exe)
  • Microsoft Edge - Webブラウザのバージョンに合わせたWebDriverバイナリが必要(msedgedriver.exe)
  • Mozilla Firefox - ある程度Webブラウザのバージョンに合わせたWebDriverバイナリが必要(geckodriver.exe)
  • Apple Safari - Safariの開発者機能でリモートオートメーションを許可する

Safari (Mac)にはWebDriverを使う機能が同梱されているので、メニューから機能を有効化するだけでよい。問題は、それ以外のWebブラウザを使う場合だ。

WebDriverを経由してWebブラウザを操作する場合、基本的に使っているWebブラウザに対応したバージョンのドライバを使う必要がある。ドライバはそれぞれのベンダーが提供している。

  • Microsoft EdgeのWebDriver

    Microsoft EdgeのWebDriver

  • Google ChromeのWebDriver

    Google ChromeのWebDriver

ご存知の通り、現在Webブラウザは2週間くらいのペースでバージョンアップが行われている。つまり、WebDriverのバイナリも2週間ごとにアップデートする必要があるということだ。これは手動で行うにはあまりにも面倒くさい。

ということで、WebDriverを使って作業の自動化を進めるには、WebDriverのアップデートも自動化するところから始める必要がある。最初にこの部分を実装してしまってからWebDriverの利用へ進もうと思う。面倒となる部分は、最初に潰しておくのも大切だ。

永続的とは言えないものの、その効果は抜群

WebDriverを使ってWebブラウザの操作を自動化する方法は、準備が面倒だし、動く状態をキープするのも面倒で、しかもWebブラウザやSeleniumのバージョンアップに伴って書き換えないと動かなくなる可能性がある。とてもではないが、開発者向けではない操作方法であるのは間違いない。

しかし、その効果は絶大だ。Webブラウザで特定の操作を毎日のようにしているのなら、それが目の前で自動的にパッパと進んでいく様を見たら、もう手放せない。これを実現するためだけにSeleinumを学んだり、Seleniumを利用するためにPoweShellやPythonを学ぶというのも動機としては十分すぎるほど効果が得られる。

Windowsを使っているならPowerShellからMicrosoft Edgeの操作を自動化するというのは自然な流れだ。ぜひ連載を通じてそのスキルを習得していただきたい。

参考資料