Mac环境下用Java(Sikuli+Robot)实现页游自动化

jopen 4年前

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.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是根据图形元素来实现自动化的,所以一定要确保这些图形元素的样式是可以找到的,背景颜色的变化等因素都会影响到自动化能否顺利进行下去。

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