java利用phantomjs进行截图实例教程

  

  

最近工作中遇到一个需求,需要实现截图功能,断断续续查找资料,验证不同的实现方法终于算基本搞定了页面截的图,因为中间过程曲折花费较多时间,分享出来帮助大家快速实现截图

  


  

  

截图可以实现的方式有很多,比如:

  
      <李> 硒   <李> HtmlUnit李   <李> Html2Image,,,所以>   酿造安装phantomjs      


      

      

    安装以后我们就可以小试牛刀了

      

    打开终端,输入以下命令:

         /用户/hetiantian/软件/phantomjs/bin/phantomjs/用户/hetiantian/软件/phantomjs//rasterize.js例子   https://juejin.im/post/5bb24bafe51d450e4437fd96/用户/hetiantian/桌面/juejin-command.png      

    查看效果

      

    癹ava利用phantomjs进行截图实例教程"

      

    发现图片没有加载好

      

    来看以下刚刚的命令行:
      

      
      

    /用户/hetiantian/软件/phantomjs/bin/phantomjs: phantomjs可执行文件保存地址
    /用户/hetiantian/软件/phantomjs/例子/rasterize.js:栅格化。js文件地址
      

         

    这段命令可以理解为用phantomjs去运行rasterize.js文件,所以要想解决图片空白的问题我们需要去看一下栅格化。js文件。
      

            “使用严格的”;   var页面=要求(网页)共创(),   系统=需要(“系统”),   地址、输出大小、pageWidth pageHeight;      如果(system.args。长度& lt;3 | | system.args。长度比;5){   控制台。日志(“用法:栅格化。js URL文件名(paperwidth * paperheight | paperformat](变焦)');   控制台。日志(“论文(pdf输出)例子:“5 * 7.5”,“10厘米* 20厘米”,“A4”,“信”);   控制台。日志(的形象(png/jpg输出)例子:“1920 px”整个页面,窗口宽度1920 px);   控制台。日志(“800 px * 600 px”窗口,剪800 x600的);   phantom.exit (1);   其他}{   地址=system.args [1];   输出=system.args [2];   页面。viewportSize={宽度:600,身高:600};   如果(system.args。长度比;3,,system.args [2] .substr (4)===. pdf) {   大?system.args [3] .split (“*”);   页面。paperSize=大小。长度===2 & # 63;[0]{宽度:大小,高度:大小[1],保证金:“0 px”}   :{格式:系统。args[3],取向:“肖像”,保证金:' 1厘米'};   如果(system.args}其他。长度比;3,,system.args [3] .substr (2)===皃x”) {   大?system.args [3] .split (“*”);   如果(大小。长度===2){   pageWidth=方法(大小[0],10);   pageHeight=方法(大小[1],10);   页面。viewportSize={宽度:pageWidth高度:pageHeight};   页面。clipRect={: 0,左:0,宽度:pageWidth,高度:pageHeight};   其他}{   控制台。日志(“大小:system.args [3]);   pageWidth=方法(系统。args [3], 10);   pageHeight=方法(pageWidth * 3/4, 10);//这是一样好的一个假设   控制台。日志(“pageHeight:“pageHeight);   页面。viewportSize={宽度:pageWidth高度:pageHeight};   }   }   如果(system.args。长度比;4){   页面。zoomFactor=system.args [4];   }   页面。开放(地址,函数(地位){   如果(地位!=='成功'){   控制台。日志(“无法加载地址!”);   phantom.exit (1);   其他}{   窗口。setTimeout(函数(){   page.render(输出);   phantom.exit ();   },200);   }   });   }      

    尝试一:
      

      

    对页面。viewportSize={宽度:600,身高:600};产生了疑问& # 129300;& # 65039;
      

      

    把高度调大十倍,发现基本是完美截图了,但是如果页面的篇幅特别短,会发现有瑕疵、下面留有一大片空白。原因:页面。viewportSize={宽度:600,身高:600};设置的是初始打开浏览器的大小,通过增大这个值可以加载js。如果我们能拿到实际页面的大小在设置高度大小,但是不,我不能。

      

    并且不能接受预先设定一个很大的高度值,比如30000年,因为不能接受底下留白的效果
      

      

    尝试二:
      

      

    在窗口。setTimeout方法之前加入以下代码
      

            page.evaluate(函数(){   scrollBy (0, 18000);   });      

    无奈评估里不能在用的循环了,前端渣渣真的不知道如何改,遂放弃
      

      

      

    需要的依赖

            & lt; dependency>   & lt; groupId> org.seleniumhq.selenium

    java利用phantomjs进行截图实例教程