在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

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

2017-2-7 13:41| 发布者: zhangjf| 查看: 601| 评论: 0

摘要: Sikulix(Sikuli)在Mac电脑的环境配置步骤如下: 1、 从官网上下载Sikulix最新版本(目前为1.1.0)-> 下载地址 ->下载sikulixsetup-1.1.0.jar (md5); 2、 在桌面新创建一个文件夹,命名为Sikulix; 3、 把下载 ...
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类来封装用户名和密码:

  1. import java.util.Set;
  2. public class UserInfo {
  3. String userName;
  4. String passWord;
  5. public UserInfo() {
  6. this.userName = "用户名";
  7. this.passWord = "密码";
  8. }
  9. }
复制代码

用Sikulix实现自动化的过程要注意图片元素的截取,不要用QQ截图之类的工具,要用Sikulix IDE来截图,然后把截图转移到专门的目录下:

之后在程序中就可以让Sikuli通过这些图片对应的路径来识别图片,并在网页上找到对应的图形元素,实现自动化点击等操作了:

  1. import java.awt.AWTException;
  2. import java.awt.Robot;
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import java.util.*;
  6. import java.io.*;
  7. import org.sikuli.script.*;
  8. import com.opera.core.systems.internal.input.KeyEvent;
  9. import com.thoughtworks.selenium.Selenium;
  10. public class Test {
  11. public static void main(String[] args) throws FindFailed,
  12. InterruptedException, IOException, AWTException {
  13. Screen screen = new Screen();
  14. String imgPath = "/Users/tylan/Desktop/SikuliPics/test";
  15. String chromeImg = imgPath + "/chrome.png";
  16. String newTabImg = imgPath + "/newTab.png";
  17. String startImg = imgPath + "/start.png";
  18. String loginImg = imgPath + "/login.png";
  19. String fubenImg = imgPath + "/fuben.png";
  20. String bloodImg = imgPath + "/blood.png";
  21. String backHomeImg = imgPath + "/backHome.png";
  22. String zumaReadyImg = imgPath + "/zumaReady.png";
  23. String jinruFubenImg = imgPath + "/jinruFuben.png";
  24. //Visit the CQ site.
  25. screen.wait(chromeImg).click();
  26. screen.wait(newTabImg).click();
  27. screen.type("http://cqby.wan.360.cn/game_login.php?server_id=S577&&src=loginhistory");
  28. Robot robot = new Robot();
  29. robot.keyPress(java.awt.event.KeyEvent.VK_ENTER);
  30. //Login the game.
  31. screen.wait(startImg, 10).click();
  32. Thread.sleep(1000);
  33. UserInfo uInfo = new UserInfo();
  34. screen.type(uInfo.passWord);
  35. Thread.sleep(2000);
  36. screen.wait(loginImg).click();
  37. //Navigate to the fuben.
  38. screen.wait(bloodImg, 10);
  39. screen.wait(backHomeImg, 3).click();
  40. Thread.sleep(1000);
  41. screen.wait(fubenImg, 5).click();
  42. screen.wait(zumaReadyImg, 2).click();
  43. screen.wait(jinruFubenImg, 1).click();
  44. Thread.sleep(3000);
  45. robot.keyPress(java.awt.event.KeyEvent.VK_Z);
  46. }
  47. }
复制代码

要控制好不同操作之间时间的间隔,控制好等待时间,才能顺利的实现预期的自动化效果。Sikuli是根据图形元素来实现自动化的,所以一定要确保这些图形元素的样式是可以找到的,背景颜色的变化等因素都会影响到自动化能否顺利进行下去。

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

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-9 10:34

Copyright 2015-2025 djqfx

返回顶部