今回からは数回にわたり、PowerShellからMicrosoft Edgeを操作する方法を取り上げていく。作業効率を劇的に引き上げてくれる可能性の高い機能なので、じっくり取り組んで使い方をマスターしてしまおう。
→連載「PowerShell Core入門 - 基本コマンドの使い方」の過去回はこちらを参照。
Microsoftプロダクトを操作するPowerShell
Microsoftは、PowerShellをWindowsやMicrosoftプロダクト/サービスを連携させたり、操作・管理したりするためのシェルに位置付けている。こうしたケースでPowerShellを使わない場合、ユーザーは多くの作業をGUI経由で行うことになる。これは手間もかかるし、ヒューマンエラーも発生しやすい。したがって、PowerShellで業務をシンプルにしていくことが、業務の効率化につながるというわけだ。
Webブラウザで仕事ができるようになっている
最近は多くの作業がWebインタフェースに統合される動きを見せている。もちろんその進度は、業務や業界によって大きな開きがある。すでにほとんどの作業がWebインタフェースで行われている企業もあれば、全くそうでない企業もあるだろう。
とは言え、今後、産業界全体としてWeb技術の活用は広まっていくと考えられる。
そうなると問題なのは、PowerShellはWebブラウザを制御することができないという点だ。PowerShellはMicrosoft独自の技術である。現在、そのコア実装はオープンソースソフトウエアとして公開されているものの、主要なWebブラウザはPowerShellをサポートしていない。要するに、PowerShellからはWebブラウザの制御を行うことができない。
Windowsでサービスの統合に使えるシェルはPowerShellなので、できればPowerShellからWebブラウザの操作をしたい。せめてMicrosoft Edgeだけでも操作できれば、PowerShellを中心として多くの作業の自動化が可能となる。何とかして、これを実現したい。
WebアプリやWebサイト開発業界を見る
さて、ビジネスパーソンはますますインターネットに依存するようになっている。Webサイトはもちろん、インターネットを利用するようなアプリケーションも何かしら使っているだろう。そしてユーザーのニーズに応えるため、開発者は短期間でさまざまなWebアプリケーションやWebサイトを開発する必要性に迫られている。
現在では主要Webブラウザ間で高い互換性が実現しているとはいえ、それでも主要なWebブラウザ実装系はいくつもあり、利用する主なディスプレイサイズも複数存在している。WebアプリケーションやWebサイトを作成する際にはこれらの条件を組み合わせて試験を行わなければならない。だが、全てを手動で行うのはとても大変だ。
Webブラウザに対する操作を自動化し、試験を自動的に実行できるようにしたい。しかも、その試験は複数のWebブラウザに対して実行できるようになっていてほしい――そこで、WebアプリケーションやWebサイト/Webページの開発者に欠かすことができないのが「WebDriver」だ。
Webブラウザを操作する「WebDriver」
Webブラウザ以外のプロセスからのブラウザ操作を実現する、“要”となる規格が「WebDriver」だ。その情報は、執筆時点で次のワーキングドラフトにまとまっている。
WebDriverは、外部のプロセスからWebブラウザを操作するためのリモートインタフェースだ。OS、プログラミング言語、Webブラウザなどに依存しないニュートラルなプロトコルで、DOMを介した操作が可能になる。この機能を使うことで、比較的柔軟にWebブラウザに表示されているコンテンツを操作できる。
WebDriverはプロトコル
WebDriverへの対応は、Webブラウザ側が実現する必要がある。現在主要なWebブラウザは全てWebDriverに対応している。対応の程度に差はあるが、主要な機能はほぼどの環境でも使えると思っておいて間違いないだろう。
WebDriverを経由してWebブラウザを操作するには、WebDriverのプロトコルを使ってWebブラウザと“対話”を行う必要がある。通常、こうした操作を自前で実装することはない。面倒すぎるからだ。実際には、WebDriverを実装したライブラリやモジュールといったサードパーティ製のソフトウエアを利用することでWebDriverを経由したWebブラウザの操作を行う。
WebDriverを使うときは「Selenium」
WebDriverに対応した実装系はいくつか存在している。最も有名なのは「Selenium」ではないかと思う。WebアプリケーションやWebページを開発する際に多くの開発者が利用しているライブラリだ。
Seleniumはデフォルトで次のプログラミング言語に対応している。
- Java
- Python
- C#
- Ruby
- JavaScript
- Kotlin
PowerShellは、Seleniumの対応プログラミング言語には含まれていない。しかし、C#はサポートされている。PowerShellはシェルだが、技術的にはC#および.NETをバックグラウンドとして構築されている。そのため、C#の機能はそのままPowerShellから使用することができる。つまり、C#がサポートされているということは、PowerShellでも利用できるということを意味している。
PowerShellには「Selenium」モジュールがある
実は、PowerShellにはモジュールとして「Selenium」が存在している。Install-Moduleコマンドレットからインストールできるお手軽なモジュールであり、このモジュールを使うとC#の機能を呼び出すよりも簡単にWebDriverを使うことができる。
今のところPowerShellからWebDriverを使うには、このモジュールを使うのが最も簡単な方法ではないかと思う。
WebDriverを使ってMicrosoft Edgeを操作してみよう
それでは、PowerShellからWebDriverを使ってMicrosoft Edgeを操作してみよう。汎用的に利用できるようにするにはきちんと準備する必要があるが、今回はその部分は省略してとりあえず使ってみていただきたい。
まず、次のようにInstall-Moduleコマンドレットを実行してPowerShell向けのSeleniumモジュールをインストールする。
Install-Module -Name Selenium -AllowPrerelease -Force
これにより、PowerShell Selenium 4系モジュールがインストールされると、「~\Documents\powershell\Modules\Selenium\4.0.0\assemblies\」に次のような感じでWebDriver関連のドライババイナリやDLLが展開される。
PS C:\Users\daichi> dir .\Documents\powershell\Modules\Selenium\4.0.0\assemblies\
Directory: C:\Users\daichi\Documents\powershell\Modules\Selenium\4.0.0\assemblies
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2022/10/13 13:10 linux
d---- 2022/10/13 13:10 macos
-a--- 2021/03/07 14:57 10100224 chromedriver.exe
-a--- 2021/03/07 14:57 65 chromedriver.exe.sha256
-a--- 2021/03/07 14:57 3531472 geckodriver.exe
-a--- 2021/03/07 14:57 65 geckodriver.exe.sha256
-a--- 2021/03/07 14:57 3420672 IEDriverServer.exe
-a--- 2021/03/07 14:57 65 IEDriverServer.exe.sha256
-a--- 2022/10/10 6:48 15723472 msedgedriver.exe
-a--- 2021/03/07 14:57 65 msedgedriver.exe.sha256
-a--- 2021/03/07 14:57 1783808 WebDriver.dll
-a--- 2021/03/07 14:57 65 WebDriver.dll.sha256
-a--- 2021/03/07 14:57 52224 WebDriver.Support.dll
-a--- 2021/03/07 14:57 65 WebDriver.Support.dll.sha256
PS C:\Users\daichi>
このドライバはバージョンが古いので、利用するには最新バージョンにアップデートする必要がある。Microsoft EdgeのWebDriver実装は「Microsoft Edge WebDriver - Microsoft Edge Developer」からダウンロードできるので、使っているMicrosoft Edgeと同じバージョンのドライバをダウンロードし、先ほどのディレクトリの「msedgedriver.exe」を上書きする。この操作はMicrosoft Edgeのバージョンが変わるごとに必要になる点に注意が必要だ。
ここまで準備したらWebDriver経由でMicrosoft Edgeを操作できる。まず、次のようにStart-SeDriverコマンドレットを実行してMicrosoft Edgeを起動する。
Start-SeDriver -Browser Edge -Size '1200,800'
次にページを開く。Set-SeUrlコマンドレットでURLを指定することで、そのURLをMicrosoft Edgeで開くことができる。以下の指定では、TECH+のサイトを開いている。
Set-SeUrl -Url https://news.mynavi.jp/techplus/
今回はこのページの右上に用意されている検索フィールドで検索を行ってみる。次のように操作すると、検索フィールドに検索したい文字列を入力することができる。ここでは「Selenium」という文字列を入力している。
$Element = Get-SeElement -By Id -Value q
Invoke-SeKeys -Element $Element -Keys 'Selenium'
次は検索の実行だ。以下のようにコマンドレットを実行して検索ボタンを押す。
$Element = Get-SeElement -By XPath -Value '/html/body/header/div[1]/div/div[2]/form/div/input'
Invoke-SeClick -Element $Element -Action Click
-
検索結果が表示されているところ
こんな感じで、PowerShellからの操作に応じてMicrosoft Edgeの方で操作が行われている点に注目してほしい。通常はユーザーがMicrosoft Edgeに対してインタラクティブに行っている操作だが、それをPowerShellへの入力で行っている。ということは、これらの処理はPowerShellスクリプトに書いて自動化できるのである。
これは強力な機能なので、ぜひともPowerShellからいつでも使えるようにしておきたい。PowerShellユーザーにとって欠かすことのできない機能になるはずなので、次回からじっくり説明を行っていこうと思う。