无头浏览器使用

业务场景,

有一个报告的预览页面,这个页面中含有echarts图表,点击下载报告之后,调用echarts的getDataURL()方法将图片数据传到后台,在后台生成word或者pdf。现在需要定期生成报告,然后将报告通过邮件发送给指定邮箱。

思路:模拟去访问页面的url,等页面渲染结束之后,模拟点击下载按钮,等待文件在后台生成完毕,最后发送邮件。

1.纯java的编写的浏览器jBrowserDriver和htmlunit,访问页面时结果都不理想,echarts图不能完成很好的渲染,最终只能放弃。

2.使用无头浏览器

2.1首先想到的是之前用过的phantomjs,因为之前做截图的时候使用过。

刚开始使用的phantomjs-2.1.1这个版本,但是无论在windows下还是在linux下,都出现同样的问题,传到后台的图片数据有问题,但是截图显示出来页面渲染的没有问题,下面是两种情况下后台接收到的数据,可以发现错误的数据中多了很多A,拷数据到img标签中发现,图片出现大片的空白

(正常数据)

(错误数据)

(图片数据,上半部分为传到后台的正常数据的显示,下半部分为错误数据的显示)

改过很多次代码,这种问题的原因还是没有找到。

最后选择用高版本的phantomjs试试,找到了phantomjs-2.5.0-beta-windows这个版本,同样的代码,这个版本的phantomjs传到后台的数据就是正确的,windows下测试通过,准备移到linux下运行时发现,phantomjs的作者早就不更新了,目前已知最稳定的版本是2.1.1。2.5.0-beta在linux下只有phantomjs-2.5.0-beta-linux-ubuntu-trusty-x86_64.tar.gz和phantomjs-2.5.0-beta-linux-ubuntu-xenial-x86_64.tar.gz这两个版本,在centos下都无法使用。所以这种方法也只能放弃了。

2.1使用selenium去调用chrome或firfox去实现

selenium去调用这两个浏览器时都需要对应的驱动

chrome需要ChromeDriver,firefox需要geckodriver,而且浏览器和驱动需要版本对应。

驱动可以去https://npm.taobao.org/mirrors/chromedriver/和https://npm.taobao.org/mirrors/geckodriver/下载

这两种在windows下都测试成功了,然后转移到linux下运行,需要下载chrome和firefox,但是服务器是内网,装chrome时又出现很多依赖包无法下载,chrome安装失败。但是centos7以上自带firefox的,使用firefox -version检查一下,确实已经有了,然后测试代码,通过。下面是简单的代码demo。

System.setProperty("webdriver.gecko.driver", "F:\\firefox\\geckodriver.exe");

FirefoxOptions firefoxOptions = new FirefoxOptions();

//指定浏览器全屏

firefoxOptions.addArguments("--start-fullscreen");

firefoxOptions.addArguments("--headless");

//创建firefox

WebDriver driver = new FirefoxDriver(firefoxOptions);

driver.get(url2);

//等待页面完成渲染

Thread.sleep(5*1000);

//模拟点击登陆

driver.findElement(By.xpath("//*[@id=\"create-report\"]")).click();

//退出浏览器

driver.quit();

3.送带附件的邮件。

这里出现的问题是,windox下使用网易的163的邮件服务器,发送带附件的邮件,发送成功,放在内网服务器上,虽然也能发送成功,但是接收方无法打开邮件。

查看本机测试发送的邮件发现,代码中邮件设置了正文,但是收到的邮件中并没有,可能是这个问题导致的。首先考虑为什么设置了正文但是邮件中不显示呢?

代码中这部分在设置附件part的同时设置了正文内容,所以在接收方的邮件中没有显示正文

添加第二个part用来显示正文,这样在邮件中就可以显示正文了。移到内网服务器测试通过。

java后台生成含有echarts图表的报告并发送邮件相关推荐

  1. java后台生成echarts图表

    java后台生成echarts图表 最近博主在做一个项目,需要后台出图和前端echarts一样的图,比如折线图和柱状图. 经过一番整理,顺利实现了该功能,特此分享,需要白嫖的,拿走不谢. 直接上效果图 ...

  2. java Servlet mysql json ECharts图表生成实战-罗绍岗-专题视频课程

    java Servlet mysql json ECharts图表生成实战-2561人已学习 课程介绍         java WEB程序图表生成柱状图表.折线图表,echarts 动态获取Mysq ...

  3. Java后台生成图表——主代码(折线图,饼状图,柱状图,-》并产出图片PDF或其他格式的图片内容)

    声明: 本文采用的数据均来源于网络,本人只用于学习记录,若有侵权,还望能及时联系. Maven 的 POM 依赖 <!--必要--><!--用于jfreechart生成图片 --&g ...

  4. vue-cli ——解决多次复用含有Echarts图表组件的问题

    vue-cli --解决多次复用含有Echarts图表组件的问题 参考文章: (1)vue-cli --解决多次复用含有Echarts图表组件的问题 (2)https://www.cnblogs.co ...

  5. ajax动态获取后台数据绘制echarts图表

    Echarts是一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻 ...

  6. java后台生成并下载二维码

    java后台生成并下载二维码(以二进制流的形式输出) 前提业务要求:前台页面展示数据,有下载按钮,点击下载,下载对应数据的二维码. 在pom.xml文件中添加依赖 <dependency> ...

  7. java后台生成的Excel文件并通过浏览器下载

    java后台生成Excel文件需要引入poi, 以下是poi的pom可以引入自己的项目里面去 <dependency><groupId>org.apache.poi</g ...

  8. Java后台生成Excel表格

    Java后台生成Excel表格 功能简述 需求 目标 实现 1.首先在项目中导入jxl相关jar包,并引入 2.编写代码 3.结果 后记 功能简述 由于公司业务需求,我需要实现一个完全通过Java后台 ...

  9. 【生成PDF】Java如何根据前台Echarts图表生成PDF,并下载

    文章目录 前言 一.如何通过java代码生成PDF? 1.依赖 二.如何在PDF中画前台的echarts图? 1.如何拿到前台echarts图的信息? 前台代码: 后台逻辑:生成PDF,并下载 PDF ...

最新文章

  1. TCGAbiolinks包下载TCGA数据
  2. Nginx 服务优化与防盗链
  3. 一条消息未发,粉丝已破千万
  4. 13亿美元的思想实验
  5. js排序的时间复杂度_冒泡排序最好时间复杂度为什么是O
  6. react把表格渲染好ui_react 入坑笔记(五) - 条件渲染和列表渲染
  7. MicroNets:更小更快更好的MicroNet,三大CV任务都秒杀MobileNetV3
  8. 在centos上完全删除mysql
  9. php获取并删除数组的第一个和最后一个元素
  10. 后缀表达式/逆波兰表达式
  11. 架构师接龙 飞信孙朝晖VS.139说客李祎
  12. 给element添加自定义图标
  13. Jupyter Notebook又一懒人神器,拖拽生成Python代码!
  14. 博弈论——重复博弈和制度建设
  15. PS 2019 Mac版 自学入门系列(七)—— 调亮深色区域
  16. odoo13-14电商插件
  17. STM32G0 按照8位16位的方式写入flash HAL库
  18. Rosalind全排列的问题
  19. python 面试题
  20. python爬虫实践报告_Python 爬虫实践:浅谈数据分析岗位

热门文章

  1. [Matlab科学计算] 频谱分析和FFT算法总结
  2. Android 移动安全知识技术全解(加固技术、常规漏洞、Android 逆向......),移动安全问题不容忽视
  3. 十进制转换为十六进制(转载过来的)
  4. 两种Random函数的使用
  5. Discuz对不起,您安装的不是正版应用的解决办法
  6. influxdb内存过大和占用过多端口
  7. 华为mysql面试题_华为JAVA开发工程师面试经验
  8. FAST2022 DEPART: Replica Decoupling for Distributed Key-Value Storage Qiang(翻译分析)
  9. oracle万能分页代码,Oracle万能分页法的存储过程
  10. 电池充电放电试验标准介绍