日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sikuli+Selenium查询百度地图线路

發布時間:2024/3/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sikuli+Selenium查询百度地图线路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹:最近要做一個內嵌百度地圖頁面的自動化,由于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對圖片識別是針對電腦當前頁面的,只有屏幕有對應的圖片,才可能被定位到。

總結

優點:

  • Sikuli可以操作地圖、flash、視頻等,只要是屏幕上出現的圖片都可以,在一些selenium定位不到的地方使用Sikuli會有很好的效果
  • 桌面的圖片也可以定位到,如果有上傳文件的操作就可以Sikuli定位
  • 缺點:

  • 對圖片要求比較高,不能有遮擋,分辨率、色差可能也有影響
  • 使用過多的圖片導致項目太大
  • 總結

    以上是生活随笔為你收集整理的Sikuli+Selenium查询百度地图线路的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。