無料のRPAツールであるAutoItを使ってChromeを操作する手順です。これまでUWSCを使っていたのですが作者が亡くなられたとの話もあり、改めてAutoItを使ってみました。
AutoItのインストール
以下のページからインストーラをダウンロードしインストールします。設定はデフォルトでいいと思います。
AutoIt Downloads - AutoIt (autoitscript.com)
WebDriverのダウンロード
以下のページから自分のChromeのバージョンに合わせてダウンロードし、どこか(どこでも良いです)に保管します。AutoItのスクリプト内でこのファイルへのパスを指定します。
https://sites.google.com/chromium.org/driver/
UDFのダウンロード
3つのUDF(User Defined Functions)をZipでダウンロードし解凍ます。それぞれの解凍したフォルダの中にある*.au3ファイルを全部、AutoItのインストールフォルダ内にあるIncludeフォルダにコピペしてください。
WebDriverライブラリ
https://github.com/Danp2/au3WebDriver
JSON UDF
https://www.autoitscript.com/forum/topic/148114-a-non-strict-json-udf-jsmn
WinHTTP UDF
https://github.com/dragana-r/autoit-winhttp/releases
サンプルコード
SciTE Script Editorを開き以下のサンプルコードを実行してみます。Googleを開きAutoItと検索してくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#include <wd_core.au3> #include <wd_capabilities.au3> #include <wd_helper.au3> ;ダウンロードしたWebDriverファイルのパス Const $CHROME_DRIVER = 'C:\Path-To-ChromeDrier\chromedriver.exe' Global $web_driver_pid Global $session Global $web_driver_pid = LaunchWebDriver() If $web_driver_pid = 0 Then MsgBox(4096, "ERROR", "起動失敗") Local $capabilities = SetupChrome(False) $session = _WD_CreateSession($capabilities) If @error Then MsgBox(4096, "ERROR", "起動失敗") ;Googleへ遷移 _WD_Navigate($session, "http://google.com") ;検索欄にAutoItと入力 SetElementValueByXPath("/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input", "AutoIt") Sleep(3000) ;Google検索をクリック ClickElementByXPath("/html/body/div[1]/div[3]/form/div[1]/div[1]/div[2]/div[2]/div[5]/center/input[1]") Sleep(3000) ;終了 If $session Then _WD_DeleteSession($session) If $web_driver_pid Then _WD_Shutdown() ; WebDriverの起動 Func LaunchWebDriver() _WD_Option('Driver', $CHROME_DRIVER) _WD_Option('Port', 9515) _WD_Option('DriverParams', '--verbose --log-path="' & @ScriptDir & '\chrome.log"') return _WD_Startup() EndFunc ; Chromeのセットアップ Func SetupChrome($bHeadless) _WD_CapabilitiesStartup() _WD_CapabilitiesAdd('alwaysMatch', 'chrome') _WD_CapabilitiesAdd('w3c', True) _WD_CapabilitiesAdd('excludeSwitches', 'enable-automation') If $bHeadless Then _WD_CapabilitiesAdd('args', '--headless') Local $sCapabilities = _WD_CapabilitiesGet() Return $sCapabilities EndFunc Func SetElementValueByXPath($xpath, $value) $el = _WD_WaitElement($session, $_WD_LOCATOR_ByXPath, $xpath) _WD_SetElementValue($session, $el, $value) EndFunc Func ClickElementByXPath($xpath) $el = _WD_WaitElement($session, $_WD_LOCATOR_ByXPath, $xpath) _WD_ElementAction($session, $el, 'click') EndFunc |
実行するとこんな感じになります。
最後に
サンプルコードを見れば大体何やってるか分かると思います。詳しくはAutoItのIncludeフォルダ内に保存した各UDFファイルの中身を見れば色々な関数が用意されていることが分かりますので見てみてください。試してはいませんがChromeのバージョンがアップデートされるとWebDriverのバージョンも上げないといけないのですが、そのあたりも自動化できそうな関数とか用意されていました。
また、Selenium Basicというのを使うともう少し簡単に書けるのですが、別途インストールが必要です。個人で使う分には大したことない問題ですが、EXE化して社内展開しようとすると面倒くさいので私はこちらの方法を好んでいます。