我一直在尝试使我的计算机上的一些任务自动化,并且确实从 Java 中选择了 Sikuli 来做到这一点(我每天都使用 Java,并且不知道任何使用 java 的自动化工具,sikuli 是我发现的第一个)。我使用 java 和 maven 和 eclipse 作为 IDE。我已将 Sikuli 添加为 Maven 依赖项。
<dependency>
<groupId>com.sikulix</groupId>
<artifactId>sikulixapi</artifactId>
<version>2.0.5</version>
</dependency>
我试着做一些简单的事情。我使用 Windows 的屏幕截图工具对屏幕的某些部分进行了截图,并希望 sikuli 将其悬停。它对一张图像效果很好,但对其他图像则完全不行。似乎图像越大效果越好,因为我对任何小图像都没有成功。一个工作是整个窗口的屏幕(减少到我屏幕的~1/4)。我还尝试在此窗口中找到一个按钮,找到左下角的 windows 徽标,找到我的包资源管理器的屏幕,但没有一个可以正常工作。
我使用各种值玩了similar(),但它并没有改善结果。在某些情况下(窗口内的按钮),它确实找到了一些低相似值的结果,但它是另一个按钮。奇怪的部分是:它找到了另一个亮蓝色的按钮,而我正在寻找的是紫色的。
我的电脑背景从未改变,我做了一些 screen.highlight() 并查看正确的屏幕(双屏)。这不是图像路径的问题(已经解决了这个问题)。
你知道我可以尝试什么吗?我读过关于人们使用 Sikuli IDE 还是其他 IDE 的成功率不同的文章。所以也许我可以试试 sikuli IDE。
我一回到家就可以提供代码示例。
我用来测试的代码:
public class CleanTest {
static Screen screen = new Screen();
public static void main(String[] args) throws FindFailed, AWTException, IOException, InterruptedException {
String pathYourSystem = System.getProperty("user.dir") + "\\";
System.out.println(pathYourSystem);
Pattern pLauncher = new Pattern(pathYourSystem+"img\\full_launcher.PNG").similar(0.9d);
Desktop.getDesktop().open(new File("path_to_an_exe_opening_a_launcher"));
screen.wait(pLauncher, 300);
screen.mouseMove();
System.out.println("launcher found");
}
}
它适用于“完整启动器”图像,但找不到启动器的子部分(按钮)。我尝试编写一些代码来测试类似参数是否存在阈值:
double similarValue = 1d;
Pattern pLauncher = new Pattern(pathYourSystem+"img\\the_button.PNG").similar(similarValue);
Desktop.getDesktop().open(new File("path_to_an_exe_opening_a_launcher"));
while(!screen.has(pLauncher)) {
similarValue-=0.1;
pLauncher = new Pattern(pathYourSystem+"img\\login.PNG").similar(similarValue);
}
System.out.println(similarValue);
screen.mouseMove();
它会在 0.5 左右找到一些东西,但它是一个完全不同的按钮。
谢谢 !
编辑:如果有人有同样的问题,请尝试使用 sikulix IDE 截取屏幕截图。它适用于 IDE 截取的屏幕截图。