1. 程式人生 > >phantomjs的使用+Java程式碼+依賴js(相容Linux和windows版本)

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

/home/test/index.png  表示要將截的圖放在的位置

3、要使用程式生成快照,需要執行shell命令或者cmd命令

能夠相容javawindows的一段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();

}

// windowsphantomjs位置

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);

});

}