当前位置:首页 > 后端开发 > Spring Boot项目——项目定时实现自动截图发送

Spring Boot项目——项目定时实现自动截图发送

6个月前 (05-20)18

需求

  • Spring Boot项目,需要在每天下午4点定时截取软件系统中的一个图表页面,发送到领导邮箱

关注点

  • 下午4点定时发送
  • 自动截图
  • 浏览器不会一直打开,需要模拟浏览器打开截图页面
  • 发送邮箱

技术栈

  • Spring 定时任务
    • Spring Scheduled
  • Chrome Driver下载
    • https://chromedriver.chromium.org/downloads
  • 运行环境安装Chrome
    • 注意:安装Chrome一定要与系统使用的Chrome Driver版本一致
  • 自动截图
    • 使用git开源项目ashot : https://github.com/pazone/ashot
  • 模拟浏览器打开系统页面
    • 打开页面url权限控制:token验证
      • 自己想办法,每个系统使用方法不一致
    • 模拟浏览器:Selenium
  • 发送邮箱
    • 邮箱工具类

实现

  • 引入依赖插件
    • ashot
<dependency>
    <groupId>ru.yandex.qatools.ashot</groupId>
    <artifactId>ashot</artifactId>
    <version>1.5.4</version>
</dependency>
    • Selenium
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.1.2</version>
</dependency>
  • 实现代码
/**
 * 每天下午4点发送日报截图到邮箱
 *
 * @throws InterruptedException
 */
@Scheduled(cron = "0 0 16 * * ?")
public void sendChartScreen() throws InterruptedException {

    logger.info("sendChartScreen is start 🎂🎂🎂🎂🎂:{}", new Date());

    String chromeDriver = "Chrome Driver驱动文件存放位置";
    String chromePageUrl = "系统打开页面url";
    String url= = "邮箱地址";
    logger.info("chromeDriver={}", chromeDriver);

    System.setProperty("webdriver.chrome.driver", chromeDriver);

    ChromeOptions chromeOptions = new ChromeOptions();
    
    chromeOptions.addArguments("--headless");//设置为 headless 模式 (必须)
    chromeOptions.addArguments("--disable-gpu");//谷歌文档提到需要加上这个属性来规避bug
    chromeOptions.addArguments("--no-sandbox");//参数是让Chrome在root权限下跑
    chromeOptions.addArguments("--disable-dev-shm-usage");
    chromeOptions.addArguments("lang=zh_CN.UTF-8");//中文
    chromeOptions.addArguments("window-size=1920x1080"); //指定浏览器分辨率

    final WebDriver driver = new ChromeDriver(chromeOptions);
    driver.manage().window().maximize();
    driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
    driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get(chromePageUrl);
    
    //设置等待时间:系统页面响应数据需要时间,此处必须设置否则页面无响应数据
    Thread.sleep(5000);

    //截图
    BufferedImage bi = new AShot()
            .shootingStrategy(ShootingStrategies.viewportPasting(100))
            .takeScreenshot(driver).getImage();

    try {
        //创建临时图片文件
        File file = File.createTempFile("dayweek", ".png");
        ImageIO.write(bi, "png", file);
        //发送到邮箱(自己实现,下面代码是我的工具类)
        EmailMessageImpl.sendImage(file, url);
    } catch (Exception e) {
        logger.error("定时发送矿场日报图表失败", e);
    }
   
   //一次截图后要退出,否则后续使用会报错 driver.quit(); logger.info(
"sendChartScreen is end 🎂🎂🎂🎂🎂:{}", new Date()); }

 

作者:话·醉月
来源链接:https://www.cnblogs.com/zuiyue_jing/p/16036073.html

“Spring Boot项目——项目定时实现自动截图发送” 的相关文章

安装完Python之后,如何设置Python环境变量

人生苦短,我用Python。最近有许多加群的萌新在咨询Python安装的事宜,Python安装问题不大,可以戳这篇文章:。本以为安装Python之后就可以万事大吉,...

MAC安装Mysql超详细完整教程(图文并茂)

MAC安装Mysql超详细完整教程(图文并茂)

** 安装 ** 登录MySQL网站 用dmg的方式安装。Download MySQL Community Server 或者常规...

Linux下Nginx配置文件nginx.conf默认位置修改

nginx默认配置 安装时 nginx.conf所在位置为:/usr/local/nginx/conf/nginx.conf 本人需要将其移动...

Docker学习总结之Run命令介绍

   Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢!...

Java8 List对象中 BigDecimal类型求和

        List集合中的某个对象值是BigDecimal类型的,且需要对所有对象中相同...

eclipse反编译插件

eclipse反编译插件

在网上看到的一个不错的eclipse反编译插件,感觉看起来不错的样子,因而记下,原网址是: http://www.blogjava.net/DLevin/archive...

nginx配置后只能访问首页,其他页面404

添加如下代码到vhosts-conf 文件中server 下 location / {     try_file...

jieba 分词

jieba 分词

import jieba txt = open("D:\\西游记.txt", "r", encoding='utf-8').read() words = jieba.lcu...

Java中判断集合是否相等

        工作中经常会遇到这样一个需要:写一个定时任务每隔5s监听一个接口所发送的数据并存储转发。只需要一个全局变量和一个局部变...

深入理解Java反射

深入理解Java反射

  要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射...