phantomjs官網是這麼說的,‘整站測試,屏幕捕獲,自動翻頁,網絡監控’,目前比較流行用來爬取複雜的,難以經過api或正則匹配的頁面,好比頁面是經過異步加載。phantomjs就是一個完整的瀏覽器只能沒有界面,所以咱們能夠用它來模擬真正的瀏覽器去訪問頁面,而後再獲取頁面。我要說的重點是如何在node中調用phantomjs來獲取頁面。node
GitHub地址:https://github.com/amir20/phantomjs-nodegit
這裏只作簡單說明詳細api見github。github
1.安裝web
npm install phantomnpm
2.模塊封裝(如下代碼基於es7,需支持async/await,node版本>7.0),更詳細使用可查看phantomjs官方文檔api
1 'use strict' 2 3 const phantom = require('phantom'); 4 5 let getPic = async ( name ) => { 6 //url路徑 7 let url = 'http:///'+name; 8 //建立一個實例 9 const instance = await phantom.create(); 10 //建立一個頁面 11 const page = await instance.createPage(); 12 //設置頁面參數 13 await page.property( 'viewportSize' , { width : 1800 , height : 1200 } ); 14 //打開url,返回狀態(url有轉碼,解決中文問題) 15 const status = await page.open( encodeURI( url ) ); 16 console.log( status ); 17 //延時等待頁面js執行完成(phantomjs只是等待頁面上所有資源加載完畢,不包含頁面js執行時間,因此需延時一段時間等待js) 18 await lateTime( 500 ); 19 //輸出頁面到當前目錄下 20 await page.render(`${ name }--${Date.now()}.png`); 21 //銷燬實例 22 await instance.exit(); 23 //返回數據 24 return 'xxx'; 25 }; 26 27 let lateTime = ( time ) =>{ 28 return new Promise( function(resolve,reject){ 29 setTimeout(function(){ 30 resolve(); 31 }, time ); 32 } ); 33 } 34 //暴露接口 35 module.exports = getPic ;