記事ディレクトリ
公式サイト : http: //sikulix.com/
Github : https://github.com/sikuli/sikuli
チュートリアル:
-
https://sikulix-2014.readthedocs.io/en/latest/genindex.html
SikuliXとは何ですか?
SikuliX (Sikuli) は、Windows、Mac、または一部の Linux/Unix を実行しているデスクトップ コンピューターの画面に表示されるすべてを自動化します。OpenCVが提供する画像認識機能を利用してGUIコンポーネントを識別します。これは、GUI の内部や、操作したいアプリケーションや Web ページのソース コードに簡単にアクセスできない状況で便利です。
SikuliX はスクリプト言語をサポートします
- Python 言語レベル 2.7 (Jython でサポート)
- RobotFramework テキスト スクリプトの実行のサポート
- Ruby 言語レベル 1.9 および 2.0 (JRuby でサポート)
- JavaScript(Javaスクリプトエンジンでサポート)
...Java プログラミングや、Java 対応のプログラミング/スクリプト言語 (Jython、JRuby、Scala、Clojure など) でのプログラミング/スクリプト作成でも使用できます。
SikuliX は、画面上に画像を配置するだけでなく、マウスやキーボードを操作して、特定された GUI 要素と対話することもできます。マルチモニター環境や、いくつかの制限はあるもののリモート システムでもうまく機能します。
SikuliX には、画像内のテキストの検索に使用できる基本テキスト認識 ( OCR ) が付属しています。この機能は Tesseract によってサポートされています。
SikuliX は、Windows、macOS、およびほとんどの Linux/Unix システム上で動作する Java アプリケーションです。
SikuliX はスクリプトとプログラミングをサポートしています。この記事ではスクリプトについてのみ紹介します。プログラミングについてはseleniumを使用して後で説明します。
最新の安定バージョンは2.0.5 (現時点 2023.06.19)
SikuliX の使用シナリオ
いくつかの反復的なタスクを自動化したい
- アプリケーションまたは Web ページの日常的な使用
- ゲームをする
- ITシステムとネットワークの管理
...手元に十分なツールがありません。
開発中のアプリケーションまたは Web ページをテストしたいと考えています。
特定のアプリケーションまたは Web ページ上でライブで実行されるハウツー ドキュメントまたはトレーニング資料を作成したいと考えています。
適切なツールとワークフローはすでにありますが、SikuliX固有の機能を追加してメソッドを強化し、効率と結果を向上させたいと考えています。
SikuliX をインストールする
1. JDK64ビット(バージョン8以降)をインストールします。
2. SikuliIDEをダウンロードします。オペレーティング システムが異なると、ダウンロードするパッケージが異なります。
-
Windows: すぐに使用できる sikulixide-2.0.5-win.jar (Windows 用 SikuliX IDE) をダウンロードします。
-
macOS: すぐに使用できる sikulixide-2.0.5-mac.jar (macOS 用 SikuliX IDE) をダウンロードします。
-
Linux: すぐに使用できる sikulixide-2.0.5-lux.jar (Linux 用 SikuliX IDE) をダウンロードします。
一般的な方法
Screenクラスは、Sikuli が提供するすべてのメソッドの基本クラスです。Screen クラスには、シングルクリック、ダブルクリック、テキストボックスへの入力、ホバーリングなど、画面要素に対するすべての一般的な操作のための事前定義されたメソッドが含まれています。以下は、Screen クラスによって提供される一般的に使用されるメソッドのリストです。
Screen クラスはクラスを拡張するためRegion
、Region クラスのすべてのメソッドが Screen オブジェクトで使用できます。
シーク操作に画面全体を使用すると、パフォーマンスに影響することに注意してください。したがって、可能であれば、ルックアップ操作をより小さい領域オブジェクト (例
reg.find()
: ) に制限して、処理を高速化します。
見上げる
方法 | 説明 |
---|---|
探す | このメソッドは、画面上の特定の要素を検索するために使用されます。画像名をパラメータとして受け取ります。 |
すべてを見つける | 一致するすべての視覚パターンを画面全体で検索し、これらの類似パターンの場所のリストを返します。この関数を使用すると、画面上で選択されているすべての項目を取得できます。 |
待って | 指定したパターンがロードされるまで待ちます。 |
待って | 数秒待ちます。 |
待つバニッシュ | 画像が消えるまでエリア内で指定したパターンを探し続ける |
存在します | |
寝る | コンピューターをしばらく休ませて、急いで次のステートメントを実行しないでください。すぐに |
ねずみ
注文 | 説明 |
---|---|
クリック | 要素を左クリックします |
右クリック | 要素を右クリック |
ホバリング | 指定された要素の上にマウスが移動します |
ドラッグドロップ | Drag,ragDrop("1606202686079.png", "1606202694506.png") #最初の要素を 2 番目の要素の位置にドラッグします |
ペースト | テキスト入力 (コンテンツをコピーして貼り付けることをお勧めします) |
キーボード
ボタン | 注文 |
---|---|
シフト | タイプ(キー.SHIFT) |
Ctrl | タイプ(キー.CTRL) |
Altキー | タイプ(キー.ALT) |
タブ(タブ) | タイプ(キー.TAB) |
キャップスロック | type(Key.CAPSLOCK) |
入力 | type(キー.ENTER) |
消去 | type(Key.DELETE) |
バックスペース | type(Key.BACKSPACE) |
入れる | タイプ(キー.INSERT) |
家 | type(Key.HOME) |
終わり | タイプ(キー.END) |
ESC | タイプ(キー.ESC) |
空 | type(Key.SPACE) |
ウィンドウズ | タイプ(キー.WIN) |
ページを変更する | タイプ(キー.PAGE_UP) |
ページダウン | type(Key.PAGE_DOWN) |
プリントスクリーン | type(Key.PRINTSCREEN) |
テンキーロック | タイプ(Key.NUM_LOCK) |
スクロールロック | type(Key.SCROLL_LOCK) |
F1 | タイプ(Key.F1) |
F2 | タイプ(Key.F2) |
F3 | タイプ(Key.F3) |
F4 | タイプ(Key.F4) |
F5 | タイプ(Key.F5) |
F6 | タイプ(Key.F6) |
F7 | タイプ(Key.F7) |
F8 | タイプ(Key.F8) |
F9 | タイプ(Key.F9) |
F10 | タイプ(Key.F10) |
F11 | タイプ(Key.F11) |
F12 | タイプ(Key.F12) |
カーソルキー:上 | タイプ(キー.UP) |
カーソルキー:下 | タイプ(キー.DOWN) |
カーソルキー:左 | タイプ(キー.LEFT) |
カーソルキー:右 | type(Key.RIGHT) |
カーソルを上に 2 回移動します | タイプ(キー.UP * 2) |
カーソルを下に 2 回移動します | type(Key.DOWN * 2) |
カーソルを左に 2 回移動します | type(Key.LEFT * 2) |
カーソルを右に 2 回移動します | type(Key.RIGTH * 2) |
特定のキーを押す | KeyDown(Key.*) はロケール設定に Region() を使用する必要があります。 |
特定のキーを放す | KeyUp(Key.*) は、Region() を使用してリージョンを設定する必要があります。 |
オペレーター
手術 | 注文 |
---|---|
添加 | + |
引き算 | – |
乗算 | * |
削除 | / |
余りの計算 | % |
除数の整数部分 | // |
Aのb乗 | A ** B |
Aのマイナス | -A |
論理的または | また |
ロジックと | と |
拒否 | いいえ |
a は b より大きい | a > b |
a は b より小さい | a < b |
a は b 以下です | a <= b |
a は b 以上です | a >= b |
a は b に等しい | a == b |
a は b に等しくない | a != b |
ホットキー
共通操作 | ホットキー | 注文 |
---|---|---|
コピー | Ctrl + C | type("c" , Key.CTRL) |
切り取る | Ctrl + X | type(“x” , Key.CTRL) |
贴上 | Ctrl + V | type(“v” , Key.CTRL) |
搜索 | Ctrl + F | type(“f” , Key.CTRL) |
打印 | Ctrl + P | type(“p” , Key.CTRL) |
撤消 | Ctrl + Z | type(“z” , Key.CTRL) |
重做 | Ctrl + Y Ctrl + Shift + Z | type(“y” , Key.CTRL); type(“z” , Key.CTRL + Key.SHIFT) |
关闭标签 | Ctrl + F4 | type(Key.F4 , Key.CTRL) |
还原标签 | Ctrl + Shift + T | type(“t” , Key.CTRL + Key.SHIFT) |
浏览器缓存刷新(强制刷新) | Ctrl + F5 | type(Key.F5 , Key.CTRL) |
关闭窗口 | Alt + F4 | type(Key.F4 , Key.ALT) |
最小化所有窗口 | Windows + M | type(“m” , Key.WIN) |
显示桌面 | Windows + D | type(“d” , Key.WIN) |
最小化窗口(当窗口为正常大小时)恢复为原始大小(当窗口为最大化时) | Windows + 光标键:向下,如果最大化,请执行上述两次。 | type(Key.DOWN , Key.WIN) |
窗口最大化 | Windows +光标键:向上 | type(Key.UP , Key.WIN) |
切换活动窗口 | Windows + Tab; Windows + Shift + Tab | type(Key.TAB , Key.WIN); type(Key.TAB , Key.WIN + Key.SHIFT) |
启动任务管理器 | Ctrl + Shift + ESC | type(Key.ESC , Key.CTRL + Key.SHIFT) |
启动资源管理器 | Windows + e | type(“e” , Key.WIN) |
其他
打开应用
#打开应用程序,注意应用程序的路径名里的斜杠“\”要改为双斜杠“\\”。
openApp(应用程序路径名)
#closeApp
#switchApp
If语句
if 条件 and 条件: #(注意有冒号,‘#’号表示注释)
语句
循环语句
for x inrange(10): #循环10次,x不用预先定义
循环体
弹出输入框
# 显示一个输入框,以供输入。要输入中文应该在前面加u,不然会乱码
input(u"字符串")
弹出提示框
popup("Obama has updated his message")
操作文件
#打开 写文件
f=open('c:/wy.txt','a')
t="hello\n"
f.write(t)
f.close()
#打开 读文件
f=open('c:/wy.txt','r')
t=f.read()
popup(t)
#open(路径+文件名,读写模式)
#读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式
示例脚本
示例一 自动抢票
流程:
1.打开浏览器输入抢票的网址
2.循环点击抢票按钮
这里用登入按钮代替抢票按钮哈。
脚本截图:
脚本代码:
n = 10
find("1687314581241.png")
for i in range(n):
click(Pattern("1687314614204.png").targetOffset(116,-4))
sleep(1)
print "done"
示例二 自动打开计算器
流程:
1.打开Windows搜索
2.输入calc
3.输入1+1
4.按=
进行计算
脚本截图:
脚本代码:
click("1687331888480.png")
paste("calc")
type(Key.ENTER)
type(Key.ENTER)
wait(2)
paste("1+1")
wait(1)
click("1687332030574.png")
print("done")
示例三 自动访问CSDN博客搜索博主并关注
流程:
1.在桌面找到Chome浏览器
2.双击Chome浏览器
3.sleep 2秒
4.等待Chrome浏览器打开
5.敲击回退键
6.敲击https://www.csdn.net/
7.敲击ENTER键
8.敲击ENTER键
9.sleep 4秒等待浏览器加载内容
10.等待csdn加载完成
11.敲击lakernote
12.敲击ENTER键
13.敲击ENTER键
14.等待搜索完成
15.鼠标点击用户
16.鼠标点击关注
17.关闭浏览器
脚本截图:
脚本代码:
find("1687269549891.png")
doubleClick(Pattern("1687269549891.png").targetOffset(3,-21))# 点击指定图案的指定位置
sleep(2)
wait(Pattern("1687269907253.png").similar(0.60)) # 指定图案命中相似度为0.6,更容易命中
type(Key.BACKSPACE)
type("https://www.csdn.net/")
type(Key.ENTER)
type(Key.ENTER)
sleep(4)
wait("1687270102974.png")
type("1687270102974.png","lakernote")
type(Key.ENTER)
type(Key.ENTER)
sleep(2)
click("1687270231840.png")
sleep(2)
click("1687270273555.png")
sleep(3)
click("1687270623962.png")
其他
find("png") # 在整个电脑屏幕的范围内去找图标
r = Region("png")
r.find("xx") # 在指定的范围内找图标
if exists("查看的内容图片"):
click("查看的内容图片")
print"断言的内容"
else:
print("断言的内容")
for x in findAll(png):
click(x)
while exists(png):
sleep(5)
popup("vgod just logged off")
while not find(png):
sleep(1)
else:
print "not found", png
keyDown((Key.CTRL) # 一直按着
keyUp(Key.CTRL) # 松开
# 方位
Nearby(number)、above()、below()、left()、right()、getCenter()
SikuliX原理
https://sikulix-2014.readthedocs.io/en/latest/devs/system-design.html
SikuliX脚本
Sikuli Script(Sikuli脚本)是一个基于Jython和Java的库,可以使用图像模式来自动化GUI交互,通过图像模式来指定键盘/鼠标事件。Sikuli Script的核心是一个Java库,由两部分组成:
- java.awt.Robot(用于向适当位置发送键盘和鼠标事件的类)
- 以及基于OpenCV的C++引擎(用于在屏幕上搜索给定的图像模式)
C++引擎通过JNI与Java连接,并且需要为每个平台进行编译。在Java库的基础上,为最终用户提供了一个简单明了的命令集作为一层薄薄的Jython封装。因此,很容易为在JVM上运行的其他语言(如JRuby、Scala、Javascript等)添加更多薄薄的封装层。
Sikuli 源文件夹或压缩文件(.sikuli、.skl)的结构
Sikuli脚本(.sikuli)是一个目录,其中包含一个表示自动化工作流程或测试用例的Python源文件(.py),以及源文件使用的所有图像文件(.png)。Sikuli脚本中使用的所有图像只是一个指向.sikuli捆绑包中.png文件的路径。因此,Python源文件也可以使用任何文本编辑器进行编辑。
在使用Sikuli IDE保存脚本时,可以选择在.sikuli目录中创建一个额外的HTML文件,以便用户可以轻松地在Web上共享脚本的可视副本。
Sikuli压缩脚本(.skl)只是.sikuli文件夹中所有文件的压缩文件。它适用于通过电子邮件或Web上传进行分发,也可以从命令行运行并在Sikuli IDE中重新打开。(以前称为“Sikuli可执行文件”已被弃用,因为这样命名是误导性的:人们通常会认为它类似于一个自包含和自运行的软件包,类似于Windows的EXE文件,但实际上不是这样的)
缺点
- 依赖屏幕截图,使其在不同的操作系统上,不同的浏览器中,甚至是不同的显示分辨率下,需要独立维护一套图形源文件,对于其跨平台的能力造成障碍。
- 由于对于截图的检索依赖于实时的桌面显示,若出现程序逻辑之外的意外界面遮挡或焦点切换(如,弹出窗口等),则会对程序执行造成影响。
- IDE 处于开发初级阶段,稳定性和易用性存在一定问题。其本身仅支持初级的代码编辑功能,对于规模较大的代码开发和调试工作仍存在不便之处。其在 Windows 平台和 Linux 平台上的运行稳定性也稍逊于在 MacOSX 上的表现。