Java隐藏技-自动化机器人

简介: Java隐藏技-自动化机器人

简介


Robot类用于模拟鼠标、键盘事件,生成本机系统输入事件。


Robot 的主要用于自动化、自运行的程序和其他需要自动控制鼠标和键盘的程序

相当于实际操作的效果,不仅仅只是生成对应的鼠标、键盘事件。 比如Robot.mouseMove() 将实际移动鼠标光标,而不是只生成鼠标移动事件。


实现的是本机的全局模拟,不仅仅局限于写的程序和IDE


常用方法


image.png


小栗子


1、自动编码


了解了常用方法后,就能够快速想到用这些方法实现自动写代码功能

下面简单模拟实现控制台打印


  • 调用IDEA输出快捷键sout
  • 回车后实现完整输出System.out.println();
  • 在输出位置写入2-1


public static void main(String[] args) throws AWTException {
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_S);
    robot.keyRelease(KeyEvent.VK_S);
    robot.keyPress(KeyEvent.VK_O);
    robot.keyRelease(KeyEvent.VK_O);
    robot.keyPress(KeyEvent.VK_U);
    robot.keyRelease(KeyEvent.VK_U);
    robot.delay(100);
    robot.keyPress(KeyEvent.VK_T);
    robot.keyRelease(KeyEvent.VK_T);
    robot.delay(500);
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);
    robot.delay(500);
    robot.keyPress(KeyEvent.VK_2);
    robot.keyRelease(KeyEvent.VK_2);
    robot.delay(500);
    robot.keyPress(KeyEvent.VK_MINUS);
    robot.keyRelease(KeyEvent.VK_MINUS);
    robot.delay(500);
    robot.keyPress(KeyEvent.VK_1);
    robot.keyRelease(KeyEvent.VK_1);
}

最终效果:

image.png


2、画图


其实画图也就是用画图中的工具,然后模拟鼠标拖拽动作,主要分为如下几步


  • 打开画图软件
  • 选中椭圆
  • 运行程序
public static void main(String[] args) throws AWTException {
    Robot robot = new Robot(); 
    robot.delay(5000);//等待5秒 5秒后必须打开画图板选中椭圆才可正常运行
   //第一个圆
    int i = 10;
    while (i-- > 0) {
        robot.mouseMove(400, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(650, 550);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(1000);       //画完一个圆停止0.2s,否则因为计算机执行速度太快,看不到动态作图的过程
    //第二个圆
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(0, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK); //画完一个圆后在圆外面点一下鼠标,否则回拖动画的圆到下一个位置
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(600, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);       //这里延迟0.1s,可以看到动态画的过程
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(850, 550);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(1000);       //画完一个圆停止0.2s,否则因为计算机执行速度太快,看不到动态作图的过程
    //第三个圆
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(0, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK); //画完一个圆后在圆外面点一下鼠标,否则回拖动画的圆到下一个位置
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(800, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);       //这里延迟0.2s,可以看到动态画的过程
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(1050, 550);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(200);       //画完一个圆停止0.1s,否则因为计算机执行速度太快,看不到动态作图的过程
    //第四个圆
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(0, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK); //画完一个圆后在圆外面点一下鼠标,否则回拖动画的圆到下一个位置
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(500, 425);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);       //这里延迟0.1s,可以看到动态画的过程
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(750, 675);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(200);       //画完一个圆停止0.2s,否则因为计算机执行速度太快,看不到动态作图的过程
    //第五个圆
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(0, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK); //画完一个圆后在圆外面点一下鼠标,否则回拖动画的圆到下一个位置
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(700, 425);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);       //这里延迟0.1s,可以看到动态画的过程
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(950, 675);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(200);       //画完一个圆停止0.2s,否则因为计算机执行速度太快,看不到动态作图的过程
}

最终效果:

image.png


小结


Java中Robot类不是很常用,却是很有用的一个类,能实现一些很有意思的功能,看了上面栗子你可能会问为什么不模拟输出"Hello word"呢,这是因为我不会用KeyEvent输出双引号“”,你可以试试,如果可以评论@我。


目录
相关文章
|
6天前
|
jenkins Java 持续交付
自动化魔法:用Jenkins打造Java项目的持续部署流水线
【8月更文挑战第13天】在软件开发中,自动化部署是提高效率与减少错误的关键。Jenkins作为一款强大的持续集成工具,支持Java项目的自动化构建、测试与部署。通过配置Jenkins及其丰富的插件生态(如Git和Maven插件),可实现从代码提交到上线的全自动化流程。此流程包括从GitHub自动拉取代码、使用Maven构建项目,并通过如`mvn clean install`命令执行构建,最后利用插件如“Publish Over SSH”将制品部署至远程服务器。此外,还可配置邮件通知等后处理动作确保发布的稳定可靠。借助Jenkins,开发者能显著加速软件交付周期,同时减少手动操作带来的风险。
22 0
|
1月前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
44 2
|
1月前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
47 3
|
1月前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
134 5
|
1月前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
43 6
|
1月前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
27 2
|
1月前
|
XML Java 测试技术
《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)
【7月更文挑战第9天】在Java项目中,使用Logback配置可以实现日志按照不同包名输出到不同的文件,并且根据日志级别分开记录。
55 4
|
1月前
|
XML Java 测试技术
《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)
【7月更文挑战第8天】这篇教程介绍了如何使用Logback将Java应用的日志输出到文件中。首先,通过创建`logback.xml`配置文件,设置`FileAppender`来指定日志文件路径和格式。然后,提供了一个`RollingFileAppender`的例子,用于每日生成新的日志文件并保留一定天数的历史记录。文中包含配置文件的XML代码示例,并展示了控制台输出和生成的日志文件内容。教程最后提到了一些可能遇到的问题及解决建议。
24 0
《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)
|
1月前
|
Java 关系型数据库 测试技术
《手把手教你》系列基础篇(八十九)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-上篇(详解教程)
【7月更文挑战第7天】Apache Log4j2的安全漏洞促使考虑使用logback作为替代的日志框架。Logback由log4j创始人设计,提供更好的性能,更低的内存使用,并且能够自动重载配置文件。它分为logback-core、logback-classic(实现了SLF4J API)和logback-access(用于Servlet容器集成)三个模块。配置涉及Logger、Appender(定义日志输出目的地)和Layout(格式化日志)。
40 1
|
1月前
|
运维 监控 容灾
实现Java应用的高可用与自动化运维
实现Java应用的高可用与自动化运维