はじめに
RPA(Robotic Process Automation)のクラス1というのは、単純・定型作業の自動化です。
今回使用する、AutoITは海外ではかなり有名な自動化ツールで、オライリーから書籍が出ていたりします。
ちなみに、難易度的には、SIer向け、覚えることが結構あるのが難点です。
インストール
AutoIt オフィシャルサイト のダウンロードから以下の3つを取得します
-
本体
AutoIt Full Installation autoit-v3-setup.exe
これがないと始まらない、32bit版/64bit版があるけど、インストーラは共通 -
エディタ
AutoIt Script Editor SciTE4AutoIt3.exe
AutoIT用のエディタ、別にAtomとか好きなものを使っても構わない。 -
レコーダ
AutoIT-Self Installer with ScriptWriter(AU3record) autoit-v3.3.14.0.zip
※なぜか最新パッケージに含まれなくなってしまった、マクロ記録ツール、ユーザの操作を記録してマクロにしてくれます。コントロールIDなどがわかりにくいときに非常に便利。
本体とエディタはインストーラを動かせば、問題なく導入できるはず。
レコーダだけは、圧縮ファイルを展開し、内部のinstall\Extras\Au3Recordにある
ASWhook.dll
Au3Record.exe
の2つのファイルをSciTEのインストール先にコピーしておく。
操作をより広い範囲で使えるようにする、周辺ツール
基本的に、OSが操作できる部分までしか、コントロールできないので、WEBに対して操作を行うような場合は、以下のようなブラウザに制御を渡すようなツールが必要になる
- ImageSearch GitHub
画像認識をするためのAutoITの拡張ライブラリ、32bit/64bitで多少挙動が変わる、画像判定をする場合必需品
- tesseract-ocr GitHub
OSSのOCRツール、ライブラリを用意すれば日本語も行ける。
- AutoIT for Google Chrome Chrome extension
AutoITの命令をChromeに渡すChrome拡張
- AutoIT Chrome Native Messaging Host Native Apps
Chrome Messageing APIを利用したコマンド受信ホスト
- iMacros Google Chrome Chrome extension
かなり有名な独自マクロ、JSベースのプラウザテストツール
- TagUI オフィシャル
単体でも動作する、CUIなRPAの一種、ブラウザの制御ができる
- SeleniumBasic Github
VBAからSeleniumを使うためのラッパーだが、汎用ライブラリとして使えるため、AutoITからも呼べるし、AutoIT用のサンプルも用意されている
with SeleniumDriverこちら
Seleniumからブラウザを操作する際に必要になる、ドライバ、上記のものに含まれているものだと最新ブラウザに対応していないので、差し替える必要がある
AutoITのこれだけは覚えておくといいことと、構文集
- 覚えておくと、楽にスクリプトが作れること
詳しいことは、有志が作っている日本語訳 本体 / UDF / X を一読するのをお勧めする。
特に、本体の翻訳はハンドブックの代わりに使えるので、ローカルにクローンしておくのがおすすめ。
まず、汎用スクリプトを作るうえで、アプリケーションの実行ファイルやControl ID、クラス名が必要になることがあるので、これは、AutoIT本体に含まれている、AutoIT Window Infoというツールで調べることができる。
をマウスで、調べたいウインドウのボタンや入力窓にD&Dするとクラス名やControlIDが表示される。
また、アプリケーションのメニューなど、プルダウンしてサブメニューを開くようなものの場合、FinderToolが使えないことがあるので、その場合は、Au3Record.exeを使うとよい。
こちらは、 ボタンを押してから、アプリの操作をすると、操作からAU3スクリプトを生成してくれる。
これは、タスクバーに常駐しているSakuraEditorをクリックして、新規テキストを作り、お決まりの「Hello World !!」と入力した作業を記録させたもの。[Save As]で保存して、[AutoIT]から[Run Script]すると記録した動作を再現してくれる。AutoIT Window Infoに頼れない場合はこちらがいいと思う。
- 次に覚えておけば、繰り返しで何とか簡単な自動化ができる・・・と思う構文一覧。
特殊制御文字
'!' = ALTキー : ALT+A なら !a と書ける
'+' = SHIFTキー : SHIFT+a なら +a と書ける
'^' = CTRLキー : CTRL+C なら ^c と書ける
'#' = Winキー : Windows + Dなら #d と書ける
仮想キー
Rawモードで送信したとき | 送信される文字 |
---|---|
{!} | ! |
{#} | # |
{+} | + |
{^} | ^ |
{{} | { |
{}} | } |
{SPACE} | SPACE |
{ENTER} | メインキーボードのENTER キー |
{ALT} | ALT |
{BACKSPACE} or {BS} | BACKSPACE |
{DELETE} or {DEL} | DELETE |
{UP} | ↑ |
{DOWN} | ↓ |
{LEFT} | ← |
{RIGHT} | → |
{HOME} | HOME |
{END} | END |
{ESCAPE} or {ESC} | ESCAPE |
{INSERT} or {INS} | INS |
{PGUP} | PageUp |
{PGDN} | PageDown |
{F1} - {F12} | Function キー |
{TAB} | TAB |
{PRINTSCREEN} | Print Screen キー |
{LWIN} | Left Windows キー |
{RWIN} | Right Windows キー |
{NUMLOCK on} | NUMLOCK (オン/オフ/切り替え) |
{CAPSLOCK off} | CAPSLOCK (オン/オフ/切り替え) |
{SCROLLLOCK toggle} | SCROLLLOCK (オン/オフ/切り替え) |
{BREAK} | Ctrl+Break処理 |
{PAUSE} | PAUSE |
{NUMPAD0} - {NUMPAD9} | テンキー 数字 |
{NUMPADMULT} | テンキー * |
{NUMPADADD} | テンキー + |
{NUMPADSUB} | テンキー - |
{NUMPADDIV} | テンキー / |
{NUMPADDOT} | テンキー ピリオド |
{NUMPADENTER} | テンキーのEnter キー |
{APPSKEY} | Windows App キー |
{LALT} | 左 ALT キー |
{RALT} | 右 ALT キー |
{LCTRL} | 左 CTRL キー |
{RCTRL} | 右 CTRL キー |
{LSHIFT} | 左 Shift キー |
{RSHIFT} | 右 Shift キー |
次のようにして同じキーを繰り返し送信することができます。
Send("{DEL 4}") ;DELキーを4回押す
Send("{S 30}") ;30個の文字'S'を送信する
Send("+{TAB 4}") ;SHIFT+TABを4回押す
送信回数に0を指定してもキーは必ず1回は送信されます。
キーを押し続ける場合(一般にはゲームでしか利用されません)
Send("{a down}") ;A キーを押し続けます
Send("{a up}") ;A キーを離します
capslock、numlock、scrolllockキーの状態を設定します。
Send("{NumLock on}") ;NumLockキーをオンにします。
Send("{CapsLock off}") ;CapsLockキーをオフにします。
Send("{ScrollLock toggle}") ;ScrollLockの状態を切り替えます。
関数ブロックの最初と最後を明記する。なお、エディタで可視性をよくするために使う感じなので書かなくてもいい
書いておくとエディタでたたむことができるようになる
#region --コメント--
#endregion
プログラムを実行する、返り値はTrue:成功/False:失敗
Run ( "program" [, "workingdir" [, show_flag [, opt_flag]]] )
;例
Run ("EXCEL.EXE","%ProgramFiles%\Microsoft Office\")
アプリ名のついたウインドウが出るまで、待つ。RunWaitより可視性がよい
WinWait("アプリ名")
Forで繰り返し処理
For <variable> = <start> To <stop> [Step <stepval>]
statements
Next
;例
For i = 1 To 10 Step 1
ControlSend ( "無題 - メモ帳", "", "" , "^v" , 0 )
Next
Whileで繰り返し
例は
条件が成立している間ループ($iが10以下の間)してコンソールに出力
よくある条件としては、特定のキーが押されるまでループするとかがありますね
While <expression>
statements
WEnd
;例
Local $i = 0
While $i <= 10
ConsoleWrite ( $i )
$i = $i + 1
WEnd
もし、条件 であれば、処理を実行。
If 条件 Then 処理
;例
If WinActive("アプリ名","") Then WinClose("アプリ名","")
もし、条件 でなければ、処理を実行。
If Not 条件 Then 処理
;例
If Not WinActive("アプリ名","") Then WinActivate("アプリ名","")
選択したアプリのボタンなどのコントロールにIDを直接指定してクリックを送信
単純に座標を指定してクリックする場合はMouseClick、移動はMouseMove、がある
ControlClick ( "title", "text", controlID , "buttonname" , "clicks" , x , y )
;例
ControlClick ( "電卓", "", 131 , "left" , 1 ) ; 電卓 の Control ID 131 [1]のボタンを1回押す
選択したアプリのボタンなどのコントロールにIDを直接指定して文字列やキーを送信する
単純に現在アクティブになっているウインドウに文字列やキーを送信する場合はSendを使う
ControlSend ( "title", "text", controlID, "string" , flag )
;例
ControlSend ( "無題 - メモ帳", "", "" , "^v" , 0 ) ; CTRL + V を送信する
これだけ覚えておけば、最低限のコピペ自動化作業とか単純作業くらいはできる…はず!!