Mac環境下用Java(Sikuli+Robot)實現頁游自動化

jopen 8年前發布 | 22K 次閱讀 Java MacOS Java開發

Sikulix(Sikuli)在Mac電腦的環境配置步驟如下:

1、 從官網上下載Sikulix最新版本(目前為1.1.0)-> 下載地址 ->下載sikulixsetup-1.1.0.jar (md5);

2、 在桌面新創建一個文件夾,命名為Sikulix;

3、 把下載的sikulixsetup-1.1.0.jar文件放在Sikulix文件夾下,雙擊打開;

4、 選擇你要安裝的,我選擇了前兩項:

5、 點擊“Setup Now”進行自動安裝;

6*、 如果過程中出現下載失敗的提示,是因為電腦的安全設置造成的。需要手動下載這些提示下載失敗的文件(點擊進入 下載頁面 )。

7*、 手動下載完成后,將下載的文件全都轉移到桌面的Sikulix文件夾內,然后重新打開sikulixsetup-1.1.0.jar文件進行安裝,隨提示一路“Yes”即可。

環境配置至此已經基本完成,下面就可以在Sikulix文件夾中雙擊打開Sikulix IDE進行使用了:

下面我用傳奇霸業這款游戲做一下示范,點到為止(打開網頁,然后選擇左側欄中的鼠標動作,對需要點擊的網頁元素進行按序截圖):

點擊運行,就可以在瀏覽器中看到我們錄制的操作自動運行了。

這就是Sikulix的威力,通過識別圖像的方式來實現自動化。詳細的介紹和文檔,可以看看 官方的教程

Sikulix還可以通過Java進行編程,下面我來介紹一下JAVA環境的配置(在安裝好JDK之后):

1、查找JAVA_HOME的路徑:which java->/usr/bin/java->cd /usr/bin->ls -l|grep java->cd /System/Library/Frameworks/JavaVM.framework/Versions/Curr(tab)->CurrentJDK->ls->cd Home->pwd->這就是JAVA_HOME路徑;

2、配置JAVA_HOME的路徑: vi ~/.bash_profile->i->配置JAVA_HOME路徑到配置文件即完成了配置。

至此,Java的環境就配好了。打開Eclipse,新建項目,如果遇到了Java.lang.Object空引用錯誤:

1*、 修改Eclipse Preference設置->Compiler的java版本號,使和你安裝的Java版本一致(我這里裝的是1.6,所以Compiler選擇1.6);

2*、 修改Eclipse Preference設置->Installed JREs->Add->Standard VM->JRE Home->填寫JAVA_HOME路徑;

3*、 重啟Eclipse;

4、新建項目,之后就可以按照Sikulix api進行編程了,這里為了更好實現網頁flash的自動化,還用到java自己的Robot類。拿傳奇霸業這款游戲做例子,實現自動打副本的這樣一個輔助。首先 用一個UserInfo類來封裝用戶名和密碼:

import java.util.Set;

public class UserInfo {
    String userName;
    String passWord;

    public UserInfo() {
        this.userName = "用戶名";
        this.passWord = "密碼";
    }
}

用Sikulix實現自動化的過程要注意圖片元素的截取,不要用QQ截圖之類的工具,要用Sikulix IDE來截圖,然后把截圖轉移到專門的目錄下:

之后在程序中就可以讓Sikuli通過這些圖片對應的路徑來識別圖片,并在網頁上找到對應的圖形元素,實現自動化點擊等操作了:

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import org.sikuli.script.*;
import com.opera.core.systems.internal.input.KeyEvent;
import com.thoughtworks.selenium.Selenium;

public class Test {
    public static void main(String[] args) throws FindFailed,
            InterruptedException, IOException, AWTException {
        Screen screen = new Screen();
        String imgPath = "/Users/tylan/Desktop/SikuliPics/test";
        String chromeImg = imgPath + "/chrome.png";
        String newTabImg = imgPath + "/newTab.png";
        String startImg = imgPath + "/start.png";
        String loginImg = imgPath + "/login.png";
        String fubenImg = imgPath + "/fuben.png";
        String bloodImg = imgPath + "/blood.png";
        String backHomeImg = imgPath + "/backHome.png";
        String zumaReadyImg = imgPath + "/zumaReady.png";
        String jinruFubenImg = imgPath + "/jinruFuben.png";
        //Visit the CQ site.
        screen.wait(chromeImg).click();
        screen.wait(newTabImg).click();
        screen.type("http://cqby.wan.#/game_login.php?server_id=S577&&src=loginhistory");
        Robot robot = new Robot();
        robot.keyPress(java.awt.event.KeyEvent.VK_ENTER);
        //Login the game.
        screen.wait(startImg, 10).click();
        Thread.sleep(1000);
        UserInfo uInfo = new UserInfo();
        screen.type(uInfo.passWord);
        Thread.sleep(2000);
        screen.wait(loginImg).click();
        //Navigate to the fuben.
        screen.wait(bloodImg, 10);
        screen.wait(backHomeImg, 3).click();
        Thread.sleep(1000);
        screen.wait(fubenImg, 5).click();
        screen.wait(zumaReadyImg, 2).click();
        screen.wait(jinruFubenImg, 1).click();
        Thread.sleep(3000);
        robot.keyPress(java.awt.event.KeyEvent.VK_Z);    
    }
}

要控制好不同操作之間時間的間隔,控制好等待時間,才能順利的實現預期的自動化效果。Sikuli是根據圖形元素來實現自動化的,所以一定要確保這些圖形元素的樣式是可以找到的,背景顏色的變化等因素都會影響到自動化能否順利進行下去。

來自: http://www.cnblogs.com/LanTianYou/p/5074673.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!