精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

前端工程師的一大神器:puppeteer

開發 前端
本文主要講述一下Google出版并一直在不斷維護的神器puppeteer,通過學習本文你將了解其基本使用和常用功能。

本文主要講述一下Google出版并一直在不斷維護的神器puppeteer,通過學習本文你將了解其基本使用和常用功能。

一、Puppeteer簡介

Puppeteer 是一個 Node 庫,它提供了一個高級 API 來通過 DevTools 協議控制 Chromium 或 Chrome,利用Puppeteer可以獲取頁面DOM節點、網絡請求和響應、程序化操作頁面行為、進行頁面的性能監控和優化、獲取頁面截圖和PDF等,利用該神器就可以操作Chrome瀏覽器玩出各種花樣。

二、Puppeteer核心組成結構

Puppeteer的結構也反映了瀏覽器的結構,其核心結構如下所示:

圖片

Browser:這是一個瀏覽器實例,可以擁有瀏覽器上下文,可通過 puppeteer.launch 或 puppeteer.connect 創建一個 Browser 對象。

BrowserContext:該實例定義了一個瀏覽器上下文,可擁有多個頁面,創建瀏覽器實例時默認會創建一個瀏覽器上下文(不能關閉),此外可以利用 browser.createIncognitoBrowserContext()創建一個匿名的瀏覽器上下文(不會與其它瀏覽器上下文共享cookie/cache).

Page:至少包含一個主框架,除了主框架外還有可能存在其它框架,例如iframe。

Frame:頁面中的框架,在每個時間點,頁面通過page.mainFrame()和frame.childFrames()方法暴露當前框架的細節。對于該框架中至少有一個執行上下文

ExecutionCOntext:表示一個JavaScript的執行上下文。

Worker:具有單個執行上下文,便于與 WebWorkers 交互。

三、基本使用和常用功能

該神器整體使用起來比較簡單,下面就開始我們的使用之路。

3.1 啟動Browser

核心函數就是異步調用puppeteer.launch()函數,根據相應的配置參數創建一個Browser實例。 

  1. const path = require('path');  
  2. const puppeteer = require('puppeteer');  
  3. const chromiumPath = path.join(__dirname, '../', 'chromium/chromium/chrome.exe');  
  4. async function main() {  
  5.     // 啟動chrome瀏覽器  
  6.     const browser = await puppeteer.launch({  
  7.         // 指定該瀏覽器的路徑  
  8.         executablePath: chromiumPath,  
  9.         // 是否為無頭瀏覽器模式,默認為無頭瀏覽器模式  
  10.         headless: false  
  11.     });  
  12.   
  13. main(); 

3.2 訪問頁面

訪問頁面首先需要創建一個瀏覽器上下文,然后基于該上下文創建一個新的page,最后指定要訪問的網址。 

  1. async function main() {  
  2.     // 啟動chrome瀏覽器  
  3.     // ……  
  4.     // 在一個默認的瀏覽器上下文中被創建一個新頁面  
  5.     const page1 = await browser.newPage();  
  6.     // 空白頁訪問該指定網址  
  7.     await page1.goto('https://51yangsheng.com');  
  8.     // 創建一個匿名的瀏覽器上下文  
  9.     const browserContext = await browser.createIncognitoBrowserContext();  
  10.     // 在該上下文中創建一個新頁面  
  11.     const page2 = await browserContext.newPage();  
  12.     page2.goto('https://www.baidu.com');  
  13.    
  14. main(); 

3.3 設備模擬

經常需要不同類型的機型的瀏覽結果,此時就可以采用設備模擬實現,下面模擬一個iPhone X的設備的瀏覽器結果 

  1. async function main() {  
  2.     // 啟動瀏覽器  
  3.     // 設備模擬:模擬一個iPhone X  
  4.     // user agent  
  5.     await page1.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1') 
  6.      // 視口(viewport)模擬  
  7.     await page1.setViewport({  
  8.         width: 375,  
  9.         height: 812  
  10.     });      
  11.     // 訪問某頁面  
  12.  
  13. main(); 

3.4 獲取DOM節點

獲取DOM節點有兩種方式,一種方式是直接調用page所帶的原生函數,另一種是通過執行js代碼獲取。 

  1. async function main() {  
  2.     // 啟動chrome瀏覽器  
  3.     const browser = await puppeteer.launch({  
  4.         // 指定該瀏覽器的路徑  
  5.         executablePath: chromiumPath,  
  6.         // 是否為無頭瀏覽器模式,默認為無頭瀏覽器模式  
  7.         headless: false  
  8.     });  
  9.     // 在一個默認的瀏覽器上下文中被創建一個新頁面  
  10.     const page1 = await browser.newPage();  
  11.     // 空白頁訪問該指定網址  
  12.     await page1.goto('https://www.baidu.com');  
  13.     // 等待title節點出現  
  14.     await page1.waitForSelector('title');  
  15.     // 用page自帶的方法獲取節點 
  16.     const titleDomText1 = await page1.$eval('title', el => el.innerText);  
  17.     console.log(titleDomText1);// 百度一下  
  18.     // 用js獲取節點  
  19.     const titleDomText2 = await page1.evaluate(() => {  
  20.         const titleDom = document.querySelector('title');  
  21.         return titleDom.innerText;  
  22.     });  
  23.     console.log(titleDomText2);  
  24.  
  25. main(); 

3.5 監聽請求和響應

下面就來監聽一下百度中某一js腳本的請求和響應,request事件是監聽請求,response事件是監聽響應。 

  1. async function main() {  
  2.     // 啟動chrome瀏覽器  
  3.     const browser = await puppeteer.launch({  
  4.         // 指定該瀏覽器的路徑  
  5.         executablePath: chromiumPath,  
  6.         // 是否為無頭瀏覽器模式,默認為無頭瀏覽器模式  
  7.         headless: false  
  8.     });  
  9.     // 在一個默認的瀏覽器上下文中被創建一個新頁面  
  10.     const page1 = await browser.newPage();  
  11.     page1.on('request', request => {  
  12.         if (request.url() === 'https://s.bdstatic.com/common/openjs/amd/eslx.js') {  
  13.             console.log(request.resourceType());  
  14.             console.log(request.method());  
  15.             console.log(request.headers());  
  16.         }  
  17.     });  
  18.     page1.on('response', response => {  
  19.         if (response.url() === 'https://s.bdstatic.com/common/openjs/amd/eslx.js') {  
  20.             console.log(response.status());  
  21.             console.log(response.headers()); 
  22.         }  
  23.     })  
  24.     // 空白頁剛問該指定網址  
  25.     await page1.goto('https://www.baidu.com');  
  26.  
  27. main(); 

3.6 攔截某一請求

默認情況下request事件只有只讀屬性,不能夠攔截請求,若想攔截該請求則需要通過page.setRequestInterception(value)啟動請求攔截器,然后利用request.abort, request.continue 和 request.respond 方法決定該請求的下一步操作。 

  1. async function main() {  
  2.     // 啟動chrome瀏覽器  
  3.     const browser = await puppeteer.launch({  
  4.         // 指定該瀏覽器的路徑  
  5.         executablePath: chromiumPath,  
  6.         // 是否為無頭瀏覽器模式,默認為無頭瀏覽器模式  
  7.         headless: false  
  8.     });  
  9.     // 在一個默認的瀏覽器上下文中被創建一個新頁面  
  10.     const page1 = await browser.newPage();  
  11.     // 攔截請求開啟  
  12.     await page1.setRequestInterception(true);// true開啟,false關閉  
  13.     page1.on('request', request => {  
  14.         if (request.url() === 'https://s.bdstatic.com/common/openjs/amd/eslx.js') {  
  15.             // 終止該請求  
  16.             request.abort();  
  17.             console.log('該請求被終止!!!');  
  18.         }  
  19.         else {  
  20.             // 繼續該請求  
  21.             request.continue();  
  22.         }  
  23.     });  
  24.     // 空白頁訪問該指定網址  
  25.     await page1.goto('https://www.baidu.com');  
  26.  
  27. main(); 

3.7 截圖

截圖是一個很有用的功能,通過截取就可以保存一份快照,方便后期問題的排查。(注:在無頭模式下進行截圖,否則截的圖可能有問題) 

  1. async function main() {  
  2.  // 啟動瀏覽器,訪問頁面的操作     
  3.     // 截屏操作,使用Page.screenshot函數  
  4.     // 截取整個頁面:Page.screenshot函數默認截取整個頁面,加上fullPage參數就是全屏截取  
  5.     await page1.screenshot({  
  6.         path: '../imgs/fullScreen.png',  
  7.         fullPage: true  
  8.     });  
  9.     // 截取屏幕中一個區域的內容  
  10.     await page1.screenshot({  
  11.         path: '../imgs/partScreen.jpg',  
  12.         type: 'jpeg',  
  13.         quality: 80,  
  14.         clip: {  
  15.             x: 0,  
  16.             y: 0,  
  17.             width: 375,  
  18.             height: 300  
  19.         }  
  20.     });  
  21.     browser.close();  
  22.  
  23. main(); 

3.8 生成pdf

除了利用截圖保留快照外,還可以使用pdf保留快照。 

  1. async function main() {  
  2.  // 啟動瀏覽器,訪問頁面的操作    
  3.     // 根據網頁內容生成pdf文件,使用Page.pdf——注意:必須在無頭模式下才可以調用  
  4.     await page1.pdf({  
  5.         path: '../pdf/baidu.pdf'  
  6.     });  
  7.     browser.close();  
  8.  
  9. main();  

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2021-01-31 20:51:55

PuppeteerNode核心

2021-09-13 09:28:10

PuppeteerNode 庫DevTools 協議

2023-12-06 07:36:27

前端開發

2015-08-26 14:18:25

Web前端工程師價值

2015-09-30 10:25:03

前端工程師

2019-07-29 16:05:48

前端DockerNode.js

2018-11-15 15:55:44

前端工程師Web云計算

2010-01-13 10:53:51

Web前端工程師定位

2014-12-23 14:55:23

前端

2016-01-28 11:18:09

卓越前端工程師

2015-08-17 10:32:06

前端工程師優秀

2015-08-24 09:02:49

前端工程師

2016-09-22 16:14:45

前端設計Photoshop

2015-03-16 16:01:40

Web前端前端工程師Web

2010-01-13 10:10:07

Web前端工程師

2011-04-15 09:14:03

抄襲巨頭IT

2011-05-25 16:59:20

前端工程師

2019-06-24 09:40:17

前端前端工程師開發工具

2019-12-18 10:30:24

前端開發技術

2020-09-29 07:38:22

Python裝飾器框架
點贊
收藏

51CTO技術棧公眾號

中文在线观看免费视频| 粉嫩av一区二区三区天美传媒| 天天干天天干天天操| 精品国产乱码久久久| 欧美日韩国产高清一区二区| 欧美激情免费视频| 少妇精品一区二区| 日韩欧国产精品一区综合无码| 亚洲精品videosex极品| 久久久久九九九| 一级片视频网站| 夜夜爽av福利精品导航| 视频直播国产精品| 中文字幕天堂网| 国产精品天堂蜜av在线播放| 久久综合狠狠综合久久综合88 | 久久久一二三| 亚洲成人网av| 日本激情综合网| free性欧美| 国产一区二区成人久久免费影院| 96精品视频在线| 日本一级特级毛片视频| 国产99久久久国产精品成人免费 | 国产suv精品一区二区| 波多野结衣亚洲一区二区| 成人18视频在线观看| 久久久五月婷婷| 国产高清在线精品一区二区三区| 又骚又黄的视频| 91视频久久| 亚洲老板91色精品久久| 丰满熟女人妻一区二区三区| 欧美大陆国产| 在线视频国内自拍亚洲视频| 91精品国产91久久久久麻豆 主演| 永久av在线| 韩国欧美国产一区| 国产91免费看片| 日韩精品乱码久久久久久| 综合色一区二区| 最新日韩中文字幕| 亚洲一区二区三区四区av| 日本一区二区三区中文字幕| 91福利社在线观看| 50路60路老熟妇啪啪| 国产一二在线播放| 亚洲国产精品欧美一二99| 国产伦精品一区二区三区| 国产视频在线观看视频| 久久99蜜桃精品| 欧美大片欧美激情性色a∨久久| 一本色道久久88| 日韩情爱电影在线观看| 色yeye香蕉凹凸一区二区av| 亚洲精品天堂网| 欧美综合一区| 一本色道久久88亚洲综合88| 成人性生交大片免费看无遮挡aⅴ| 蜜桃精品wwwmitaows| 亚洲美女又黄又爽在线观看| 久久无码人妻精品一区二区三区| 美腿丝袜亚洲图片| 日韩成人av一区| 中文字幕国产专区| av一区二区在线播放| 亚洲精品日韩欧美| 丁香激情五月少妇| 香蕉久久网站| 欧美肥婆姓交大片| 91蜜桃视频在线观看| 国产精品视区| 国产精品三级久久久久久电影| 在线免费看91| 国产麻豆精品久久一二三| 不卡一卡2卡3卡4卡精品在| 欧美一级在线免费观看| 看片的网站亚洲| 777777777亚洲妇女| 五月婷婷开心网| 久久三级视频| 92国产精品久久久久首页| 成人av免费播放| 99精品久久久久久| 亚洲国产日韩综合一区| 中文字幕中文字幕在线十八区| 亚洲午夜国产一区99re久久| 中文字幕乱码人妻综合二区三区 | av大全在线免费看| 一区二区三区四区视频精品免费| 国产视频九色蝌蚪| 日本午夜免费一区二区| 亚洲精品按摩视频| 天堂av手机在线| 久久久久高潮毛片免费全部播放| 亚洲天堂av在线免费观看| 男女做暖暖视频| 午夜一区在线| 成人国产精品日本在线| 亚洲 欧美 自拍偷拍| 国产精品不卡在线| 日韩av三级在线| 二区三区精品| 亚洲社区在线观看| 久草免费在线视频观看| 日日夜夜精品免费视频| 999视频在线免费观看| 精品99又大又爽又硬少妇毛片| 亚洲精选免费视频| 成年人视频在线免费| 欧美另类中文字幕| 正在播放亚洲1区| 国产精品久久久久久久久久久久久久久久久 | 成人黄色大片网站| 日韩黄色在线| 亚洲最新视频在线| 日韩欧美高清在线观看| 国内精品不卡在线| 亚洲精品中文字幕乱码三区不卡| 国产无遮挡裸体视频在线观看| 欧美一区二区福利视频| 精品熟妇无码av免费久久| 国产一区二区三区的电影 | 日本aⅴ大伊香蕉精品视频| 99热这里只有精品1| 中文字幕电影一区| 日韩av在线综合| 欧美亚洲大陆| 欧美激情精品久久久久久黑人| 国产精品午夜福利| 国产精品久久午夜夜伦鲁鲁| 欧美综合在线观看视频| 秋霞影院一区二区三区| 91精品国产免费久久久久久 | 成人免费av电影| 日韩精品视频在线播放| 日韩激情在线播放| 成人aaaa免费全部观看| 久久手机在线视频| 国内在线视频| 日韩欧美视频在线| 国产大片免费看| 国产精品99久久不卡二区| 一级全黄肉体裸体全过程| 亚洲奶水xxxx哺乳期| 欧美日韩国产小视频在线观看| 制服 丝袜 综合 日韩 欧美| 六月婷婷一区| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 一区二区三区在线免费看| 亚洲国产成人精品一区二区 | 日韩欧美在线视频| 菠萝菠萝蜜网站| 亚洲欧洲日本一区二区三区| 国产亚洲自拍偷拍| 亚洲综合电影| 亚洲色图美腿丝袜| 在线观看中文字幕网站| 亚洲视频一二三| 欧美性潮喷xxxxx免费视频看| 51社区在线成人免费视频| 久久久久久国产精品美女| 亚洲第一免费视频| 国产女主播一区| 亚洲综合欧美在线| 久久久久久久久久久久久久| 91免费看国产| 免费黄色片在线观看| 色婷婷激情久久| 又色又爽的视频| 国产美女娇喘av呻吟久久| 成人手机在线播放| 国产精品极品| 国产精品v片在线观看不卡| 日本三级视频在线观看| 日韩欧美国产1| 日韩一区二区视频在线| 国产精品视频一二| 91人妻一区二区三区| 在线综合欧美| 一本久道久久综合| 亚洲1区在线| 热草久综合在线| 欧美激情黑人| 亚洲国产日韩欧美在线图片| 天堂网一区二区| 亚洲精品视频在线| 国产高清自拍视频| 久久99精品久久久久婷婷| 岛国大片在线播放| 欧美三级三级| 国产精品一区二区免费看| 播放一区二区| 欧美激情三级免费| 在线激情小视频| 亚洲成avwww人| 影音先锋国产资源| 精品成人久久av| 黄色录像一级片| 91麻豆swag| 樱花草www在线| 免费在线亚洲欧美| 激情视频小说图片| 精品视频亚洲| 精品国产aⅴ麻豆| 国内精品视频| 国产精品久久久久久久午夜| 男女在线视频| www.亚洲一区| 欧美在线观看在线观看| 精品久久久久久久久久久院品网| 国产亚洲久一区二区| 亚洲成人免费观看| 国产人妻精品一区二区三区不卡| 久久久久国产成人精品亚洲午夜| 久久久久99人妻一区二区三区| 欧美96一区二区免费视频| 欧美日韩免费精品| 99re8这里有精品热视频8在线| 国产精品爽爽爽| 久久青青视频| 97视频com| 精品精品导航| 欧美成人午夜免费视在线看片| 高清国产福利在线观看| 精品香蕉一区二区三区| 国产香蕉在线观看| 日韩一区二区电影网| 一级黄色片网站| 欧美午夜不卡在线观看免费| 中文字幕黄色片| 日韩欧美a级成人黄色| 男人的天堂一区| 亚洲福利视频一区二区| 九九九免费视频| 亚洲蜜臀av乱码久久精品蜜桃| 午夜黄色福利视频| 国产精品久久久久一区| 亚洲欧美va天堂人熟伦| 国产日韩精品视频一区| 在线观看福利片| 久久久精品免费观看| 一级性生活大片| 91视频免费看| 91精品人妻一区二区三区蜜桃欧美| 99久久久久久| 亚洲色图14p| 国产日韩三级在线| 久久视频精品在线观看| 国产精品久久久久影视| 韩国一级黄色录像| 亚洲免费资源在线播放| 久草网在线观看| 亚洲国产wwwccc36天堂| 免费看日韩毛片| 在线一区二区三区四区五区| 天堂免费在线视频| 欧美酷刑日本凌虐凌虐| 精品国产乱码久久久久久蜜臀网站| 欧美一区二区视频在线观看2020| 国产jzjzjz丝袜老师水多| 日韩视频国产视频| 天天干天天摸天天操| 亚洲欧美中文日韩在线| 第九色区av在线| 欧美成人手机在线| av在线私库| 国产成人精品在线| 外国成人毛片| 国产经品一区二区| 猛男gaygay欧美视频| 亚洲精品美女久久7777777| 婷婷综合亚洲| 欧美二区在线| 日韩久久电影| 欧美这里只有精品| 日韩专区一卡二卡| 91精品国产三级| 91麻豆国产在线观看| 国产又粗又长又硬| 亚洲中国最大av网站| 9i看片成人免费看片| 欧美日韩一区小说| 成年人免费高清视频| 欧美色倩网站大全免费| 亚洲av无码专区在线| 亚洲男人天堂久| www免费在线观看| 中文字幕亚洲欧美日韩高清| 中文在线观看免费| 国产成人激情视频| 亚洲高清在线一区| 日产国产精品精品a∨| 亚洲欧美校园春色| 国产一区福利视频| 久久国产精品亚洲人一区二区三区| 2022中文字幕| 青青草原综合久久大伊人精品优势| 国产精品久久久久久9999| 91色九色蝌蚪| 老女人性淫交视频| 欧美亚洲综合色| 日韩一级在线播放| 久久亚洲国产精品| www.精品| 国产精品久久九九| 伊人久久大香线蕉综合四虎小说 | 蜜桃av噜噜一区二区三区小说| 香蕉视频免费网站| 中文字幕在线观看不卡| 男人天堂2024| 欧美精品一区二区久久婷婷| 黄网站免费在线播放| 国产精品美女免费视频| 亚洲va久久久噜噜噜久久| 日韩欧美一级在线| 蜜桃av一区二区三区电影| 中文字幕人妻一区二区| 香蕉久久一区二区不卡无毒影院| 国产日韩欧美视频在线观看| 国产一区二区免费| 在线一区av| 快播亚洲色图| 亚洲黑丝一区二区| 一区二区在线免费观看视频| 福利一区在线观看| 欧美日韩午夜视频| 欧美日本在线播放| 在线播放麻豆| 国产精品免费观看在线| 蜜桃a∨噜噜一区二区三区| 男人添女人下面高潮视频| 白白色亚洲国产精品| 精品一级少妇久久久久久久| 欧美精品黑人性xxxx| av在线二区| 国产精品久久久久久久久久久久久久| 色橹橹欧美在线观看视频高清| 人人妻人人做人人爽| 成人高清免费观看| 久久久久久久黄色片| 亚洲成年网站在线观看| 17videosex性欧美| 精品久久久久久一区| 国产美女精品| 国产成人精品无码免费看夜聊软件| 欧美日韩免费看| 日本私人网站在线观看| 青青在线视频一区二区三区| 国产伦一区二区三区| 国产天堂在线播放| 国产精品网站导航| 国产视频手机在线观看| 欧美黄色三级网站| 久久久亚洲欧洲日产| 日韩黄色片视频| 国产丝袜美腿一区二区三区| 免费黄色小视频在线观看| 色综合伊人色综合网站| 久久wwww| 成年人午夜免费视频| 91丨porny丨中文| 久久精品国产亚洲av麻豆蜜芽| 色妞欧美日韩在线| 欧美二区观看| 日本wwww视频| 国产精品色眯眯| www.香蕉视频| 8x拔播拔播x8国产精品| 国产探花一区在线观看| 色婷婷.com| 亚洲国产精品欧美一二99| 清纯唯美亚洲色图| 国产专区欧美专区| 海角社区69精品视频| 91国产精品视频在线观看| 国产精品久久久久国产精品日日 | 国产丶欧美丶日本不卡视频| 久久精品国产亚洲av香蕉| 亚洲美女视频网站| 国产精品色婷婷在线观看| 国产二级片在线观看| 欧美激情一二三区| 性猛交xxxx乱大交孕妇印度| 国产91精品久久久久久久| 久久国产电影| 国产 xxxx| 欧美日本不卡视频| 韩日毛片在线观看| 亚洲一区二区在| 97久久精品人人澡人人爽| 亚洲无码精品在线播放| 久久免费视频在线| 天天av综合| 熟女少妇一区二区三区| 欧美精品一卡二卡| 亚洲电影观看| 国产精品免费看久久久无码| 中文字幕欧美激情| 手机看片1024国产|