轉載請注明出自天外歸雲的博客園:http://www.cnblogs.com/LanTianYou/
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類。至於准備工作,我們事先需要把Skulix文件夾下的SikulixApi的jar包復制粘貼到當前項目的lib文件夾下(沒有的話就創建一個),然后項目上點右鍵->build configuration一下,把復制粘貼的這些jar包文件都導進來。之后就可以在項目中import相關的庫了。
下面拿傳奇霸業這款游戲做例子,實現自動打副本的這樣一個輔助。首先用一個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;
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.360.cn/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是根據圖形元素來實現自動化的,所以一定要確保這些圖形元素的樣式是可以找到的,背景顏色的變化等因素都會影響到自動化能否順利進行下去。