介绍:最近要做一个内嵌百度地图页面的自动化,由于selenium定位不到百度地图里面的元素,所以使用Sikuli以基于图片的方式来定位,这里对Sikuli的用法加以总结。

安装Sikuli

Sikuli官网介绍的是如何操作ppt,而我们是要定位当前页面的图片,实际使用的是SikuliX,所以Maven的配置不要复制官网的那个,在pom.xml添加如下依赖即可:

<dependency><groupId>com.sikulix</groupId><artifactId>sikulixapi</artifactId><version>1.1.0</version>
</dependency>

工具类

我这里封装了一个工具类,封装了Sikuli的几个基本操作,如下:

import org.sikuli.script.FindFailed;
import org.sikuli.script.Image;
import org.sikuli.script.Pattern;
import org.sikuli.script.Screen;/*** Author: 灵枢* Date: 2018/11/14* Time: 16:07* Description: Sikuli:可以根据图片来定位,然后执行操作*/
public class SikuliUtil {public static Pattern pattern = null;public static Pattern pattern2 = null;public static Screen screen = null;/*** 实现单击操作* @param iconPath 图片路径*/public static void click(String iconPath){if(isExist(iconPath)==false){System.err.println("找不到图片:" + iconPath);}pattern = new Pattern(iconPath);screen = new Screen();try {screen.click(pattern);} catch (FindFailed e) {e.printStackTrace();System.err.println(e.getMessage());}clear();}/*** 双击操作* @param iconPath 图片路径* @return*/public static void doubleClick(String iconPath){if(isExist(iconPath)==false){System.err.println("找不到图片:" + iconPath);}pattern = new Pattern(iconPath);screen = new Screen();try {screen.doubleClick(pattern);} catch (FindFailed e) {e.printStackTrace();System.err.println(e.getMessage());}clear();}/*** 拖拽功能,拖动路径是icon1到icon2* @param icon1Path* @param icon2Path*/public static void dragDrop(String icon1Path,String icon2Path){if(isExist(icon1Path)&&isExist(icon2Path)){pattern = new Pattern(icon1Path);pattern2 = new Pattern(icon2Path);screen = new Screen();try {screen.dragDrop(pattern,pattern2);} catch (FindFailed e) {e.printStackTrace();System.err.println(e.getMessage());}clear();}}/*** 验证图片是否存在* @param iconPath*/public static boolean isExist(String iconPath){boolean exist;pattern = new Pattern(iconPath);screen = new Screen();try {screen.find(pattern);exist = true;} catch (FindFailed e) {e.printStackTrace();exist = false;}clear();return exist;}/*** 关闭弹窗*/public static void closePrompt(){Screen.closePrompt();}/*** 清空变量值*/public static void clear(){if(pattern != null){pattern = null;}if(pattern2 != null){pattern2 = null;}if(screen != null){screen = null;}}
}

实例

  • 在百度地图页面,通过地图选点的方式查找线路:成都东站-成都大熊猫繁育研究基地
import org.openqa.selenium.chrome.ChromeDriver;
import test.java.utils.SikuliUtil;
import java.util.concurrent.TimeUnit;/*** Author: 灵枢* Date: 2018/11/20* Time: 19:46* Description:在百度地图页面,通过地图选点的方式查找线路:成都东站-成都大熊猫繁育研究基地*/
public class BMapTest {public static void main(String[] args) throws InterruptedException {//初始化driverSystem.setProperty("webdriver.chrome.driver","resource/chromedriver.exe");ChromeDriver driver = new ChromeDriver();driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);driver.manage().window().maximize();//进入百度地图页面driver.get("https://map.baidu.com/");driver.findElementById("sole-input").sendKeys("成都市");driver.findElementById("search-button").click();Thread.sleep(1000);//使用Sikuli操作地图选点SikuliUtil.click("resource/sikuliPicture/成都东站.png");driver.findElementById("route-from").click();SikuliUtil.click("resource/sikuliPicture/大熊猫繁育基地.png");}
}
  • 代码运行如下图:
  • 有一点要注意的是,Sikuli对图片识别是针对电脑当前页面的,只有屏幕有对应的图片,才可能被定位到。

总结

优点:

  1. Sikuli可以操作地图、flash、视频等,只要是屏幕上出现的图片都可以,在一些selenium定位不到的地方使用Sikuli会有很好的效果
  2. 桌面的图片也可以定位到,如果有上传文件的操作就可以Sikuli定位

缺点:

  1. 对图片要求比较高,不能有遮挡,分辨率、色差可能也有影响
  2. 使用过多的图片导致项目太大

Sikuli+Selenium查询百度地图线路相关推荐

  1. 百度地图线路颜色_你是铁路大亨吗?五个值得收藏的铁路地图网站

    记得几年前,我在发现中国边画图,边写一篇有关抗战史的文章时,需要查询一些铁路网信息,比如民国时期的铁路路线,俄罗斯在西伯利亚的铁路网等.为此我先在电脑上打开百度地图,令人惊讶的是,当时百度地图居然不提 ...

  2. 百度地图线路颜色_旅游厕所电子地图:让“方便”更方便

    每逢节假日,不断攀升的客流高峰都是对旅游景区承载能力和服务水平的一次考验.今年国庆假期也不例外.据文化和旅游部综合测算,2019年国庆7天全国共接待国内游客7.82亿人次,同比增长7.81%,同时,受 ...

  3. 百度地图线路颜色_山东到底发展成了什么样子,这两张地图不会说谎

    城市之间对比时,可以选择GDP.人口.教育.交通.医疗等各种指标,但这些指标或多或少的都受到政绩考核的影响,并不是百分百客观的. 今天我想选两个地图来分析下山东16市的城市发展情况,一个是热力图,一个 ...

  4. android 百度地图 在线建议查询,百度地图SDK-----百度地图在线建议查询,结合AutoCompleteTextView实现搜索下拉列表。...

    实现效果图 如下 这是百度地图 POISearch的效果, 这是自己写的效果 首先实现这个功能主要用到了两个部分 第一个部分 AutoCompleteTextView 具体使用参考 http://bl ...

  5. android百度地图 模糊查询,百度地图,自动获取定位,拖拽获取地点,模糊查询获取当前位置...

    先看下效果图,因为没有美化,只是做一下功能. 完整代码如下 百度地图的定位 input{border:1px solid #dddee1;border-radius:5px;height:30px; ...

  6. android 百度地图线路规划问题

    首先集成百度开发环境,我就不叙述了:直接奔入正题,路线规划在官方文档上也很清楚,但是个人感觉少说一句话:关于继承自OverlayManager的子类在官方demo中可以获取. 下面是官方文档: //在 ...

  7. 快春运了,做个火车余票查询接口,余票来源12306,图是百度地图

    摘要:做个火车票查询余票接口,数据来源于12306,地图使用百度地图(未完成) 今天本来想查询一下回家的车票,结果坑爹的发现12306网站死活打不开,尼玛真实坑爹,想查询一下余票都怎么难 于是自己决定 ...

  8. 公交导航准确度大PK:高德地图百度地图谁更精确

    万物复苏.春意盎然的春天,正是四处赏春踏青的好时节.但踏青景点经常堵车怎么办?坐公交啊!随着政府对公共交通体系的大力支持,绿色出行不仅成为广大市民上班通勤的新常态,也是出游的好帮手.那么,该怎么才能更 ...

  9. 百度地图定位失败,显示经纬度(4.9E-324,4.9E-324),错误码-162

    百度地图定位失败 现象 经度:4.9E-324 纬度:4.9E-324 错误码:162 分析 查询百度地图官方错误码文档,得知: 原来是因为.so文件加载不成功引起的. 随后,下载了一份百度地图Dem ...

最新文章

  1. 透过率和反射率的关系_光谱仪应用|色彩、透过率等四款测量系统
  2. linux-文件权限与目录配置
  3. RabbitMQ Topic exchange
  4. boost::mp11::mp_third相关用法的测试程序
  5. 什么时候使用mysql触发器_MySQL触发器的使用
  6. C语言atoi()函数:将字符串转换成int(整数)和sprintf和memset
  7. 在线打开html文件,html是什么文件?html文件怎么打开?
  8. ASP.NET入门教程:服务器控件
  9. 关于HTML+CSS常用标签
  10. 直接保存 DataFrame 表格到本地,这个“骚操作”你还不知道?
  11. JavaWeb学习笔记
  12. 图解TCP/IP 读后感
  13. Python使用wordcloud做词云
  14. pymysql操作MySQL数据库表-----爬虫豆瓣top250电影并存入数据库
  15. Koo叔说Shader—Shader简介
  16. 2021 年年度蕞佳开源软件!
  17. 帝国cms网站管理系统之安全设置最优化分享
  18. 滴滴司机调度系统实践
  19. IP-Guard桌面申请管理说明步骤
  20. 主叫用户、被叫用户、局内呼叫、局间呼叫、发话端局、受话端局 等定义

热门文章

  1. mysql实现停车场管理系统完整代码实现_JAVA实现简单停车场系统代码
  2. linux apple开发环境,Linux上构筑iPhone OS3.1.2开发环境 实例操作
  3. Java实现屏幕截屏
  4. 虚拟机无法ping通物理机解决方案
  5. 如果你认为高端红酒与普通红酒成份是一样的话,我也可以告诉你...
  6. hdu 2665 Kth number(划分树模板)
  7. 自动化测试工程师_所以你想成为一名测试自动化工程师
  8. 两张人脸图像比对ocr技术
  9. 凸优化工具包CVX快速入门
  10. Windows Azure为锤子科技Smartisan T1手机提供“工匠”级云服务