きっかけは些細なことだった。
でも、調べて試したら結構イイ感じのナレッジが吸収できたので記事にする。
1.きっかけ。
WinActorの『23_ブラウザ関連』で要素のダブルクリックがしたかったんだけど、、、無い!
無ければ作ればいいんだ!っていういつものノリで調査開始。
でも、IE以外のブラウザ制御よくわかんないから、WinActorのインストールフォルダ眺める。。。
それっぽいデータ発見。
ザックリ推察。
- WebDriverと総称される機能でブラウザの制御を実装しているのかな。
- chromedriver.exe ⇒ 十中八九Chromeブラウザ制御モジュールだろう。
- geckodriver.exe ⇒ 十中八九Firefoxブラウザ制御モジュールだろう。
- MicrosoftWebDriver.exe ⇒ 十中八九Edgeブラウザ制御モジュールだろう。
調査開始。。。
2.WebDriverは標準規格。
直感はビンゴだった。
IEの制御の場合は、スクリプトの中でこんな記述すればいきなり使えたよね。
Set objIE = CreateObject("InternetExplorer.Application")
これは、IEがWindowsOSの標準ブラウザで最初っからOSに組み込まれてるから特別な仕組みとか考えなくても直感的に呼びだせれるようになってたんだね。
でも、この仕組みずーっと昔からあって、起動中のブラウザの制御をいきなり横からぶんどったりできてしまうし、いろいろ問題あるから今後はWebDriver使う方式で標準化しようぜー!とかっていうのが時代の流れらしい。
ほんで、できれば統一のWebDriverでどうにかしていきたいよーって考えはあるけども、そこはインターネット大航海時代、それぞれのブラウザにもいろんな都合があって完全な統一化はまだ望めないから各ブラウザベンダー毎にWebDriverがリリースされているんだとか。
前置き長くなったけど、要するに。
対応ブラウザ毎にドライバ置いてあるけど、基本的な使い方はだいたい全部一緒!!ってこと。
なるほど、WinActorスクリプトのブラウザ関連ライブラリも基本的にはプルダウンで選んだブラウザで参照先のWebDriver振り分けてるだけで、他のパラメータは全部同じ項目使ってChrome・Edge・Firefoxの制御をやってらっしゃる。
して、これらは各ブラウザベンダが提供している物だからWinActorがなくてもWebDriverだけ個別にダウンロードしてくれば、この記事でやる検証はできちゃいます。
3.仕組みを理解する。
じゃーその新しいセーフティなブラウザ制御方法はどんななんだぃ?っつー話。
WebDriverを起動すると、特定のportがlistenになってlocalhost上のProxyみたいになってくれるんだって。
なんか横文字ばっかでルー語みたいになった・・・(;^ω^)
WebDriverのAPIの仕様はリンク先を参考に、今回はEdgeで検証してきます。。。
4.検証検証!!!
理解するには、動かすのが一番早いってね!
プロンプトからWebDriverを起動してみました。
- Listening on http://localhost:17556/
デフォルトでは、port 17556でListenになります。
(起動オプション --port:ポート番号で変更可能)
もひとつ、コマンドプロンプト立ち上げてリクエスト投げてみましょう!
curlコマンド使って、/sessionをリクエストしてみました。
curl -X POST -H "ContentType: application/json" -d "{\"desiredCapabilities\": {}, \"requiredCapabilities\": {}}" http://localhost:17556/session/
※ コマンドプロンプトなので、"ダブルクォート"の中に"ダブルクォート"を入れる場合、\でエスケープ処理してます。
おっと、about:blank状態のEdgeが起動しましたね。
新しいセッションIDが作成されます。
このケースでいうと、応答の一番最初の「"sessionId":"F2B9250B-CD3A-49B5-A5DF-4BD16FEFA441"」この部分ね。
ほんでは、生成されたセッションIDでページ遷移してみましょ。
curl -X POST -H "ContentType: application/json" -d "{\"url\": \"http://google.co.jp\"}" http://localhost:17556/session/F2B9250B-CD3A-49B5-A5DF-4BD16FEFA441/url
/session/[セッションID]/urlのURLにContentとしてurl="http://google.co.jp"を指定してます。
さっき起動してきたEdgeが、無事にGoogleページに遷移しました!
・・・で、WinActorのライブラリ処理を途中から自作Libで制御できないかといろいろ試してみましたが、WinActorライブラリでは都度ListenになるPortが変えられているっぽぃ&セッションIDが決して中抜きできないようにラップされてる状態だったので割り込みは難しそうでした。。。
やるじゃないかNTTAT様。
でも、これってさ、WebDriverさえ起動してればaxios.jsのajaxとかでlocalhostにpostして他ブラウザ駆動できるってことなのかな???
面白そうだから、次回はその辺の検証してみようと思います。