(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【SikuliX入門】Webブラウザ操作の自動化

スポンサーリンク

Sikulixとは?

Sikuli/Sikulixとは、画像処理ライブラリであるOpenCV*1を利用したRPAツールで実体はオープンソースのJavaプログラムです。

このツールはWindowsはもちろん、大手RPAツールと違ってMacやLinux上でも動作します。
上に挙げた通り、OpenCVというライブラリに依存したJavaプログラムであり、.NetFrameworkに依存していないからですね。

Sikulixの特徴は
自動操作するにあたってHTMLといった構造ではなく画像としてオブジェクトを認識する
点にあります。
よって、部品をスクリーンショットで取得しながらコーディングを進める形となるので初学者にもとっつきやすいと思います。
また、Jythonスクリプトも書けるのでPythonになれた方も使いやすいです。

本記事ではSikulixを用いて

  1. 任意のURLを開き
  2. キーボードの自動入力を行い
  3. ボタンをクリックし
  4. 結果画面のスクリーンショットを撮る

流れを解説します。

ちなみに今回はブラウザとしてGoogleChromeを利用しますが、ブラウザによる制約がないことも本ツールの魅力です。

Sikulixでブラウザ操作

1. Chromeで任意のURLを開く

アプリケーションはApp.open()で行います。
ただし、以下のようにGooglChromeを開こうとすると

App.open("chrome.exe")

以下のようなエラーがでる場合があります。

[error] App.open failed: chrome.exe not found

原因はパスが通っていないことにあります。

以下のようにフルパスを指定してあげれば

App.open("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe")

ブラウザが起動するので確認してください。環境によっては///としてください。

URLを指定する場合は、以下のようにパスの後ろに指定します。

App.open("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe https://tech-unlimited.com/ping.html")

今回は、疎通チェックツールのリンクとしました。

2. キーボードの入力を行う

キーボードの入力は

type("画像ファイルのパス", "入力したい文字列")

で行います。

画像ファイルのパスは自前で用意してもよいですし、
Sikulixの操作画面左側の関数名をクリックすれば
f:id:mtiit:20190309104042p:plain
自動的にスクリーンショット用の画面となります。
f:id:mtiit:20190309104225p:plain
ここでキーボード入力したい箇所をおさめます。あとは、文字列を入力します。
画面上は以下のようになります。
f:id:mtiit:20190309104548p:plain

実行してみると、ブラウザが開き指定した箇所に文字列が投入されます。

3. ボタンをクリック

ボタンのクリックもキーボードと同じ手順です。
使う関数はclick()でこちらも画面左側から指定すれば自動的にスクリーンショットに遷移します。

ちなみに、これらのスクリーンショットですが
実体は以下のようなテキスト形式です。

type("1552092890039.png", "www.mtioutput.com")

SikulixIDEの画面はhtml形式で分かりやすく表示されていますが、実体は.py形式*2保存されています
上で撮ったスクリーンショットは、ファイル保存場所と同じディレクトリに画像ファイルとして保持されているので確認してみてください。

4. 画面のスクリーンショットを撮る

最後にスクリーンショットを撮ります。
capture関数を用いますが、今回は簡単に画面全体を撮ることとします。

capture(0,0,Region(SCREEN.getBounds()).getW(),Region(SCREEN.getBounds()).getH())

上記でスクリーンショットが保存されます。

ただし、デフォルトだと一時的なフォルダに保存されます。

保存場所を確認したければ

tmppath = capture(0,0,Region(SCREEN.getBounds()).getW(),Region(SCREEN.getBounds()).getH())
print tmppath

として実行してみてください。画面下部のメッセージにパスが表示されます。

Windows10の環境では以下に出力されていました。

C:\Users\XXXX\AppData\Local\Temp\Sikulix_172067278\sikuliximage-1552096004273.png

スクリーンショットではなくOCR機能による文字列取得であれば以下を参考ください。

終わりに

簡単なWebブラウザ操作を行いましたが、インストールも無料で行えますし個人利用のRPAツールとしてはお勧めできます。
また、画像ベースなので独自アプリケーションなど内部構造にアクセスできない場合にも利用できるのもポイントです。

興味がある方は、ぜひインストールして遊んでみてください。

*1:OpenCV : Open Source Computer Vision Libraryの略で、コンピュータビジョン向けのライブラリ

*2:.pyをJythonで実行