Sikulix選取相對位置的圖片或對象

轉載:https://www.cnblogs.com/goldenRazor/p/4884499.html

Sikulix選取相對位置的圖片或對象

一般來說有這樣的需求,我已經有了一個圖片元素,在這個元素的周圍會有一個動態顯示的對象,我要去做一個點擊或者是hover又或者是單純把這個對象圖片save到本地,留做下個頁面點擊的對象,在這種情況下就可以用到sikuli來解決。

這裏我還是依照baidu首頁做個例子,可能不是很典型,但是做例子是沒問題的。

我先點擊換膚按鈕,然後在已知換膚圖片的情況下,點取其他方位的圖片,並save到本地留住成爲下次腳本點擊的對象。

1. 首先建立一個region對象,這個region是一個方形區域,我先默認成分辨率大小

Region r = new Region(0,0,1023,767);

2. 點擊皮膚按鈕

r.click("img/ChangeSK.png");

3. 這個我有一個皮膚的圖片是在所有皮膚圖片的中央

r.exists("img/SK1.png");

運行下,結果還是沒問題的:

[debug] Region: exists: img/SK1.png has appeared

4. 把這個圖片找到並作爲一個Match對象,highlight並打印相似度,同時打印出width和height

Match SK1 = r.find("img/SK1.png");
System.out.println(baidu.getScore());
SK1.highlight();
System.out.println(SK1.h); 
System.out.println(SK1.w);

結果0.9999843239784241, 說明已經找到

5. 新建一個Location對象,來存放此對象在region中的座標

Location Loc1 = SK1.getTarget();

注意描述一個圖片就有四維,start x,start y,width,height.  這裏的location是指的x+height/2, y+width/2, 也就是中心位置

這裏我們需要一個工具來獲取屏幕上的座標,這樣在手動測試的時候就能精準獲取圖片的相對位置,網上這樣的工具很多,搜下就有了

6. 獲取到Location之後,我就需要知道在這個SK1對象的上方的一個同樣大小的圖片,這裏如何做呢:

Location Loc2 = Loc1.above(60);

通過工具得知上方圖片的位置大概要高出60pix,所以新建一個location對象

7.因爲我們已經知道上方圖片的width和height,所以現在就需要新建一個Match對象就行了

Match SK2 = new Match(SK1);
SK2.setLocation(Loc2);//這樣的做法是錯誤的,因爲這裏setLocation不是中心軸了,而是set成起始座標了,應該這樣:

SK2.y = SK2.y-60;

8,打印下相似度看是否找到

SK2.highlight();
System.out.println(SK2.getScore());

得分是1,沒問題

9,把這個圖片save到本地路徑下

SK2.saveScreenCapture("img", "SK2");

SK2-1444961093063.png 保存名後面的應該是timestream,應該是避免覆蓋,改下sikuli jar包裏的源代碼重新編譯下就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章