您的位置:首頁>正文

node調用phantomjs

什麼是phantomjs

phantomjs官網是這麼說的, ‘整站測試, 螢幕捕獲, 自動翻頁, 網路監控’, 目前比較流行用來爬取複雜的, 難以通過api或正則匹配的頁面, 比如頁面是通過非同步載入。 phantomjs就是一個完整的流覽器只能沒有介面, 因此我們可以用它來模擬真正的流覽器去訪問頁面, 然後再獲取頁面。 我要說的重點是如何在node中調用phantomjs來獲取頁面。

node與phantomjs通信 命令列傳參 只能在phantomjs開啟時對其傳參, 運行過程中無能為力。 標準輸出 能從phantomjs向node輸出資料, 但是沒法反過來。 http phantomjs向node發http請求, 然後node返回資料, 但是請求只能由phantomjs發出websocket websocket通訊, 能夠雙向通訊但是實現略麻煩。
phantomjs-node 實際上也是使用websocket或者http通訊, 但是畢竟是別人寫好的我們直接用就行, 缺點是依賴略龐大。 如何使用phantom-node

這裡只做簡單說明詳細api見github。

1.安裝

npm install phantom

2.模組封裝(以下代碼基於es7, 需支援async/await,node版本>7.0), 更詳細使用可查看phantomjs官方文檔

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 ;
同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示