How to Find Exact match of an Image in Sikuli with Java
是Sikuli的新手并尝试自动化Citirx应用程序。 需要帮忙
我试图在屏幕上选择用户角色,屏幕有多个角色,因此我需要向下滚动屏幕并搜索特定角色并单击角色。
我捕获了一个特定角色的图像,我需要在Code下面选择和使用。 在第二张Image中,我突出显示了我需要在Red中选择的角色
以下是代码尝试:
创建方法:
1 2 3 4 5 6 7 8 9 10 11 12 | public static boolean clipExist(Screen screen, String clip ) { Match m = screen.exists(clip); if(m != null) { return true; } else { return false; } } |
使用方法:
1 2 3 4 5 6 7 8 9 10 11 | while(! clipExist(screen,"C:\\Users\\Satish_D1\\workspace\\Sikuli Demo\\Images\\DownArrow.PNG")) { screen.wheel(1 , 3); if(clipExist(screen,"C:\\Users\\Satish_D1\\workspace\\Sikuli Demo\\Images\ oles\\UK\\ENTP\\GEDIS_SALES_SUPPORT_ORL_CPF2.0_UK_ENTP.PNG")) { screen.doubleClick("C:\\Users\\Satish_D1\\workspace\\Sikuli Demo\\Images\ oles\\UK\\ENTP\\GEDIS_SALES_SUPPORT_ORL_CPF2.0_UK_ENTP.PNG",0); break; } } |
图像识别默认使用0.7的相似度(参见SikuliX文档中的模式描述)。这意味着SikuliX寻找"非常相似"的图像。由于方法
在方法
1 | Match m = screen.exists(clip); |
通过:
1 | Match m = screen.exists(Pattern(clip).exact()) |
我使用's'作为屏幕类参考。因此,一旦我们得到一个图像,那么我们将设置相同的区域,然后是您想要点击的所需图像
1 2 3 4 5 6 7 8 | public static void main(String args[]) { Match m = s.find("IMAGE"); Region r = new Region(m.x+11, m.y+22,12,12); r.click(); s.find("ENTPIMAGE.PNG"); r.click("ENTPIMAGE.PNG"); } |
您可以选择以下选项。
第一种选择:捕获滚动条
该方法具有缺点,即当项目的数量是动态的时,(2)的视觉外观将是不同的,尤其是滚动进度。但是,这可以通过仅捕获滚动进度的下半部分和箭头来欺骗。请注意,您的鼠标可能会在(3)中遇到困难,因为当鼠标覆盖时您可能找不到(2)。要处理此问题,每次单击向下箭头,您可能会在检查(2)之前将鼠标悬停一点。这是完整的脚本:
1 2 3 4 5 6 | down_arrow ="downarrow.png" complete_scroll ="completescroll.png" while not exists(complete_scroll): click(down_arrow) hover(Location(300, 200)) |
第二种选择,使用键盘(向下键)
单击要滚动的项目中的任意位置,并为您拥有的项目数量键入(Key.DOWN)。如果您有动态的项目编号,您可以为任何总是大于您的项目数量的数字键入(Key.DOWN)。这是要做的脚本
1 2 3 4 | inside_item ="inside.png" for n in range(10000): type(Key.DOWN) |
希望能帮助到你
似乎SikuliX 1.1在屏幕上查找文本时遇到了一些问题,但识别起作用。您可能希望按屏幕扫描整个文本屏幕并分割线条。接下来将每行与所需角色进行比较并保存相似度。选择具有最大相似性的行。在Python / Jython中,difflib模块中存在一个特殊的函数。