htmlunit执行网页输出结果的问题
(一)环境:
1.网页:http://www.example.com/line.html (网站有调用外部js,页面中也有部分js脚本改变网页实际的输出,脚本执行后,页面中body部分只保留一串文本)
2.HtmlUnit
3.Java开发环境
(二)需实现的功能
java通过htmlUnit,获取http://www.example.com/line.html的实际输出(不是源码)。
(三)例子
line.html
<!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</title> </head> <body> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="height:400px"></div> <!-- ECharts单文件引入 --> <script src="http://echarts.baidu.com/build/dist/echarts.js"></script> <script type="text/javascript"> var myChart; // 路径配置 require.config({ paths: { echarts: 'http://echarts.baidu.com/build/dist' } }); // 使用 require( [ 'echarts', 'echarts/chart/bar', // 使用柱状图就加载bar模块,按需加载 'echarts/chart/line' ], function (ec) { // 基于准备好的dom,初始化echarts图表 myChart = ec.init(document.getElementById('main')); myChart.setTheme("macarons"); var option = { title : { text: '某楼盘销售情况', subtext: '纯属虚构' }, tooltip : { trigger: 'axis' }, legend: { data:['意向','预购','成交'] }, toolbox: { show : true, feature : { mark : {show: true}, dataView : {show: true, readOnly: false}, magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']}, restore : {show: true}, saveAsImage : {show: true} } }, calculable : true, xAxis : [ { type : 'category', boundaryGap : false, data : ['周一','周二','周三','周四','周五','周六','周日'] } ], yAxis : [ { type : 'value' } ], animation : false, series : [ { name:'成交', type:'line', smooth:true, itemStyle: {normal: {areaStyle: {type: 'default'}}}, data:[10, 12, 21, 54, 260, 830, 710] }, { name:'预购', type:'line', smooth:true, itemStyle: {normal: {areaStyle: {type: 'default'}}}, data:[30, 182, 434, 791, 390, 30, 10] }, { name:'意向', type:'line', smooth:true, itemStyle: {normal: {areaStyle: {type: 'default'}}}, data:[1320, 1132, 601, 234, 120, 90, 20] } ] }; // 为echarts对象加载数据 myChart.setOption(option); var imgUrl = myChart.getDataURL(); var obj = document.getElementsByTagName("body"); obj[0].innerHTML = imgUrl.substring(22); //console.log(obj); } ); </script> </body>
iVBORw0KGgoAAAANSUhEUgAABPAAAAGQCAYAAAAgD57……后面省略
WebClient wc = new WebClient(BrowserVersion.CHROME); wc.getOptions().setJavaScriptEnabled(true); // 启用JS解释器,默认为true //wc.getOptions().setCssEnabled(false);// 禁用css支持 wc.getOptions().setThrowExceptionOnScriptError(false);// js运行错误时,是否抛出异常 wc.getOptions().setTimeout(10000); // 设置连接超时时间,这里是10S。如果为0,则无限期等待 HtmlPage page = wc.getPage("http://localhost:8080/line.html"); System.out.println(page.getBody().getTextContent());
有什么方法,或者第三方插件能达到我想要的效果?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请问问题解决了嘛,我也遇到了同样的问题
请问楼主你这个问题解决了吗,我也遇到同样的问题了。
我是需要在后台不通过浏览器获取echarts的图片,phantomjs在一部分系统下能解决这个问题,但是在有些操作系统不适用。
我于是想在页面上用echarts的getDataUrl()方法生成base64码,然后用htmlunit解析出来,结果发现htmlunit解析的base64码并不正确,与正常浏览器解析的不一样。