SikuliXは、グラフィカルユーザーインターフェイス(GUI)の自動化と操作を目的としたソフトウェアツールです。その特徴は「視覚ベースのスクリプティング」で、画面上の特定の画像(ボタン、アイコンなど)を検出し、それに対してマウスクリックやキーボード入力などのアクションを実行することができます。画像の検出は、事前にキャプチャしていた画像との比較により行いますが、「一致度」を指定することができるので、状況により微妙に異なる表示となりがちなゲームなどの自動操作もある程度は行うことができます。
このSikuliXとguiscrcpyを組み合わせ、PCに接続したAndroid端末を操作していた時、少し困ったのが通常のPCでは行わない、2本の指を使ったピンチイン・ピンチアウト(縮小・拡大)操作です。調べたところ、scrcpy・guiscrcpyでは、Ctrlキーを押しながらマウスの左ボタンを押すことで、ピンチイン・ピンチアウト操作が可能となっていました。この件については、以下の記事に書きました。
自作のスクリプト中でピンチイン操作を行いたかったので以下のような関数を書いたところ、うまく動作しています。
def pinch_in():
mouseMove(Location(38, 379))
Settings.MoveMouseDelay = 1
keyDown(Key.CTRL)
mouseDown(Button.LEFT)
mouseMove(Location(550, 379))
time.sleep(0.2)
mouseUp(Button.LEFT)
keyUp(Key.CTRL)
Settings.MoveMouseDelay = 0
mouseMoveする座標や、Settings.MoveMouseDelay、time.sleepに与える値は、PCおよびAndroid端末の解像度やアスペクト比、接続状況や操作したいアプリの反応速度などにより、調整する必要があると思われます。いろんな要素が複合的に作用するので、無理して汎用的に作ろうとするより、環境にあわせて書き換えたほうが効率的でしょう。ただ、この操作に限らず、SikuliXは画面表示を認識して操作を行うという特性上、どうしても操作に失敗ケースは出てきてしまうため、安定して動作させたいなら、適宜失敗を検出し、操作をやり直すといった処理は必要になります。
コメント