Sikuli脚本编写
我想写一个sikuli脚本,能够在“回收站”满的时候清空它(第一次执行时),并且需要检查图标,如果回收站是空的,就显示“回收站是空的”。
以下是我尝试过的代码:
尝试1 - 当没有找到“RecycleBin-1.png”这个图像时:--> 这个图像表示“回收站已满” 右键点击“RecycleBin-1.png” --> 右键点击“回收站”满的图标。 点击“EmptyRecycle.png” --> 这是确认删除所有项目的图像。
click("1406033619416.png") --> Image of "Recycle bin" is empty
print ("Recycle bin has been emptied")
else:
while exists ("RecycleBin.png"):
print ("Recycle bin is already empty")
尝试2 - 当没有找到“RecycleBin-1.png”时: 右键点击“RecycleBin-1.png” 点击“EmptyRecycle.png”
click("1406033619416.png")
print ("Recycle bin has been emptied")
else:
print ("Recycle bin is empty")
我的问题是,无论是while循环之前的else部分被执行(或者)else部分在回收站是空的(或者)满的时候被执行,sikuli似乎没有进行完整的分析,而是按需要执行了。
请大家帮帮我,因为我对sikuli和python还比较陌生。
谢谢,
V.Prashanth
2 个回答
autoKarma说得很对,你需要增加相似度;因为垃圾桶图标是静态的,我建议把相似度调到99%。顺便说一下,IDE(集成开发环境)会隐藏下面的文本“.similar(0.##)”,但如果你保存后查看生成的.py文件,它是会存在的。
我对你的循环做了一些调整,根据我使用Sikuli的经验,你会发现需要写很多循环,以确保Sikuli能够处理那些在模式识别中不可避免出现的各种情况。下面的代码是未经测试的,虽然大致适用于Mac,但至少我使用的那台在开始清空之前会弹出一个“你确定要删除吗”的警告,所以你的情况可能会有所不同。
def take_out_the_trash():
while exists(Pattern("Full_RecycleBin.png").similar(0.99)):
rightClick("Full_RecycleBin.png")
wait 1
while exists(Pattern("EmptyRecycle_Button.png").similar(0.99)):
click("EmptyRecycle_Button.png")
wait 1
while exists (Pattern("Emptying_trash_in_progress.png").similar(0.90)):
wait 2
take_out_the_trash()
对于“正在清空垃圾桶”的图片,要小心不要把进度条包含在里面;只需找到一些静态的文本或菜单,这样就可以安全地引用。
首先,去看看你在Sikuli IDE中代码里图标的图片位置。试着点击一下这个图片,然后去匹配的预览标签,调整相似度,从默认的0.7改成更高的值,比如0.9或者0.95,看看这样能不能解决问题。
因为完整的回收站图标和空的回收站图标非常相似,所以提高相似度可以让Sikuli只在图标几乎完全相同(90%或95%相似)的情况下才匹配,而不是在70%相似的情况下就匹配。
如果这样还不行,可能还有其他方法可以尝试,但我建议你先试试这个。