最近工作中遇到一个需求,需要实现截图功能,断断续续查找资料,验证不同的实现方法终于算基本搞定了页面截的图,因为中间过程曲折花费较多时间,分享出来帮助大家快速实现截图
截图可以实现的方式有很多,比如:
-
<李> 李>硒
<李> HtmlUnit李>
<李> Html2Image,,,所以>
酿造安装phantomjs
安装以后我们就可以小试牛刀了
打开终端,输入以下命令:
/用户/hetiantian/软件/phantomjs/bin/phantomjs/用户/hetiantian/软件/phantomjs//rasterize.js例子 https://juejin.im/post/5bb24bafe51d450e4437fd96/用户/hetiantian/桌面/juejin-command.png
查看效果
发现图片没有加载好
来看以下刚刚的命令行:
/用户/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.seleniumjava利用phantomjs进行截图实例教程