精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

另类在线视频| 成人ssswww在线播放| 国产一区二区91| 欧美精品激情blacked18| www.色多多| 韩国精品视频在线观看| 亚洲成人自拍偷拍| 亚洲在线视频一区二区| 性xxxx搡xxxxx搡欧美| 九九视频精品免费| 777午夜精品福利在线观看| 精品一区二区6| 精品人妻二区中文字幕| 中国一级特黄录像播放| 久久久视频6r| 国产精品3区| 欧美性xxxxhd| 日本福利视频在线观看| 国产区视频在线| 国产成人亚洲综合色影视| 国产精品国产三级国产aⅴ9色 | 日本熟妇成熟毛茸茸| 韩日一区二区三区| 日韩国产高清视频在线| 美女被艹视频网站| 国产资源一区| 在线观看免费一区| 97国产精东麻豆人妻电影| av在线播放观看| 国产精品天天摸av网| 蜜桃av噜噜一区二区三区| 午夜精品久久久久久久爽| 蜜臂av日日欢夜夜爽一区| 欧美中文字幕视频| 国产成人精品av久久| 91精品蜜臀一区二区三区在线| 亚洲人成在线观看网站高清| 亚洲一区二区在线免费| 亚洲精品在线播放| 日韩亚洲电影在线| 九九九九九伊人| 久久伊人国产| 欧美日韩一区二区三区不卡| 欧美激情精品久久久久久小说| 成人影院在线视频| 精品欧美激情精品一区| 国产3p露脸普通话对白| 日本欧美电影在线观看| 一区二区三区欧美日| 在线无限看免费粉色视频| 中文日本在线观看| 亚洲欧洲av另类| 中文字幕日韩精品久久| 黄在线免费观看| 亚洲欧美一区二区三区国产精品 | 成人影院在线观看| 亚洲欧美日韩国产另类专区| 国产一二三四区在线观看| 中文在线免费| 亚洲国产综合视频在线观看| 国产欧美久久久久| caoporn视频在线| 精品色蜜蜜精品视频在线观看| 青青青国产在线观看| 咪咪网在线视频| 日本乱人伦一区| 激情视频免费网站| 国产日韩欧美中文在线| 精品久久久影院| 国产乱了高清露脸对白| 国产一区二区三区不卡视频网站| 亚洲区在线播放| 国产三级精品三级观看| 欧美在线免费一级片| 久久久久这里只有精品| 日韩在线视频不卡| 久草精品在线观看| 国产美女在线精品免费观看| 久久久久久久影视| 成人欧美一区二区三区白人| 国产免费一区二区视频| 亚洲风情在线资源| 欧美日韩另类一区| 国产精九九网站漫画| 亚洲色图丝袜| 欧美成人免费va影院高清| 成人毛片18女人毛片| 美日韩一级片在线观看| 成人高清在线观看| 免费成人美女在线观看| 99精品国产99久久久久久白柏 | 一级黄色片播放| 欧洲中文在线| 一本色道**综合亚洲精品蜜桃冫| 中文久久久久久| 我要色综合中文字幕| 日韩精品视频中文在线观看 | 日本不卡电影| 欧美国产日韩xxxxx| www.五月婷婷.com| 丁香一区二区三区| 亚洲欧美精品在线观看| av日韩中文| 制服丝袜国产精品| 性欧美丰满熟妇xxxx性仙踪林| 天天操综合网| 日本成人在线视频网址| www.色婷婷.com| 国产欧美日韩不卡| 男人添女荫道口图片| 巨大黑人极品videos精品| 亚洲精品av在线播放| 情侣偷拍对白清晰饥渴难耐| 久久福利精品| 国产精品三区在线| 99热国产在线中文| 欧美亚洲国产一区二区三区 | 99热这里只有精品66| 久久精品无码一区二区三区| 日韩日韩日韩日韩日韩| 国产日韩在线观看视频| 正在播放国产一区| 五月天婷婷导航| 成人av在线资源网| 热久久最新地址| 欧美伊人亚洲伊人色综合动图| 日韩精品欧美国产精品忘忧草| 麻豆亚洲av成人无码久久精品| 久久9热精品视频| 视频一区国产精品| 美女100%一区| 日韩成人在线视频观看| 色婷婷在线视频观看| 久久黄色级2电影| 色综合666| 天然素人一区二区视频| 亚洲欧美制服第一页| 久草手机在线观看| 91最新地址在线播放| 欧美乱大交xxxxx潮喷l头像| 亚洲综合网狠久久| 欧美xxxx18国产| 99久久精品日本一区二区免费 | 伊人伊成久久人综合网站| 亚洲熟女综合色一区二区三区| 成人国产精品免费观看视频| 久草免费福利在线| 国产精品高潮呻吟久久久久| 久久露脸国产精品| 日韩av免费观影| 色爱区综合激月婷婷| 久久亚洲无码视频| 免费欧美在线视频| 亚洲欧美日韩综合一区| 亚洲香蕉久久| 欧美日韩国产成人| 免费av网站在线播放| 婷婷丁香久久五月婷婷| 国产又爽又黄无码无遮挡在线观看| av成人黄色| 日本在线观看一区二区三区| 国产精品久久久久77777丨| 日韩一区二区欧美| www黄色在线观看| 午夜精品一区二区三区三上悠亚| 欧美性xxxx图片| 日韩黄色在线观看| 国产三级中文字幕| 国产伦精品一区二区三区在线播放| 午夜精品在线观看| 高清国产福利在线观看| 欧美放荡的少妇| 国产在线一区视频| 久久久国产一区二区三区四区小说| 奇米影音第四色| 精品福利电影| 日韩妆和欧美的一区二区| 综合欧美精品| 91精品国产91久久久久| jizz亚洲| 精品福利av导航| 手机在线看片1024| 亚洲精品亚洲人成人网在线播放| 中国特级黄色大片| 日韩va亚洲va欧美va久久| 六月婷婷激情网| 日韩激情毛片| 91精品网站| 欧美www.| 性亚洲最疯狂xxxx高清| jyzzz在线观看视频| 亚洲国产欧美一区| 97超碰人人草| 色综合天天做天天爱| 在线免费观看亚洲视频| 久久亚洲一区二区三区明星换脸| 亚洲怡红院在线| 亚洲一区黄色| 久久香蕉视频网站| 成人影院天天5g天天爽无毒影院| 99re视频在线播放| 国产成人精品一区二区三区免费| 欧美激情a∨在线视频播放| 波多野结衣在线影院| 日韩国产精品视频| 亚洲乱码精品久久久久.. | 欧美一区二区三区免费观看| 欧美videos极品另类| 日韩精品中文字幕在线| 精品国产av一区二区| 欧美三级电影精品| 日韩人妻精品中文字幕| 亚洲国产欧美在线| 精品人妻伦九区久久aaa片| 国产色91在线| 欧美深性狂猛ⅹxxx深喉| 国产一区二区网址| 男人添女人下面免费视频| 国产精品日本欧美一区二区三区| 亚洲av首页在线| 久久免费精品视频在这里| 欧美另类一区| 天堂俺去俺来也www久久婷婷| 99久久自偷自偷国产精品不卡| 国产黄色精品| 国产精品美女久久| 性欧美超级视频| 91成人国产在线观看| av男人的天堂在线观看| 欧美交受高潮1| 日本中文字幕中出在线| 欧美日韩国产成人在线观看| 成人午夜在线影视| 久久视频精品在线| 黄网站在线播放| 色天天综合狠狠色| 在线免费观看黄色av| 亚洲网站在线播放| 国产原创av在线| 国产一区二区三区日韩欧美| 国产高清免费在线播放| 亚洲欧美综合精品久久成人| 久香视频在线观看| 一区二区三区动漫| h视频在线免费| 在线日韩中文字幕| 午夜国产福利在线| 久久久精品亚洲| 色婷婷av在线| 午夜精品久久久久久久99热浪潮 | 成人在线视频免费播放| av电影天堂一区二区在线观看| 日韩少妇一区二区| 91麻豆国产福利在线观看| 丰满少妇一区二区三区| 久久久久久久久久久黄色 | 天天射天天综合网| 日韩人妻一区二区三区蜜桃视频| 在线观看国产精品入口| 韩国无码av片在线观看网站| 影音先锋久久| 亚洲成熟丰满熟妇高潮xxxxx| 日本中文一区二区三区| 中文字幕免费高清在线| 国产精品亚洲综合一区在线观看| 免费看91视频| 久久综合色一综合色88| jizz日本在线播放| 亚洲精品你懂的| 欧美 日韩 国产 一区二区三区| 亚洲一级在线观看| 日本中文在线播放| 欧美视频在线一区| 丰满人妻熟女aⅴ一区| 亚洲男女自偷自拍图片另类| 91吃瓜网在线观看| 欧美高清电影在线看| 在线天堂中文资源最新版| 国产精品美女呻吟| 亚洲视频一起| 任我爽在线视频精品一| 中文字幕一区二区三区在线视频 | 男人天堂2024| 日韩一区二区三区在线观看 | 久久久亚洲精品一区二区三区| 国产欧美一区二区三区在线观看视频| 1区2区3区精品视频| 日产亚洲一区二区三区| 欧美日韩美少妇| 五月婷在线视频| 精品国产欧美成人夜夜嗨| 高端美女服务在线视频播放| 国产日韩换脸av一区在线观看| jizz性欧美23| 亚洲日本无吗高清不卡| 亚洲少妇诱惑| 少妇愉情理伦片bd| 久久久精品欧美丰满| 免费在线视频一区二区| 欧美性受极品xxxx喷水| 三级在线观看网站| 日韩中文在线视频| 日韩电影免费看| 99国产在线| 久久中文字幕av| 精品国产成人av在线免| 成人国产一区二区三区精品| 91ts人妖另类精品系列| 色综合久久久网| 亚洲aⅴ乱码精品成人区| 欧美成年人在线观看| 97成人超碰| 日韩国产精品一区二区| 在线观看视频日韩| 第一页在线视频| 成人免费视频在线观看| 中文字幕欧美色图| 亚洲视频电影图片偷拍一区| av毛片午夜不卡高**水| 高清视频一区| 综合激情一区| 中文字幕色网站| 国产精品伦理在线| 亚洲精品久久久久久久蜜桃| 日韩电影第一页| 成人在线高清免费| 国产精品伊人日日| 欧美激情综合| 下面一进一出好爽视频| 亚洲欧美综合在线精品| 中文字幕在线日亚洲9| 国产一区二区三区高清在线观看| 樱花草涩涩www在线播放| 国模一区二区三区私拍视频| 雨宫琴音一区二区在线| 香蕉视频污视频| 亚洲一区二区在线播放相泽| www.看毛片| 久久久这里只有精品视频| 2021年精品国产福利在线| 男女啪啪免费观看| 国产999精品久久| 欧美黑人精品一区二区不卡| 欧美大片在线观看| 日本aa在线| 国产精品日韩二区| 国产亚洲精品v| 好吊视频在线观看| 欧美午夜寂寞影院| 免费av网站在线看| 亚洲一区二区三| 韩国在线一区| 精品国产av色一区二区深夜久久| 五月天一区二区| 邻居大乳一区二区三区| 国产精品视频最多的网站| 国产精品videosex性欧美| 在线观看视频在线观看| 亚洲国产精品久久久久婷婷884 | 久久国内精品一国内精品| 看亚洲a级一级毛片| 欧美成人精品免费| 国产亚洲美州欧州综合国| 中文字幕人妻一区二区三区视频| 久久精品免费电影| 国产精品久久久久久久久久白浆| 阿v天堂2017| 欧美国产综合一区二区| 国产又大又黑又粗| 欧美黑人狂野猛交老妇| 九九精品在线| 国产老头和老头xxxx×| 欧美午夜电影在线| 欧美a在线看| 国内精品二区| 毛片一区二区三区| 日本特黄一级片| 最新日韩中文字幕| 女同另类激情重口| www.久久av.com| 亚洲成人av电影| 色网站在线看| 国产日产精品一区二区三区四区| 日韩av中文在线观看| 久久久国产精品黄毛片| 国产亚洲精品一区二555| 中文无码日韩欧| 狠狠躁狠狠躁视频专区| 午夜激情一区二区| 麻豆网站在线| 欧美精品一区在线发布| 国产成人综合在线| 亚洲av无码乱码国产精品fc2| 欧美人与性动交a欧美精品| 国产精品最新| 奇米777第四色| 欧美老女人第四色| 婷婷综合六月| 亚洲人成无码网站久久99热国产 | 亚洲第一网站在线观看|