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输出双引号“”,你可以试试,如果可以评论@我。


目录
相关文章
|
21天前
|
传感器 机器学习/深度学习 人工智能
智能农业机器人:自动化种植与收割
【10月更文挑战第22天】随着科技的发展,智能农业机器人正逐步改变传统农业生产方式,引领农业走向自动化、智能化和高效化的新时代。本文将探讨智能农业机器人在精准种植、智能灌溉、高效收割和病虫害监测等方面的应用及其带来的变革。通过典型案例分析,展示智能农业机器人的优势与挑战,并展望其未来发展趋势。
|
3月前
|
Java Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
|
3月前
|
XML Java 测试技术
Selenium WebDriver自动化测试(基础篇):不得不掌握的Java基础
关于Selenium WebDriver自动化测试的Java基础篇,涵盖了Java的变量、数据类型、字符串操作、运算符、流程控制、面向对象编程、关键字用法、权限修饰符、异常处理和IO流等基础知识点,为进行自动化测试提供了必要的Java语言基础。
95 1
|
3月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
50 1
|
3月前
|
运维 Java API
探索Java中的Lambda表达式自动化运维的魔法:如何利用Python脚本提升效率
【8月更文挑战第29天】Lambda表达式是Java 8中引入的一个新特性,它允许我们将功能作为方法参数,或者代码作为数据来处理。在这篇文章中,我们将深入探讨Java中的Lambda表达式,包括它的语法、使用场景以及如何在实际编程中应用它。我们将通过一些简单的示例来演示Lambda表达式的强大功能和灵活性,让你更好地理解和掌握这一新特性。
|
3月前
|
数据采集 SQL 前端开发
Java SpringBoot自动化网页爬虫项目
这是一个基于Java Spring Boot的自动化网页爬虫平台,采用图形化界面定义爬虫流程,无需编写代码。该平台高度灵活且可配置,支持Xpath、JsonPath、CSS选择器及正则表达式等多种提取方式,兼容JSON、XML和二进制格式,并支持通过代理服务器访问。它还具备自动管理Cookie、保存数据至数据库或文件、自定义函数和SQL脚本等功能,同时集成了任务监控和日志记录系统。此外,平台支持HTTP接口调用和动态网页抓取,可通过Selenium模拟真实浏览器行为。用户可通过直观的操作界面轻松完成复杂的数据抓取任务。
|
4月前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
100 2
|
3月前
|
jenkins Java 持续交付
自动化魔法:用Jenkins打造Java项目的持续部署流水线
【8月更文挑战第13天】在软件开发中,自动化部署是提高效率与减少错误的关键。Jenkins作为一款强大的持续集成工具,支持Java项目的自动化构建、测试与部署。通过配置Jenkins及其丰富的插件生态(如Git和Maven插件),可实现从代码提交到上线的全自动化流程。此流程包括从GitHub自动拉取代码、使用Maven构建项目,并通过如`mvn clean install`命令执行构建,最后利用插件如“Publish Over SSH”将制品部署至远程服务器。此外,还可配置邮件通知等后处理动作确保发布的稳定可靠。借助Jenkins,开发者能显著加速软件交付周期,同时减少手动操作带来的风险。
127 0
|
4月前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
292 5
|
4月前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
89 3