WinActorの構造を理解しようとしてからの、WebDriver学習の続きです。
で、思い付きでブラウザ to ブラウザ操作できるんじゃね???
って思いついて実装してみた第1弾!
とりあえず、資材作ってパッキングしました。
ChromeのWebDriverと、ドライバ制御用のスクリプトだけ入ってまーす。
今回はChromeをターゲットにして練習していきます。
1.そのままのChromeだとlocalhostにajaxできない!
クロスドメイン制約ってのがあって、そのままChromeからはlocalhostにpostが送れないことが分かった。
普通にググったら解消方法はいろいろでてきたので、今回はこちらを参考に回避することにしました。
クロスドメイン制約を回避するChromeショートカットを作る
ドライバ起動のついでに、このオプション付けて操作用のページに誘導することにしました!
2.WebDriverを制御するスクリプトを用意する。
前回の検証で、ドライバ起動しとけばlocalhostにhttpリクエストで制御できることがわかった。
ただ、プロセスが競合すると制御できないみたいなので一旦プロセスkill入れて、こんな感じ!
Set objFS = CreateObject("Scripting.FileSystemObject") Set objWS = CreateObject("WScript.Shell") ' Chromeのインストールパス取得 ChromePath = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" If Not objFS.FileExists(ChromePath) Then ChromePath = "C:\Program Files\Google\Chrome\Application\chrome.exe" If Not objFS.FileExists(ChromePath) Then strKey = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome" strTarget = objWS.RegRead(strKey & "\DisplayIcon") ChromePath = Mid(strTarget, 1, InStr(strTarget, "chrome.exe") + 9) End If End If ' 同梱してるドライバのパス取得 CurrentFldr = objFS.GetFile(WScript.ScriptFullName).ParentFolder WebDriverFileName = "chromedriver.exe" WebDriverFilePath = CurrentFldr & "\" & WebDriverFileName ' すでに起動している場合は停止 Set oClassSet = CreateObject("WbemScripting.SWbemLocator").ConnectServer.ExecQuery("Select * From Win32_Process Where Name = '" & WebDriverFileName & "'") For Each oClass In oClassSet oClass.Terminate Next ' WebDriver & ブラウザ起動 Set proc = objWS.Exec(WebDriverFilePath & " --port=9515") objWS.Run """" & ChromePath & """ --disable-web-security --user-data-dir=""C://Chrome dev session"" https://yizm.work/webdriver/", 0, True If Not proc Is Nothing Then proc.Terminate
環境の影響受けない様にレジストリからChromeのインストールパスを取得してます。
(インストールパスが使うインストーラによって異なるようだったので微修正)
スクリプト実行すると、クロスドメイン制約を回避する為にセキュリティオフ状態でChromeが起動して、ブラウザ制御用のページに飛びます。
WebDriverは、スクリプトで起動したChromeの終了を待ってからTerminateする様にしてます。
スクリプトを起動するとプロンプトとChromeが起動するイメージですね。
こんなセキュリティ警告でるのは、そのせいです。
今んとこ、誘導された先のページにはセッション生成とページ表示しかないです。
3.スクリプト起動したChromeからセッション生成
この状態ならlocalhostにajaxできるから、/sessionコマンド使って自動操作用のChromeをいじっていけるって訳ですね。
試しにボタン押すと、空のChromeが起動して、ボタンの下の「セッション」に起動したブラウザのセッションが取得されます。
4.セッションが取得できたらページ遷移
セッション生成した後で、ページ表示ってボタン押すとテキストボックスに入力されているURLにページが遷移することが確認できます。
ブラウザを×閉じすると、プロンプトも自動操作されてたブラウザも勝手に落ちます。
これに、いろいろ機能追加して自動操作できる内容を保存とかできるようにしたら、結構すごいことになるんじゃね???
もちょっと育ててみまーす。