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

无头浏览器使用

 

业务场景,

有一个报告的预览页面,这个页面中含有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用来显示正文,这样在邮件中就可以显示正文了。移到内网服务器测试通过。

 

 


版权声明:本文为baidu_26783335原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。