phantomJS服務(wù)
? ? ?phantomjs 是 一個(gè)基于 webkit 內(nèi)核的無頭瀏覽器胃惜,沒有 UI 界面除破。它就是一個(gè)瀏覽器并扇,只是內(nèi)部的點(diǎn)擊绊困、翻頁等人為相關(guān)操作需要程序設(shè)計(jì)實(shí)現(xiàn)文搂。提供了 javascript API 接口,可以通過 js 直接與 webkit 內(nèi)核交互秤朗,提供了 windows煤蹭、linux、mac 等不同 OS 的安裝使用包。
phantomjs官網(wǎng):http://phantomjs.org/
GitHub地址:https://github.com/ariya/phantomjs
phantomjs使用方法
phantomjs安裝方式很簡單疯兼,直接官網(wǎng)下載解壓以后就可以使用然遏,例如windows版本
bin目錄下就是phantomjs.exe
examples目錄下是官網(wǎng)給我們使用的常用js
運(yùn)行方式命令詳情:phantomjs? [options]? somescript.js [arg1 [arg2 [...]]]
options是命令部分選項(xiàng),需要可以自行查詢~
cmd示例:.\bin\phantomjs.exe .\examples\rasterize.js http://www.baidu.com baidu.png?
后邊兩個(gè)參數(shù)分別為你需要截圖的地址(如果是網(wǎng)絡(luò)地址必須包含http), 截圖后生成圖片目錄
phantomjs核心模塊
如你所見使用phantomjs最重要的是編寫js吧彪,而js中引用它的部分api待侵,下邊偽代碼講講最重要的幾個(gè)模塊
核心模塊webpage:
var webPage = require('webpage');
var system = require('system'); //主要是來獲取命令后邊接收的args
var fs = require('fs'); //主要是操作文件
var page = webPage.create(); //創(chuàng)建新的page頁
page.open(sourceUrl, function(status) { //sourceUrl為你需要截圖的頁面,在服務(wù)器中可以使用服務(wù)器html絕對地址(file://'+ROOT_PATH+'fill.html?)
if (status === "success") {
//格式支持jpg姨裸、gif秧倾、jpeg、pdf
page.render(imagePath, {format: 'jpg', quality: '65'}) //format 表示輸出的格式傀缩,quality表示輸出圖片質(zhì)量
//page.renderBase64() //將截圖編碼成base64格式字符串輸出
} else {
console.log(“fail”);
}
phantom.exit(0);
);
Java調(diào)用phantomjs服務(wù)
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(cmd); //cmd為上邊phantomjs命令
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuffer sbf = new StringBuffer();
String tmp = "";
while((tmp = br.readLine())!=null){
? ? ? ? sbf.append(tmp);
}
phantomjs實(shí)際使用優(yōu)化
1那先、phantomjs單服務(wù)提供的能力有限,實(shí)際使用時(shí)可以部署多個(gè)phantomjs服務(wù)通過redis的incr命令均勻調(diào)用部署的每個(gè)服務(wù)
2赡艰、如果實(shí)際使用場景下需要處理的圖片比較多售淡,可以使用多線程分批調(diào)用phantomjs服務(wù)
Puppeteer
? ? ? ?Puppeteer(中文翻譯”木偶”) 是 Google Chrome 團(tuán)隊(duì)官方的無界面(Headless)Chrome 工具,它是一個(gè) Node 庫慷垮,提供了一個(gè)高級(jí)的 API 來控制 DevTools協(xié)議上的無頭版 Chrome 揖闸。也可以配置為使用完整的 Chrome。
github地址: https://github.com/GoogleChrome/puppeteer
puppeteer使用方法
?puppeteer安裝:https://segmentfault.com/a/1190000012606616
?puppeteer如同phantomjs一樣命令方式: node example.js?[arg1 [arg2 [...]]]
js示例偽代碼:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
? ? executablePath:? './chrome-win/chrome.exe',? //手動(dòng)安裝的chrome插件地址
? ? headless:true //無界面模式料身,如果false本地會(huì)打開chrome瀏覽器
? ? }
);
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
//await page.pdf({path: 'example.pdf'}); //生成pdf時(shí)headless必須為true汤纸,否則會(huì)報(bào)錯(cuò)
await browser.close();
})();
最后phantomjs vs puppeteer的比較
這個(gè)哥們總結(jié)的很好我這里就不贅述了: