本文对sikuli做了简要的介绍,带大家入个门(坑),希望后续感兴趣的同学多多交流。

Sikuli是什么?

它是MIT的研究人员设计的一种新颖的图形脚本语言,计算机用户只须有最基本的编程技能(比如会写print”hello world”),他不需要去写出一行行代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序。———–《百度百科-sikuli》

百科菌简明扼要地介绍了这个工具/脚本语言,下面来看看我们通过这个sikuli写出来的程序

by虫师

by虫师

有没有不明觉厉~?截图都可以直接放在程序里运行了。

Sikuli可以做什么?

Sikuli automates anything you see on the screen. It uses image recognition to identify and control GUI components. It is useful when there is no easy access to a GUI’s internal or source code.

———– from sikuli主页(http://www.sikuli.org/)

Sikuli是一个使用“视觉图像匹配”方法来自动化图形用户界面(GUI)的工具。在Sikuli中,所有的Web元素应被视为一个图像,并存储在项目中。Sikuli将基于对作为参数传递的图像进行视觉匹配触发GUI交互。

Sikuli对flash对象(不具有ID或名称)非常有用。它在有一个稳定的图形用户界面(例如,GUI组件不可变)的情况下是很有用的。

甚至基于窗口的应用程序也可以使用Sikuli自动化。 Sikuli提供非常友好Sikuli-script.jar,它可以方便地与Selenium web Driver一起使用。我们甚至可以使用Sikuli来自动化Adobe视频音频播放器或网站上的Flash游戏。通过使用简单的API,使得编程更容易。

Sikuli是如何实现的?

Sikuli 的两大核心:图形识别、鼠标键盘动作的传输

第一点,sikuli是基于openCV中的matchTemplate()方法实现的,这个方法可以实现在电脑屏幕上查找指定的图片。

sikuli1

第二点,sikuli通过java.awt Robot实现(上图左下角)将鼠标和键盘的动作传输到准确地位置。

Sikuli怎么用?

相信通过上面的介绍,大家已经对sikuli有了一定了解,迫不及待想用用了。下面介绍一下sikuli的用法。

【sikuli的界面】

Sikuli IDE的界面

Sikuli IDE的界面

安装好Sikuli IDE后,双击图标打开界面:


【sikuli的脚本】

在大体了解sikuli的界面后,我们通过一个小例子来看看sikuli的脚本编写方法。

下图Sikuli脚本实现的功能:访问土豆网首页,分别观看电视剧首页、电影首页、动漫首页的推荐视频。

sikuli2

从这个脚本来说说sikuli脚本支持的语法,常用的命令

常见的sikuli自带函数说明
Click() Click(img) 单击图片img
Type() Type(img,text)在图片img中输入text
Wait() wait(img,Ns)等待图片img出现,在N秒以内
OpenApp() OpenApp(地址)打开指定路径的exe可执行程序
Popup() 弹出一个提示框
GetlastMatch() 获取最近一次匹配的图片

由于sikuli是基于jython和java的,它支持用python的语法编写脚本。

Sikuli支持在脚本中自定义函数,和python的语法一样,通过def定义。定义后的函数,可以在脚本中直接使用。

变量的定义和python一样,不需要指定变量类型,列表、字符串等等都是支持的

For、if、while这些语句当然也都支持

【sikuli的图片】

Sikuli实现了对屏幕上指定图片的操作,那么识别图片的精确度、操作图片的准确性是如何把握的呢?

假设脚本中有这样一个图片“首页”单击脚本中的这个图片时,就会出现下面的界面

sikuli3

我们可以通过图片的样式设置”-“匹配预览”,看到sikuli给出的这个图片在电脑屏幕中的匹配情况,下面有个“相似度”滑动条,调整相似度大小可以控制图片匹配的精确度。相似度越小,匹配越模糊,匹配上的区域越多,下图是将相似度调小后的结果:

sikuli4

在“样式设置”-“目标位置偏移”中,可以设置鼠标点击的位置,也就是目标位置偏移,通过移动下图红圈圈出的“十字”来设置。这在需要键盘输入操作的时候很有用。

sikuli5

Sikuli的扩展

小结

Sikuli的实际用途和优点

如果您需要了解更多内容,可以
加入QQ群:570982169、486207500
直接询问:010-68438880-8669

源链接

Hacking more

...