phantomjs的使用+Java代码+依赖js(兼容Linux和windows版本)
1、 在使用phantomjs的时候需要下载phantomjs,网上有window版本和Linux版本。将phantomjs放在Linux上的指定位置之后(如下面的/home/tpl/phantomjs-1.9.7-linux-x86_64/处),
2、 按照类似如下命令进行测试,是否可以生成图片(执行前检查phantomjs的权限,要有执行权限):
|
/home/tpl/phantomjs-1.9.7-linux-x86_64/bin/phantomjs /home/tpl/phantomjs-1.9.7-linux-x86_64/examples/test.js http://www.baidu.com /home/test/index.png |
注意上面的命令,每个之间用空格隔开,其中:
/home/tpl/phantomjs-1.9.7-linux-x86_64/bin/phantomjs表示的是phantomjs所在的位置
/home/tpl/phantomjs-1.9.7-linux-x86_64/examples/test.js表示使用快照的时候需要的一个js
http://www.baidu.com 要生成快照的页面
/home/test/index.png 表示要将截的图放在的位置
3、要使用程序生成快照,需要执行shell命令或者cmd命令
能够兼容java和windows的一段java代码如下:
|
package xxxxx.webservice.snapshot; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import com.ucap.utils.OsUtils; /** * SnapshotServiceImpl.java 用于生成快照的服务类 * * @attention 使用注意事项 * @author * @date * @note begin modify by 涂作权 2016-5-19 判断在Linux上的情况 */ public class SnapshotServiceImpl implements SnapshotService { /** * phantomjsPath :phantomjs * /home/tpl/phantomjs-1.9.7-linux-x86_64/bin/phantomjs * /home/tpl/phantomjs-1.9.7-linux-x86_64/examples/test.js * http://xxxxx:5555/tpl/special/2016/5/19/2d0cd5d12a974e438a2f4a13300f60d2/index.html * * exportPath :导出路径,这是一个绝对路径 * * 关于phantomjs的执行命令如: * /home/tpl/phantomjs-1.9.7-linux-x86_64/bin/phantomjs * /home/tpl/phantomjs-1.9.7-linux-x86_64/examples/test.js * http://xxxx:5555/tpl/special/2016/5/19/2d0cd5d12a974e438a2f4a13300f60d2/index.html * /home/test/index.png */ public String createSnapshot(String phantomjsPath, String exportPath) { URL path = this.getClass().getClassLoader().getResource("/"); String str = path.getPath(); File file = new File(str); str = file.getParentFile().getParentFile().getParentFile() .getAbsolutePath() + "/temp" + exportPath; String[] strArray = null; // 判断linux的执行情况 if (OsUtils.IS_LINUX) { strArray = new String[3]; strArray[0] = "/bin/sh"; strArray[1] = "-c"; strArray[2] = phantomjsPath + " " + str; } else if (OsUtils.IS_WINDOWS) { strArray = new String[4]; strArray[0] = "cmd.exe"; strArray[1] = "/C"; strArray[2] = phantomjsPath; strArray[3] = str; } File fileInfo = new File(str); File fi = new File(fileInfo.getParentFile().getAbsolutePath()); if (!fi.exists()) { fi.mkdirs(); } // windows下phantomjs位置 Runtime rt = Runtime.getRuntime(); Process process = null; try { process = rt.exec(strArray); } catch (IOException e) { e.printStackTrace(); } StringBuffer sbf = null; InputStream is = null; try { is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); sbf = new StringBuffer(); String tmp = ""; while ((tmp = br.readLine()) != null) { sbf.append(tmp); } } catch (IOException e) { e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } is = null; } } return sbf.toString(); } } |
其中一个依赖的test.js如下:
|
var page = require('webpage').create(); //-----------------------------获取窗口的宽高信息,并设置,write by 涂作权 start------------------------------------ var winWidth = null; var winHeight = null; // 获取窗口宽度 if (window.innerWidth) { winWidth = window.innerWidth; } else if ((document.body) && (document.body.clientWidth)) { winWidth = document.body.clientWidth; } // 获取窗口高度 if (window.innerHeight) { winHeight = window.innerHeight; } else if ((document.body) && (document.body.clientHeight)) { winHeight = document.body.clientHeight; } // 通过深入 Document 内部对 body 进行检测,获取窗口大小 if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) { winHeight = document.documentElement.clientHeight; winWidth = document.documentElement.clientWidth; } page.viewportSize = {width:winWidth,height:winHeight}; page.clipRect = {top:0,left:0,width:winWidth,height:winHeight}; //-----------------------------获取窗口的宽高信息,并设置end-------------------------------------- //----------------------------------------------------------------------------------------------- page.settings = { javascriptEnabled:false, loadImages:true, userAgent:'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) PhantomJS/19.0' }; //----------------------------------------------------------------------------------------------- system = require('system'); //var url = 'http://yule.club.sohu.com/gifttrade/thread/2m2efbrpfui'; var address; var loca; if(system.args.length == 1){ phantom.exit(); }else{ adress = system.args[1]; loca = system.args[2]; page.open(adress, function (status){ if (status != "success"){ console.log('FAIL to load the address'); phantom.exit(); } page.evaluate(function(){ //此函数在目标页面执行的,上下文环境非本phantomjs,所以不能用到这个js中其他变量 //window.scrollTo(0,10000);//滚动到底部 //滚动到自适应高度 //window.document.body.scrollTop = document.body.scrollHeight; /* window.setTimeout(function(){ var plist = document.querySelectorAll("a"); var len = plist.length; while(len) { len--; var el = plist[len]; el.style.border = "1px solid red"; } },5000);*/ }); window.setTimeout(function (){ //在本地生成截图 page.render(loca); //console.log(loca); phantom.exit(); }, 1000); }); } |
phantomjs的使用+Java代码+依赖js(兼容Linux和windows版本)的更多相关文章
- java中构建同时兼容linux和windows程序时遇到的文件路径分割符问题解决方案
最近在做一个自动上传文件的客户端,因为 file.getAbsolutePath() 在Mac和linux下的分割符是“/”,而在windows操作系统下的分割符则是“\”,我们程序中固然可以通过调 ...
- "如何用70行Java代码实现深度神经网络算法" 的delphi版本
http://blog.csdn.net/hustjoyboy/article/details/50721535 "如何用70行Java代码实现深度神经网络算法" 的delphi ...
- CVE漏洞爬虫java代码依赖-TestNG
TestNG是Java中的一个测试框架,而该CVE漏洞爬虫示例中所涉及到的java代码中, \Crawler\src\com\***\ThreaderRun.java文件在导入import org.t ...
- java生成zip包兼容Linux
/* 这个方法只用在windows中用服务器为Linux就不行 */ package common.util; import java.io.File;import java.io.FileInput ...
- 个人项目-WC(C/C++ 兼容Linux和Windows)
一.Github地址 https://github.com/S-TRAVELER/WC 实现的功能: 支持 -c 支持 -w 支持 -l 支持 -s 支持 -a 图形界面 多参数(文件名或通配符表达式 ...
- 使用java代码关闭指定端口的程序-windows
转载请请在页首注明作者与出处 一:问题由史 今天遇到一个问题,就是在实现自动化灾备的时候,发现原有死掉的程序没有完全关闭,当然这都不是本文的重点,重点是这个时候,我得把它完全关闭,所以才有了这篇文章. ...
- java读properties的通用类,兼容linux和windows
package util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; / ...
- 给大家分享下坐标转换的代码的JS和Python两个版本的源码【转】
/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换 */ /** * 百度 ...
- java 如何判断操作系统是Linux还是Windows
String os = System.getProperty("os.name"); if(os.toLowerCase().startsWith("win") ...
随机推荐
- TypeScript: Week Reflection
TypeScript: Week Reflection Introduction Type Script already provide decorators to help developers i ...
- 【集合框架】JDK1.8源码分析之HashMap(一) 转载
[集合框架]JDK1.8源码分析之HashMap(一) 一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化 ...
- MySQL 连接的使用
MySQL 连接的使用 在前几章节中,我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据. 本章节我们将向大家介绍如何使用 MySQL 的 JOIN ...
- 决策树之ID3、C4.5
决策树是一种类似于流程图的树结构,其中,每个内部节点(非树叶节点)表示一个属性上的测试,每个分枝代表该测试的一个输出,而每个树叶节点(或终端节点存放一个类标号).树的最顶层节点是根节点.下图是一个典型 ...
- 高仿腾讯QQ最终版
之前写过一篇关于高仿腾讯QQ的博客,不知道的看这:http://blog.csdn.net/htq__/article/details/51840273 ,主要是从界面上高仿了腾讯QQ,在UI上基本上 ...
- Ajax原理学习
一.AJAX 简介 AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. A ...
- solr多集合配置
1.1 多SolrCore配置 一个solr工程中可以配置多个SolrCore实例. 分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_ ...
- Kafka学习笔记1:概念
一.简介 Apache Kafka是一个分布式的消息系统,作为一个分布式的日志提交服务. Kafka 是一个分布式的.可分区的.可复制的日志提交服务. 它提供了功能性的消息系统,有它自己独特的设计. ...
- android开发常用工具箱
我的工具包资料目录 我的个人总结,最近做的项目需要了的一些资料,感觉挺乱的,然后现在整理了一下. Jar包 包名 版本号 作用 下载地址 xUtils 2.6.14和3.1.26 大文件上传下载等 旧 ...
- Java进阶(四十四)线程与进程的特征及区别
线程与进程的特征及区别 定义及特征 进程 指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令.数据和堆栈等组成的,是一个能独立运行的活动实体. 进程的特征: 1.动态性:进程的实质是 ...