SiluliXをコマンドで実行する

???.jarファイルをダブルクリックすると起動できる。さて、コマンドでは。

コマンドプロンプトで実行できるとバッチBATファイルで実行できるのでタスクマネージャーで管理ができる。これをしたかった。

さて、

コマンドはこんな感じ。

java -jar sikulix.jarの置き場所のjarファイル -r スクリプトフォルダ(フォルダ名.sikuli)

コマンドなので半角スペース文字が入ってます。ご注意。

最後の-rのスクリプトフォルダですが、フォルダ名には.sikuliとドットsikuliが拡張子のように付く。フォルダの中のプログラムファイルは「フォルダ名.py」となっているので.pyファイルを指定する必要は無い。フォルダまででいい。

java -jar  c:\sikuli\sikulix-2.0.3.jar -r C:\Users\take\Documents\sikulix\on.sikuli

私の例だとsikulixのjarファイルは「c:\sikuli\sikulix-2.0.3.jar」で、ファイルを指定する。実行するプログラムは「C:\Users\take\Documents\sikulix\on.sikuli」フォルダにある。でフォルダを指定する。

コマンドプロンプトでは誰が実行するのかというとWindowsというOS。java.exeが実行可能なコマンド(ファイル)です。

javaの右の引数というかコマンドオプションを実行するのはjava.exeです。javaはjavaが実行可能なファイルを指定します(Windowsが実行かのうとかでは無い)。でもjarを実行するには-jarを付けます。そして、さらに-rでjarファイルが呼び込むプログラムファイルを指定するという感じでしょう?

SikuliXのプログラム

バッファローのブロードバンドルータの設定を例にします。

Yamahaのルータはコマンドが使えるけど、安いルータはブラウザで設定するしかない。もしかして、安いルータもLinuxなので裏技ありますかね?

ブラウザの操作を自動化したくて、SikuliXを使った。

キーボード操作は、typeを使う。

  • ファイル名を指定して実行は、Windowsキー+rはtype(“”,Key.WIN)
  • 貼り付けは、paste(“chrome”)。結果的にchromeを入力と同等。
  • 改行は、改行コードを入れる。type(“\n”)
  • Chromeのアドレスバーは、type(“l”,Key.CTRL)。ここを参照。
  • passという文字列を入力、type(“pass”)

ある画像があるかどうか待つ、exists(画像,待つ秒数)

ある画像をクリックする、click(画像)

秒数待つ、wait(秒数)

if 条件文:
TAB文字 コマンド
else:
TAB文字 コマンド
空白文字が左に無いとIf文を抜けることになる。

Regionはある範囲の変数として登録できる。ここではr1変数

withを使って範囲内の処理にする

with 範囲変数:
TABキー コマンド

か以下のように使う。

もし、riのレンジ(範囲)にぺけ✕マークが無かったらエラーになる。その場合は、

if ri.exists(✕画像)を使う。画像があるかないかで実行を分岐します。これ便利。エラー防止できるね。待ち時間を追加もできる。ri.exists(画像,秒数)。当然、ディスクトップ全体exists(画像,秒数)も使えます。

コピペすると画像部分はファイル名になります。

type("r", Key.WIN)
paste("chrome")
type("\n")
wait(1)
type("l",Key.CTRL)
paste("192.168.11.1")
type("\n")

exists("1588775045755.png",8)
click("1588775045755.png")
type("pass")
type("\n")
exists("1588776243359.png",15)
click("1588776243359.png")
wait(8)
exists("1588776486229.png",3)
click("1588776486229.png")
exists("1588776523376.png",2)
click("1588776523376.png")
wait(2)
if exists("1588776582583.png",2):
    click("1588776582583.png")
else:
    click("1588776773718.png")

wait(11)
click("1588776816413.png")

r1=Region(1364,0,236,43)
r1.click("1588776847092.png")


sikulixインストール

javaが入ってないときは、ここからダウンロードして実行します。

sikulixは、画像をクリックして操作を自動化するソフト。
こちらから3つのダウンロードする。

https://raiman.github.io/SikuliX1/downloads.html

sikulixide-2.0.5.jarからJythonは組み込まれているようで、Jython interpreterは必要ないようです。

ダウンロードしたら、コマンドプロンプトでjava -jar ファイル名を3つ分実行する。-verboseも付けると経過が見える。

順番は、以下の順。

java -jar  jython-standalone-????.jar

このjython-standalone-????.jarファイルは、javaコマンド実行でC:\Users\ここはログインユーザー名\AppData\Roaming\Sikulix\Extensionsに移動する。だからc:\sikulixフォルダから無くなるが気にしない。

java -jar   sikulixapi.jar

java -jar  sikulix-????.jar

最後のコマンドでIEDが起動します。???.jarをマウスでダブルクリックでも実行します。

以後は、batファイルのショートカットをディスクトップかメニューに追加して実行する。ここではバージョン2.04でファイル名はjava -jar sikulixide-2.0.4.jarです。batの内容は以下。ショートカットファイルの作成は、このbatファイルを右クリックメニュー。

cd c:\sikulix
java -jar sikulixide-2.0.4.jar

以下はbatファイルを実行した状態。これでIEDが開く。

C:\sikulixフォルダができ、sikulix.batを実行した状態

ハローワークの検索結果の一覧から、印刷形式にして順番に印刷するコード。pngの拡張子は実際は画像が入る。コードは、Python。


   L=[]
#令和元を探し、座標を登録 。Lの配列に保存する
for i in findAll("reiwa1.png"):
    L1=i.getCenter()
 #   L1.highlight(MARKTIME)
    L2=Location(L1.getX()-680,L1.getY()+20)
    mouseMove(L2)
    wait(0.1)
    L.append(L2)
#並び替え
LL=sorted(L, key=lambda m:m.y)
for i in  LL:
     print i

#登録した座標を順番に印刷
for i in  LL:
    click(i)
    wait(2)
    wheel(WHEEL_DOWN,26)
    wait(1)
    click("1558577706484.png")
    click("ten3tu.png")
    click("ten3tu2print.png")
    #wait(5)
    exists("1558577801825.png",5)#画層が現れるまで待つ。最大5秒
    wait(1)#印刷のイメージ待ち
    click("1558577801825.png")
    click(Location(14, 19))
    wait(1)

findallは、ある画像を見える範囲で全部を検索する。
existsは、ある画像が現れるまで待つ。
#はPythonのコメント

ハローワークの検索の印刷コードは、ハローワークのサイトが大きく変わって使えません。

バッファローのブロードバンドルーターを操作するコードの例はこちら