今までWindowsでウェブ関連の自動化をしたいときの定番と言えばIE+VBS/VBAでIEオブジェクトを操作するって感じだったが、そろそろEdgeネイティブ対応のシステムが出てきたり、IE捨てろ圧が各所で高まってきてたりしており、場面によってはEdgeでの自動化が必要となる場面が出てきているように思う。
残念ながらメモ帳でVBSを頑張って記述するだけで一応自動化できたIEとは違い、 Webdriver という仕組みを使うのがEdgeの場合の自動化手段となっている様だ。
WebdriverというのはSeleniumという、もともとはWebアプリケーションのテスト自動化ツールからの流れで歴史のあるツールなのだが、細かく解説するとそれだけで一冊本が書けそうなレベルなので、ざっくり誤解込みで概要を説明すると次の通りだ。
もともとはテスト自動化界隈で使われていたブラウザの自動操作を行うためのSeleniumというツールがあり、そのSeleniumにも実はバージョンがあり、Selenium 2以降で採用されたのがWebdriverという仕組みだ。
基本的にWebdriverはブラウザ毎に用意され、Seleniumとしては基本的に共通のスクリプト=テストシナリオで、異なるブラウザを操作するための中間プログラムみたいなものである。
※余談だがAndroid用のWebdriverと組み合わせてAppiumという具合にいろんな分野のUIテスト自動化に、同様の枠組みが適用されている。
Seleniumには複雑な歴史がありとても正確にざっと解説する事は出来ないので興味のある方はちょっと古いがこの辺の記事を参照頂きたい。
何はともあれ、現在ではこのSelenium Webdriverのスタックは、ある意味GUIのテスト自動化の世界では標準的な位置づけになっており、それをChromium版のEdgeでも採用されたということになる。
でもって、これの枠組みを使ってEdgeの操作自動化をするしかなさそうなわけだが、ググってみるとSeleniumをインストールとかいろいろと(当然ながら)下準備が必要でなかなか従来の様にテキストエディタでVBSを頑張って作れば自動化できるとは簡単には行かない状況である。
これではソフトウェアインストール申請を通さないと手元の作業が自動化できないじゃないか。。。
と思ったらWebdriverの実行ファイルのダウンロードは必要だがぎりぎりインストーラの実行は無し(=Selenium Basicのインストール無し)で行ける方法が見つかった。
※フリーソフトのインストール申請がとてつもなく高いハードルな企業ではこれが実は最も重要な手元の作業自動化を実現するための要件だったりする。
端的に言うとWebdriverに直接Jsonでリクエストを投げる(Seleniumと組み合わせる場合はSeleniumが異なるデバイス/ブラウザ用のWebdriverに対してリクエストを投げるのを1ステップ端折るイメージ)という事になる。
VBSで実現しているやり方は次の参考URLで発見。
【参考URL】
https://www.ka-net.org/blog/?p=6129
※非常に、参考になるのだが、ちょっとだけ古く、 MicrosoftWebDriver.exe 時代の記事となっているため、2020/11/23現在そのまま使用不可。
↓のURLから自分の環境に対応するEdgeのドライバをダウンロードすると今は大抵「msedgedriver.exe」というファイルをダウンロードする事になる。
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads
とりあえず動かすだけであれば、上記参考URLのEdge Driverのパスを「msedgedriver.exe」に合わせて整合をとるだけで行けた。
変更部分だけ抜粋すると次のようなイメージ。
Private doc Private Const WebDriverFileName = "msedgedriver.exe" Private Const URI = "http://localhost:12345/" Private Const CSIDL_PROGRAM_FILESX86 = 42 Set http = CreateObject("MSXML2.XMLHTTP") Set doc = CreateObject("htmlfile") Call AutomateMicrosoftEdge Public Sub AutomateMicrosoftEdge() 'Microsoft Edge Automation using WebDriver Dim proc Dim sid, eid Dim b64 Dim WebDriverFilePath WebDriverFilePath = ".\" & WebDriverFileName CreateObject("WScript.Shell").exec(WebDriverFilePath & " --port=12345 --log-path=.\log.txt") sid = StartSession()
この路線でもがんばればなんとか動かせそうなのだが、せっかくなのでそのうちPowershellで実現してみるのに挑戦してみたい。
凡そステップは次の様に想定しているので、それぞれ調べながら進めていきたい。
① PowerShellでmsedgedriver.exeを起動する
② ①に投げるJsonのテキストを生成する
③ を①に投げる
0 件のコメント:
コメントを投稿