亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

使用Phantomjs和Node完成網頁的截屏快照的方法

2024-05-06 16:53:20
字體:
來源:轉載
供稿:網友

由于甲方爸爸的需要,最近使用phantomjs和Node寫了一個對網頁內容截屏的功能,為了避免忘記,現在將代碼內容及配置流程大概描述一下.

1.首先Node是必須安裝的,而且網上安裝教程一大堆,在此不再贅述,Nodejs官網鏈接

2.然后,第二個主人公是phantomjs,官網下載地址,選擇對應的系統下載對應的安裝包

3.將phantomjs配置為系統變量,下面是Windows配置為環境變量:

Phantomjs,Node,網頁,截屏快照

配置完成之后,在cmd命令行中輸入 phantomjs -v 檢驗是否配置成功,配置成功之后,如下圖所示:

Phantomjs,Node,網頁,截屏快照

4.擼代碼,通過查閱phantomjs入門代碼之后,了解到使用phantomjs可以預覽一個網頁生成圖片,PDF,base64格式等等,而我們的項目需要的并不是一個完整的網頁,而是網頁中的一部分內容,所以在此基礎之上要改造部門內容,現在講解一下代碼:

4.1)首先是express的一些設置,由于需要執行phantomjs的命令,所以需要引入child_process模塊,具體代碼如下:

var process = require('child_process');//執行命令行所需var express = require('express');//expressvar bodyParser = require('body-parser');var fs = require("fs");//文件操作var app = express(); app.use('/pages',express.static('pdfs'));//設置靜態資源目錄app.use(bodyParser.json({limit:'50mb'}));//請求內容大小限制app.use(bodyParser.urlencoded({limit:'50mb',extended:false}));  //設置允許跨域訪問var allowCrossDomain = function(req, res, next) {  res.header('Access-Control-Allow-Origin', '*');  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');  res.header('Access-Control-Allow-Headers', 'Content-Type');  res.header('Access-Control-Allow-Credentials','true');  next();}; app.use(allowCrossDomain);

4.2)然后就是生成頁面的base64接口的方法,如下:

app.get('/getBase64',function(req,res){	var url=req.query.url;//讀取請求中的url參數,然后訪問這個url  url=url.replace(/&/g,'%26');//將請求中的&轉換 	var resp={	  "status":'200'	}	res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});//設置響應頭	if(url==''){    resp.msg='url參數不能為空';    res.end(JSON.stringify(resp));  	}	else{    //phantomjs執行的命令行 index.js在后文中給出		var strShell='phantomjs --disk-cache=true --disk-cache-path=. index.js '+url;    process.exec(strShell,{    	maxBuffer:5000*1024,    },function(error,stdout,strerr){    	if(error!==null){        console.log(error);    		resp.msg='轉換失敗,稍后重試';    		res.end(JSON.stringify(resp));    	}else{        //執行成功則返回base64的數據    		resp.data=stdout;    		res.end(JSON.stringify(resp));    	}    })	} })

4.3)phantomjs執行的腳本,即index.js,如下:

var page = require('webpage').create();//獲取webpagevar system = require('system'),  address; if (system.args.length === 1) {//執行的命令應該包括請求的URL,否則退出phantom  console.log('Usage: URL error');  phantom.exit();}address = system.args[1];//請求的地址address = address.replace(/%26/g, '&');//phantom不能識別%26,所以轉為&page.viewportSize = {//設置viewport  width: 1920,  height: 1080,}page.open(address, function(status) {//打開頁面  setTimeout(function() {//2s之后獲取base64結果,如果直接生成有可能頁面還沒有加載完成    if (status == 'success') {      var base64 = page.renderBase64('PNG');      console.log(base64);//將base64結果輸出之后,在上邊的getBase64接口中獲取      phantom.exit();    }  }, 2000);})

4.4)獲取頁面中部分內容的截圖,可以將需要截圖的DOM字符串,發送至后臺,然后新建一個空的頁面,使用phantom訪問該空白頁面,并將DOM字符串添加到預覽的頁面,然后生成截圖,具體代碼如下:

app.post('/getPartPage', function(req, res) {  var xmlObj = req.body.xmlObj;//獲取DOM字符串  const reqUrl = 'http:example.com/tmp.html';//要訪問的空頁面  var response = {    "status": '200',  };  if (xmlObj == undefined || xmlObj == '' || xmlObj == null) {    response.msg = 'DOM字符串內容未輸入';    res.end(JSON.stringify(response));  }else {    fs.writeFile('tmp.txt', xmlObj, function(err) { //由于dom字符串內容過多,所以寫入txt文本      if (err) {        response.msg = '生成頁面失敗,請稍后重試';        return res.end(JSON.stringify(response));      }       var strShell = 'phantomjs pages/index.js ' + reqUrl;//phantomjs執行的命令      process.exec(strShell, {        maxBuffer: 5000 * 1024,      }, function(error, stdout, strerr) {        if (error !== null) {          response.msg = '腳本執行錯誤,請稍后重試';          res.end(JSON.stringify(response));        } else {          response.data = stdout.replace("/r/n", "");          res.end(JSON.stringify(response));//返回結果        }       })     })   } }) var server = app.listen(8808,function(){ //接口監聽,訪問的端口	var host = server.address().address	var port = server.address().port  console.log('http://%s:%s',host,port);})

4.5)pages下的index.js內容如下所示:

var page = require('webpage').create();//獲取webpagevar fs = require('fs');var system = require('system'),  address,filename; if (system.args.length === 1) {  console.log('Usage: URL error');  phantom.exit();}address = system.args[1];//請求的路徑address = address.replace(/%26/g, '&');filename = (new Data()).getTime();page.viewportSize = {  width: 750,}page.paperSize = { //生成A4大小的PDF文件  format: 'A4',  orientation: 'portrait',  margin: '0.8cm'}page.open(address, function(status) {  var info = fs.read('tmp.txt');//讀取DOM字符串  var result = page.evaluate(function(info) {    try {      document.querySelector('#dom').innerHTML = info;//將dom字符串拼接    } catch (e) {      console.log(e);    }     return document.querySelector('#dom').innerHTML;//返回頁面  }, info);  setTimeout(function() {    page.paperSize = {      format: 'A4',      orientation: 'portrait',      margin: '0.8cm'    };    page.viewportSize = {      width: 750,    };    //生成PDF文件     page.render('pages/' + filename + '.pdf', { format: 'pdf', quality: '100' });    console.log('http://example.com/pages/' + filename + '.pdf');//返回PDF文件的訪問路徑    phantom.exit();  }, 500);})

OK,以上就是全部接口的內容,全部的代碼可以訪問https://github.com/kim095/node-phantom進行下載.希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
丝袜一区二区三区| 日韩美女在线播放| 亚洲欧洲国产伦综合| 国产成人一区二区三区电影| 国内精品久久久久影院优| 欧美日韩第一页| 亚洲欧美国产日韩天堂区| 亚洲人成网站免费播放| 欧美日韩不卡合集视频| 国产一区二区三区在线视频| 亚洲精品国产品国语在线| 国产黑人绿帽在线第一区| 欧美激情第一页xxx| 亚洲精品电影久久久| 777午夜精品福利在线观看| 亚洲精品美女久久久| 亚洲老司机av| 亚洲97在线观看| 亚州欧美日韩中文视频| 亚洲欧洲国产一区| 亚洲欧美一区二区三区久久| 亚洲视频网站在线观看| 日韩免费高清在线观看| 精品久久久久久久久久国产| 国产精品久久久久久久久久久久久| 日韩在线免费视频| 成人国产精品日本在线| 国产丝袜一区视频在线观看| 欧美高清不卡在线| 国产91精品久久久| 秋霞成人午夜鲁丝一区二区三区| 91欧美精品成人综合在线观看| 久热精品视频在线观看| www日韩欧美| 日韩av网站在线| 欧美裸体xxxx极品少妇软件| 亚洲成人网在线观看| 国产精品露脸自拍| 国产一区二区三区毛片| 欧美人交a欧美精品| 久久国产一区二区三区| 亚洲色图偷窥自拍| 精品国产一区二区三区久久久狼| 日本成熟性欧美| 热99久久精品| 国产va免费精品高清在线观看| 日本sm极度另类视频| 欧美性在线视频| 欧美成人激情视频免费观看| 日韩精品视频免费专区在线播放| 精品爽片免费看久久| 国产精品久久久999| 精品动漫一区二区三区| 啊v视频在线一区二区三区| 精品美女国产在线| 欧美成人三级视频网站| 亚洲精品理论电影| 亚洲人成伊人成综合网久久久| 亚洲视频777| 国产精品免费久久久久影院| 亚洲精品suv精品一区二区| 国产精品狠色婷| 一本大道久久加勒比香蕉| 欧美另类99xxxxx| 欧美在线视频观看| 国产精品视频999| 国内精品久久久久久| 欧美日韩国产综合视频在线观看中文| 成人午夜在线影院| 国产欧美日韩精品丝袜高跟鞋| 亚洲电影免费观看高清完整版在线| 亚洲在线视频观看| 992tv在线成人免费观看| 日韩在线视频免费观看| 中文字幕日韩欧美| 亚洲国模精品私拍| 成人激情视频在线播放| 亚洲日本中文字幕免费在线不卡| 亚洲毛片一区二区| 日韩精品在线观看网站| 国产精品久久久一区| 91av在线视频观看| 亚洲国产精彩中文乱码av| 亚洲男人的天堂在线播放| 亚洲国产精品久久久| 成人久久久久久| 亚洲午夜av电影| 亚洲国产成人精品女人久久久| 91精品一区二区| 91成人福利在线| 亚洲а∨天堂久久精品喷水| 国产精品成人aaaaa网站| 国产精品爱啪在线线免费观看| 欧美精品久久久久久久免费观看| 欧美日韩ab片| 国产日韩在线看片| 欧美黄色三级网站| 国产视频丨精品|在线观看| 91精品国产电影| 欧美午夜精品久久久久久浪潮| 日韩中文字幕在线视频播放| 日韩亚洲综合在线| 午夜精品久久久久久久99黑人| 2019亚洲男人天堂| 国内成人精品一区| 97视频免费看| 91久久在线播放| 亚洲最大av网站| 国产精品成人久久久久| 亚洲美腿欧美激情另类| 中文日韩在线视频| 国产精品露脸自拍| 久久精品成人欧美大片古装| 青青草99啪国产免费| 日本在线观看天堂男亚洲| 91夜夜未满十八勿入爽爽影院| 亚洲小视频在线| 97超碰色婷婷| 亚洲第一视频在线观看| 亚洲深夜福利在线| 欧美午夜女人视频在线| 亚洲人永久免费| 亚洲风情亚aⅴ在线发布| 国产成人亚洲综合91精品| 国模吧一区二区| 日韩欧美999| 国产精品永久免费观看| 久久理论片午夜琪琪电影网| 色综合久综合久久综合久鬼88| 欧美最猛性xxxxx(亚洲精品)| 欧美日韩在线另类| 欧美日韩国产在线| 夜夜嗨av一区二区三区四区| 日韩欧美国产高清91| 久久久999精品视频| 成人黄色av免费在线观看| 欧美成人免费全部| 亚洲天堂av电影| 精品女同一区二区三区在线播放| 国产91精品不卡视频| 美女久久久久久久| 国产mv久久久| 成人激情视频在线| 欧美日韩国产在线播放| 57pao成人永久免费视频| 日韩视频中文字幕| 久久综合国产精品台湾中文娱乐网| 欧美精品一区三区| 欧美日韩亚洲国产一区| 日韩av免费看网站| 黄色一区二区在线| 日韩欧美a级成人黄色| 欧美黑人国产人伦爽爽爽| 欧美国产精品va在线观看| 欧美中文字幕视频在线观看| 91久久国产精品91久久性色| 国产精品久久久久9999| 中文字幕亚洲欧美| 亚洲国产欧美在线成人app| 日本最新高清不卡中文字幕| 亚洲综合色激情五月| 亚洲一区二区黄| 日韩国产欧美精品一区二区三区| 久久香蕉精品香蕉|