前回の記事でWebDriverを使ってMicrosoft Edgeを操作するVBAマクロを紹介しましたが、効率は良くありません。
「Bringing automated testing to Microsoft Edge through WebDriver」でも書かれている通り、せっかくSeleniumがEdgeに対応しているのだから、こちらを使った方が良いに決まっています。
ただ、上記Microsoft Edge Dev Blogの記事に書かれているサンプルコードを見て思うのが、
“いちいち C# でコードを書いてビルドしないといけないのか?”
ということです。
Edgeに渡すパラメーターをちょこっと変えるだけなのに、コード直してビルドし直して…というのは私的にはあまり嬉しくありません。
(そもそもVisual Studio入っていない場合はどうするのか?csc.exeで毎度コンパイルせにゃならんのか!?と。)
個人的には、やはりVBScriptのようにメモ帳あたりでサクっとコードを書きつつEdgeの操作を自動化したいわけです。
何か良い方法は無いものか?
― もちろんあります。そう、PowerShellです。
・・・というわけで、今回はSeleniumを使ってMicrosoft Edgeを操作するPowerShellのコードを紹介します。
事前準備
- 「Download Microsoft WebDriver from Official Microsoft Download Center」からMicrosoftWebDriver.msiファイルをダウンロードし、Microsoft WebDriverをインストールします(詳細は前回の記事参照)。
- 「Selenium Client & WebDriver Language Bindings」からC#用のファイル(2015/8/10 時点では selenium-dotnet-2.47.0.zip ファイル)をダウンロードし、適当なフォルダに解凍します(今回は C:\System\selenium)。
Microsoft Edgeを操作するPowerShellコード
WebDriverとSeleniumの準備ができたらいよいよPowerShellの出番です。
Add-Type -Path "C:\System\selenium\net40\WebDriver.dll"; $driver = New-Object OpenQA.Selenium.Edge.EdgeDriver("C:\Program Files (x86)\Microsoft Web Driver"); $driver.Url = "http://www.yahoo.co.jp/"; $driver.ExecuteScript('document.getElementById("srchtxt").value="\"初心者備忘録\""'); $driver.FindElementsById("srchbtn").Click(); do { Start-Sleep -s 1 $title = $driver.Title; } until($title.Contains("初心者備忘録")) $ws = New-Object -ComObject WScript.Shell; $ws.Popup($title); $driver.Close(); $driver.Dispose();
Add-TypeでWebDriver.dllを読み込んで、OpenQA.Selenium.Edge.EdgeDriver コンストラクターで「MicrosoftWebDriver.exe」ファイルの場所を指定しています(付属リファレンスだと“EdgeDriver.exe”の場所を指定しろ、となっていますが、これは誤りですね)。
あとはページ移動したりボタンをクリックしたり、Edgeを操作していくわけですが、IWebElement.SendKeys メソッドだと日本語を送れなかったため、ExecuteScriptを使ってスクリプトでテキストを設定しています。
そして表示待ち処理。
本来はWebDriverWaitのUntilメソッドを使うべきだと思いますが、PowerShellからだと面倒くさそうだったので原始的な処理をすることにしました。
何はともあれ、上記コードを実行すると下図のように、Microsoft Edge起動 → Yahoo! JAPANにページ移動 → “初心者備忘録”をキーワードに検索 → 検索結果のタイトルをメッセージボックスで表示、という動作が自動的に行われます。
Edgeの操作の詳細に関しては、Selenium付属のリファレンス「WebDriver.chm」にいろいろ載っているので、そちらをご参照いただければと思います。
― 以上のように、非常に短く簡単なコードでEdgeの制御を行うことができました。
PowerShellであれば、OSに標準搭載されている上に手軽に書いて手軽に実行することができます。
Webシステムのテスト等、Edgeを外部から操作する必要がある場合には、 Selenium + WebDriver + PowerShell が個人的にはオススメです。
もちろん、WebDriver ServerにJSONを渡せば良いだけなので、言語に拘らず“Microsoft Edgeを操作するVBAマクロ”のようにいばらの道を歩いていくのもアリだと思いますが、やっぱり、楽できるところは楽をした方が良いですね。
関連記事
- Microsoft Edgeを操作するVBAマクロ(WebDriver編)
- //www.ka-net.org/blog/?p=6018
- PowerShellでMicrosoft Edgeを操作する
- //www.ka-net.org/blog/?p=6029
- Microsoft Edgeを操作するVBAマクロ(DOM編)
- //www.ka-net.org/blog/?p=6033
- 続・Microsoft Edgeを操作するVBAマクロ(DOM編)
- //www.ka-net.org/blog/?p=6068
- Microsoft Edgeを操作するVBScript
- //www.ka-net.org/blog/?p=6129
- 起動中のMicrosoft EdgeからタイトルとURLを取得するVBAマクロ(UI Automation編)
- //www.ka-net.org/blog/?p=6076
- 起動中のMicrosoft EdgeからタイトルとURLを取得するVBAマクロ(DOM編)
- //www.ka-net.org/blog/?p=6086
- Microsoft EdgeでWebページを開くインターネットショートカット
- //www.ka-net.org/blog/?p=6040
- Microsoft Edgeを起動するVBScript
- //www.ka-net.org/blog/?p=6048
- Microsoft Edgeでリンク先を開く
- //www.ka-net.org/blog/?p=6050
- 「ファイル名を指定して実行」からMicrosoft Edgeを起動する
- //www.ka-net.org/blog/?p=6098
この記事へのコメントはありません。