Batasan Blog

人類みな五十歩百歩

Sikulixのお勉強

 

dynabook N40にUbuntuを入れてRPAを題材にコーディングの勉強中です(笑)。sikulixの代表的な関数find()やwait()は画像がスクリーン上にあるかどうか判定してくれるのだが、少し慣れてくるとexceptなど使って高度な(笑)ことをやってみたくなる。

#
def log_print(m): # デバッグ上の表示を関数にしている
    print(m) # 画面にメッセージを出す
#
print(App.openLink("https://google.com")) # 標準ブラウザでgoogle.comを開く
try:
    wait("画像.png",15) # 画像.pngが見つかるまで最大15秒待つ
    log_print("Found.")
except: # 15秒みつからなかったらここへ飛んでくる
    log_print("Not found.")
#
click() # 引数なしだと最後にマッチした場所を左クリックする

find()やexists()だと実行時にスクリーン上に存在していないとダメだが、wait()は表示されるまで待ってくれて、表示されれば先へ進む。ちなみに上記コードをデバッグ(-v)オプション付きで実行してみると、

java -jar sikulixide-2.0.5.jar -r . -v
:
[debug] Region: wait: 画像.png appeared .......[8180 msec])
:

ブラウザの起動時間も併せて8秒くらい待っているのがわかる。最大待ち時間設定は長くてもよいが、想定外のことはよく起きる(笑)ので、あまり長すぎるとデバッグ時に待ちぼうけしてしまう(笑)。
こんな感じで、画像がマッチした時と、しなかった時に分けて処理を記述していけばよい。