官网: http://sikulix.com/
Github:https://github.com/sikuli/sikuli
教程:
https://sikulix-2014.readthedocs.io/en/latest/toc.html
https://sikulix-2014.readthedocs.io/en/latest/genindex.html
<dependency>
<groupId>com.sikulixgroupId>
<artifactId>sikulixapiartifactId>
<version>2.0.5version>
dependency>
java.awt.Robot
主要使用Sikuli 的Screen 类和Pattern 类来执行基本的 UI 操作。这里Screen类主要充当基类。让我们看一下与 Sikuli 进行 UI 交互的一些重要方法。
Screen sc = new Screen();
注意: Sikuli 使用图像进行对象识别,因此,每个方法都将至少接受一个参数作为图像文件的路径。
Screen类包含用于屏幕元素上所有常用操作的预定义方法,如单击、双击、向文本框提供输入、悬停等。
由于类 Screen 扩展了类
Region
,因此类 Region 的所有方法都可用于 Screen 对象。使用整个屏幕进行查找操作会对性能产生影响。因此,如果可能的话,将查找操作限制在较小的区域对象(例如
reg.find()
)以加快处理速度。
方法 | 描述 | 句法 |
---|---|---|
单击(“<图像路径>”) | 用于对指定图片进行点击操作。 | sc.click(“img.png”); |
右键单击(“<图像路径>”) | 它用于在指定屏幕上执行右键单击。 | sc.rightClick(“img.png”); |
双击(“<图像路径>”) | 它用于对给定图像执行双击。 | sc.doubleClick(“img.png”); |
查找(“<图像路径>”) | 此方法用于查找屏幕上是否存在特定元素。 | sc.find(“img.png”); |
存在(“<图像路径>”) | 此方法检查屏幕上是否存在特定元素。 | sc.exists(“img.png”); |
输入(“<图像路径>”,“文本”) | 该方法用于在特定对象上输入文本。 | sc.type(“img.png”,“文本”); |
拖动(“source_img”。“target_img”) | 它允许将源对象拖动到目标对象。 | sc.dragDrop(“img1.png”,“img2.png”); |
鼠标滚轮(“ | 它允许对特定图像执行滚轮移动动作。 | sc.wheel(“img.png”,30, 1); |
悬停(“<图像路径>”) | 此方法允许将鼠标悬停在特定对象上。 | sc.hover(“img.png”); |
粘贴(“<图像路径>”,“文本”) | 此方法用于将一些文本粘贴到特定文本对象。 | sc.paste(“img.png”,“文本”); |
Sikuli 可能会识别不同的对象,因此在这种情况下我们可以使用 Pattern 类来唯一地标识对象。
Pattern pattern = new Pattern(“图像的路径”);
Pattern类中编写的一些方法如下:
方法 | 描述 | 句法 |
---|---|---|
pat.getFileName() | 该方法用于获取图像的文件名。 | String file = pat.getFileName(); |
pat.similar() | 它通过相似度值返回。相似度值介于 0 到 1 之间。 | Pattern p = pat.similar(0.5f); |
pat.exact() | 它返回精确匹配的图像模式,相似度值为 1。 | Pattern p = pat.exact(); |
pat.getFileURL() | 该方法返回图像文件的 URL。 | URL url = pat.getFileURL; |
pat.getImage() | 它返回一个新图像。 | Image img = pat.getImage(); |
// 会在将要发生操作的位置显示视觉效果(闪烁的双线红色圆圈)约 2 秒
Settings.setShowActions(true);
// 启动和停止其他应用程序并将它们置于前面,最大等待8s
App.open("C:\Program Files\Mozilla Firefox\firefox.exe",8)
// 获取有关运行时环境的信息
Settings.getOS()
Settings.isWindows()
// 获取剪贴板的内容
App.getClipboard()
// 获取鼠标光标的当前位置
Mouse.at()
// OCR
OCR.readLine()
// 设置搜索图像的基本路径
ImagePath.setBundlePath("C:\laker\TA\demota\images");
Screen screen = new Screen();
screen.find("image1");
screen.find("imageset1/image2");
// 等2s
screen.wait(2D);
// 指定图案命中相似度为0.6,更容易命中
screen.find(new Pattern("OpenButton.PNG").similar(0.6));
// 截取一个区域抽取文本
// 截取一个区域,你可以根据需要调整坐标和大小 坐标可以配合截图工具
Region region = new Region(100, 100, 300, 200);
region.text();
// 截取屏幕上的指定区域并保存为图像
String saveCapture1 = screen.saveCapture(region, "abc")
// 返回可用屏幕的数量
int numberScreens = Screen.getNumberScreens();
// 返回默认/主监视器覆盖的矩形。
Rectangle screenBounds = screen.getBounds();
// 打印有关当前监视器设置的信息
Screen.showMonitors();
// 检查某个区域是否包含在屏幕中
Region.isValid()
// 高亮区域
region.highlight();
// 取消高亮
region.highlightOff();
// 会在将要发生操作的位置显示视觉效果(闪烁的双线红色圆圈)约 2 秒
Settings.setShowActions(true);
// 设置搜索图像的基本路径
ImagePath.setBundlePath("C:\\laker\\TA\\demota\\images");
// 初始化screen
Screen screen = new Screen();
// 打开Chrome 方式一
Pattern chrome = new Pattern( "chrome.png");
screen.doubleClick(chrome);
// 打开Chrome 方式二,推荐 等待8秒
String appName = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
App.open(appName, 8);
// 输入
screen.type("www.csdn.net");
// 按ENTER键
screen.type(Key.ENTER);
// 等2s
screen.wait(2D);
// 按ENTER键
screen.type(Key.ENTER);
// 指定图案命中相似度为0.8,更容易命中
Pattern searchButton = new Pattern("search.png").similar(0.8);
// 最大等待10s 搜索框显示出来
screen.wait(searchButton, 10);
// 在搜索框中 输入“lakernote”
screen.type(searchButton, "lakernote");
screen.type(Key.ENTER);
screen.type(Key.ENTER);
// 等待并点击用户按钮
Pattern userButton = new Pattern("user.png").similar(0.8);
screen.wait(userButton, 10);
screen.click(userButton);
// 等待并点击关注按钮
Pattern followButton = new Pattern("follow.png").similar(0.8);
screen.wait(followButton, 10);
screen.click(followButton);
// 关闭chrome
App.close(appName);
// 会在将要发生操作的位置显示视觉效果(闪烁的双线红色圆圈)约 2 秒
Settings.setShowActions(true);
// 设置搜索图像的基本路径
ImagePath.setBundlePath("C:\\laker\\TA\\demota\\images");
// 初始化screen
Screen screen = new Screen();
// 打开Chrome
String appName = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
App.open(appName, 8);
// 输入
screen.type("http://101.132.189.23:81/admin/index.html");
// 按ENTER键
screen.type(Key.ENTER);
// 按ENTER键
screen.type(Key.ENTER);
// 等待页面加载完成 指定图案命中相似度为0.8,更容易命中
Pattern searchButton = new Pattern("login.png").similar(0.8);
screen.wait(searchButton, 10);
int numberScreens = Screen.getNumberScreens();
System.out.println("numberScreens : " + numberScreens);
Rectangle screenBounds = screen.getBounds();
System.out.println("screenBounds:" + screenBounds);
// 打印有关当前监视器设置的信息
Screen.showMonitors();
// 截取一个区域,你可以根据需要调整坐标和大小 坐标可以配合截图工具
Region region = new Region(1020, 700, 150, 50);
String saveCapture1 = screen.saveCapture(region, "abc");
System.out.println(saveCapture1);
// 使用ocr 获取文本
String text = region.text();
System.out.println("text: " + text);
// 高亮区域
region.highlight();
region.wait(2d);
// 取消高亮
region.highlightOff();
App.close(appName);