SikuliX 的脚本语言其实是Jython(Python语法),所以判断、循环、函数、异常处理等控制结构全部使用 Python 语法。
一、判断语句(if)
| 语法 | 说明 | 示例 |
|---|---|---|
if | 条件判断 | if exists("ok.png"): |
elif | 否则如果 | elif exists("cancel.png"): |
else | 否则 | else: |
示例:
ifexists("ok.png"):click("ok.png")elifexists("cancel.png"):click("cancel.png")else:popup("没找到按钮")二、常见判断条件
| 判断方式 | 示例 |
|---|---|
| 图片是否存在 | exists("btn.png") |
| 区域是否存在 | region.exists("btn.png") |
| 匹配结果是否为空 | if m: |
| 字符串判断 | if text == "Login": |
示例:
m=exists("btn.png")ifm:click(m)三、while 循环
| 语法 | 说明 |
|---|---|
while | 条件循环 |
break | 跳出循环 |
continue | 跳过本次循环 |
示例:
whileTrue:ifexists("enemy.png"):click("enemy.png")sleep(1)停止循环:
whileTrue:ifexists("exit.png"):break四、for 循环
| 语法 | 说明 |
|---|---|
for | 遍历循环 |
range() | 循环次数 |
示例:
foriinrange(5):click("btn.png")输出:
print(i)五、遍历查找结果
Sikuli常见用法:
forminfindAll("icon.png"):click(m)六、嵌套循环
foriinrange(3):forjinrange(5):click("btn.png")七、函数定义
| 语法 | 说明 |
|---|---|
def | 定义函数 |
示例:
deflogin():click("user.png")type("admin")click("pass.png")type("123456")click("login.png")调用:
login()八、异常处理
Sikuli最常见异常:
FindFailed示例:
try:click("login.png")exceptFindFailed:popup("没找到按钮")九、条件循环(常见自动化)
自动挂机脚本常见写法:
whileTrue:ifexists("enemy.png"):click("enemy.png")ifexists("skill.png"):click("skill.png")sleep(0.5)十、等待循环(推荐写法)
避免CPU占用:
whilenotexists("login.png"):sleep(1)十一、带计数循环
count=0whilecount<10:click("btn.png")count+=1十二、事件回调函数
Sikuli监听常见写法:
defattack(event):click(event.getMatch())onAppear("enemy.png",attack)observe(10)十三、逻辑运算符
| 运算符 | 说明 | 示例 |
|---|---|---|
and | 并且 | if exists("a.png") and exists("b.png"): |
or | 或者 | if exists("a.png") or exists("b.png"): |
not | 取反 | if not exists("a.png"): |
示例:
ifexists("login.png")andexists("password.png"):click("login.png")十四、三元表达式
简写判断:
result="yes"ifexists("ok.png")else"no"十五、脚本主入口(推荐写法)
大型脚本常见结构:
defmain():whileTrue:ifexists("start.png"):click("start.png")sleep(1)main()十六、一个完整Sikuli脚本示例
deffight():whileTrue:ifexists("enemy.png"):click("enemy.png")elifexists("boss.png"):click("boss.png")else:sleep(1)defmain():App.open("game.exe")wait("start.png",10)click("start.png")fight()main()在 Sikuli 里:
- GUI操作 → Sikuli API
- 逻辑控制 → Python语法
所以脚本结构通常是:
while if exists click