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

前端工程師的一大神器—Puppeteer

網絡 通信技術
本文主要講述一下Google出版并一直在不斷維護的神器puppeteer,通過學習本文你將了解其基本使用和常用功能。Puppeteer 是一個 Node 庫,它提供了一個高級 API 來通過 DevTools 協議控制 Chromium 或 Chrome。

[[423414]]

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

一、Puppeteer簡介

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

二、Puppeteer核心組成結構

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

  1. Browser:這是一個瀏覽器實例,可以擁有瀏覽器上下文,可通過 puppeteer.launch 或 puppeteer.connect 創建一個 Browser 對象。
  2. BrowserContext:該實例定義了一個瀏覽器上下文,可擁有多個頁面,創建瀏覽器實例時默認會創建一個瀏覽器上下文(不能關閉),此外可以利用 browser.createIncognitoBrowserContext()創建一個匿名的瀏覽器上下文(不會與其它瀏覽器上下文共享cookie/cache).
  3. Page:至少包含一個主框架,除了主框架外還有可能存在其它框架,例如iframe。
  4. Frame:頁面中的框架,在每個時間點,頁面通過page.mainFrame()和frame.childFrames()方法暴露當前框架的細節。對于該框架中至少有一個執行上下文
  5. ExecutionCOntext:表示一個JavaScript的執行上下文。
  6. Worker:具有單個執行上下文,便于與 WebWorkers 交互。

三、基本使用和常用功能

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

3.1 啟動Browser

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

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

3.2 訪問頁面

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

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

3.3 設備模擬

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

  1. async function main() { 
  2.     // 啟動瀏覽器 
  3.  
  4.     // 設備模擬:模擬一個iPhone X 
  5.     // user agent 
  6.     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'
  7.     // 視口(viewport)模擬 
  8.     await page1.setViewport({ 
  9.         width: 375, 
  10.         height: 812 
  11.     }); 
  12.      
  13.     // 訪問某頁面 
  14.  
  15. 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.     // 在一個默認的瀏覽器上下文中被創建一個新頁面 
  11.     const page1 = await browser.newPage(); 
  12.  
  13.     // 空白頁訪問該指定網址 
  14.     await page1.goto('https://www.baidu.com'); 
  15.  
  16.     // 等待title節點出現 
  17.     await page1.waitForSelector('title'); 
  18.  
  19.     // 用page自帶的方法獲取節點 
  20.     const titleDomText1 = await page1.$eval('title', el => el.innerText); 
  21.     console.log(titleDomText1);// 百度一下 
  22.  
  23.     // 用js獲取節點 
  24.     const titleDomText2 = await page1.evaluate(() => { 
  25.         const titleDom = document.querySelector('title'); 
  26.         return titleDom.innerText; 
  27.     }); 
  28.     console.log(titleDomText2); 
  29.  
  30. 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.     // 在一個默認的瀏覽器上下文中被創建一個新頁面 
  11.     const page1 = await browser.newPage(); 
  12.  
  13.     page1.on('request', request => { 
  14.         if (request.url() === 'https://s.bdstatic.com/common/openjs/amd/eslx.js') { 
  15.             console.log(request.resourceType()); 
  16.             console.log(request.method()); 
  17.             console.log(request.headers()); 
  18.         } 
  19.     }); 
  20.  
  21.     page1.on('response', response => { 
  22.         if (response.url() === 'https://s.bdstatic.com/common/openjs/amd/eslx.js') { 
  23.             console.log(response.status()); 
  24.             console.log(response.headers()); 
  25.         } 
  26.     }) 
  27.  
  28.     // 空白頁剛問該指定網址 
  29.     await page1.goto('https://www.baidu.com'); 
  30.  
  31. 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.     // 在一個默認的瀏覽器上下文中被創建一個新頁面 
  11.     const page1 = await browser.newPage(); 
  12.  
  13.     // 攔截請求開啟 
  14.     await page1.setRequestInterception(true);// true開啟,false關閉 
  15.     page1.on('request', request => { 
  16.         if (request.url() === 'https://s.bdstatic.com/common/openjs/amd/eslx.js') { 
  17.             // 終止該請求 
  18.             request.abort(); 
  19.             console.log('該請求被終止!!!'); 
  20.         } 
  21.         else { 
  22.             // 繼續該請求 
  23.             request.continue(); 
  24.         } 
  25.     }); 
  26.  
  27.     // 空白頁訪問該指定網址 
  28.     await page1.goto('https://www.baidu.com'); 
  29.  
  30. main(); 

3.7 截圖

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

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

3.8 生成pdf

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

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

本文轉載自微信公眾號「前端點線面」

 

責任編輯:姜華 來源: 前端點線面
相關推薦

2021-01-31 20:51:55

PuppeteerNode核心

2021-05-27 12:10:42

前端puppeteer代碼

2023-12-06 07:36:27

前端開發

2015-08-26 14:18:25

Web前端工程師價值

2015-09-30 10:25:03

前端工程師

2014-12-23 14:55:23

前端

2016-01-28 11:18:09

卓越前端工程師

2015-08-17 10:32:06

前端工程師優秀

2015-08-24 09:02:49

前端工程師

2010-01-13 10:53:51

Web前端工程師定位

2018-11-15 15:55:44

前端工程師Web云計算

2019-07-29 16:05:48

前端DockerNode.js

2016-09-22 16:14:45

前端設計Photoshop

2015-03-16 16:01:40

Web前端前端工程師Web

2010-01-13 10:10:07

Web前端工程師

2011-05-25 16:59:20

前端工程師

2019-12-18 10:30:24

前端開發技術

2011-04-15 09:14:03

抄襲巨頭IT

2019-06-24 09:40:17

前端前端工程師開發工具

2020-09-29 07:38:22

Python裝飾器框架
點贊
收藏

51CTO技術棧公眾號

99在线免费视频观看| 91精品久久久久久久久久久| 538国产视频| 竹内纱里奈兽皇系列在线观看 | 尤物网站在线看| 欧美高清另类hdvideosexjaⅴ| caoporn国产精品| 国产精品久久久久久超碰 | 欧美污在线观看| 老牛影视精品| 国产精品国产精品国产专区不蜜 | 久久99精品国产99久久6尤物| yy1111111| 日韩伦理一区二区| 精品动漫一区二区三区| 一区二区三区四区五区视频| 人妻精品无码一区二区| 麻豆极品一区二区三区| 午夜精品在线观看| 影音先锋男人看片资源| 久久成人福利| 欧美一区二区在线播放| 无码少妇一区二区三区芒果| 国产盗摄精品一区二区酒店| 国产精品久久久久久久久快鸭| 久久大片网站| а√中文在线资源库| 日韩av午夜在线观看| 亚洲**2019国产| 国产黄在线免费观看| 国产一区二区三区电影在线观看 | 99热精品久久| 亚洲精品视频免费| 99精品一区二区三区无码吞精| 欧美高清影院| 欧洲av在线精品| 日韩精品视频一区二区在线观看| 免费av不卡在线观看| 国产精品国产a级| 欧美日韩精品中文字幕一区二区| 精品久久在线观看| 老司机精品视频一区二区三区| 日本不卡免费高清视频| 国产真实乱偷精品视频| 欧美激情自拍| 久久国产精品网站| 黄色录像一级片| 日本一二区不卡| 亚洲社区在线观看| 亚洲a v网站| 国产精品亚洲二区| 亚洲新声在线观看| 加勒比综合在线| 在线一级成人| 亚洲欧美资源在线| 成人h动漫精品一区| 日韩精品福利一区二区三区| 欧美xxxx老人做受| 中国xxxx性xxxx产国| 亚洲综合影院| 欧美mv和日韩mv的网站| 深夜视频在线观看| 999久久久久久久久6666| 精品日韩99亚洲| www.555国产精品免费| 成人看片黄a免费看视频| 精品久久久久久综合日本欧美 | 国产伦精品一区二区三区视频我| 国产精品普通话对白| 欧美性资源免费| 男人天堂av在线播放| 日本欧美韩国一区三区| 国产欧美精品va在线观看| 亚洲天堂777| 国产一区欧美二区| 99国产超薄肉色丝袜交足的后果| 亚洲第一大网站| 99久久伊人久久99| 五月婷婷综合色| 韩国av网站在线| 亚洲一区在线视频| 久久国产亚洲精品无码| 欧洲av一区二区| 欧美乱妇一区二区三区不卡视频| 中文字幕国产高清| 777久久精品| 亚洲欧美一区二区三区四区| 美女网站视频色| 亚洲国产老妈| 97在线视频免费观看| 欧美激情一区二区三区免费观看| 久久99国产精品久久| 99国精产品一二二线| 污污网站在线免费观看| 欧美国产禁国产网站cc| 成人在线观看毛片| 黑人巨大精品欧美一区二区桃花岛| 欧美日韩国产经典色站一区二区三区| 久久发布国产伦子伦精品| 一区二区三区日本久久久| 日韩亚洲欧美中文高清在线| 国产亚洲成人精品| 日韩**一区毛片| 国产精品日韩二区| eeuss影院在线播放| 亚洲综合一区二区精品导航| 午夜精品久久久内射近拍高清| 青娱乐极品盛宴一区二区| 亚洲精品电影网站| 日本一级特级毛片视频| 国产精品资源| 亚洲字幕在线观看| 国产香蕉在线| 午夜成人在线视频| 一区二区三区四区毛片| 国产尤物久久久| 久久久噜久噜久久综合| 亚洲无码精品在线播放| 91在线播放网址| 日本a在线天堂| 国产成人精品一区二区三区视频 | 欧美一区二区| 国产精品久久久久久亚洲调教| 欧美视频在线观看一区二区三区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 精品国产免费无码久久久| 久久久国产午夜精品| 霍思燕三级露全乳照| 日韩欧美激情电影| 最近2019中文字幕第三页视频 | 国产欧美高清| 成人欧美一区二区三区在线观看| 人人干在线视频| 欧美性生交xxxxx久久久| 老熟女高潮一区二区三区| 婷婷中文字幕一区| 国产日韩亚洲欧美| www黄在线观看| 日本道色综合久久| 韩国无码一区二区三区精品| 伊人成人网在线看| 99精彩视频在线观看免费| 看黄网站在线| 777午夜精品免费视频| 自拍偷拍你懂的| 男人的j进女人的j一区| 热re99久久精品国99热蜜月| 国产精品13p| 欧美精品一区男女天堂| 久久综合加勒比| 国产成人在线视频播放| 99亚洲国产精品| 日韩一级淫片| 欧美激情精品久久久久久大尺度| 精品人妻一区二区三区含羞草| 亚洲欧美日韩一区| 国产精品偷伦视频免费观看了| 欧美成人日本| 成人看片视频| 国产蜜臀一区二区打屁股调教| 精品久久久久久久久久久久包黑料| 麻豆changesxxx国产| 国产·精品毛片| 五十路熟女丰满大屁股| 天天躁日日躁成人字幕aⅴ| 97视频免费在线看| 国产资源在线观看| 欧美日韩一本到| 五月天婷婷色综合| 成人综合激情网| 人妻熟女一二三区夜夜爱| 欧洲专线二区三区| 国产精品9999| 久操视频在线观看| 精品国产免费人成电影在线观看四季 | 四虎影视精品| 国产精品久久久久久久电影 | av 一区二区三区| 亚洲影视资源网| 蜜桃传媒一区二区亚洲av| 日本中文字幕一区二区视频| 国产精品av免费| 都市激情亚洲欧美| 日本午夜人人精品| 免费网站成人| 亚洲国产成人在线视频| 波多野结衣在线观看一区| 亚洲欧美综合网| 91成人在线观看喷潮蘑菇| 国产精品入口66mio| 亚洲欧洲另类精品久久综合| 88久久精品| 日韩美女激情视频| www视频在线看| 日韩精品中文字幕久久臀| 在线免费看av片| 亚洲高清三级视频| 欧美a级片免费看| 99久久国产免费看| 99re6在线观看| 国产精品主播| 激情视频小说图片| 国产一区二区观看| 国产日韩精品推荐| 少妇精品视频在线观看| 26uuu另类亚洲欧美日本老年| 色综合久久久久综合一本到桃花网| 亚洲精品一线二线三线| 亚洲天堂网在线观看视频| 午夜精品久久久久久久久| 婷婷激情四射网| 久久久精品日韩欧美| 男人女人拔萝卜视频| 蜜桃视频在线一区| 欧美色图另类小说| 欧美日韩 国产精品| 日韩亚洲视频在线| 国产劲爆久久| 成人免费观看网址| 精品无人乱码一区二区三区| 欧美激情视频网址| 免费av在线播放| 国产亚洲欧美一区| 天堂av在线7| 精品少妇一区二区| 国产女人18毛片18精品| 在线观看网站黄不卡| 国产性猛交╳xxx乱大交| 亚洲一区二区三区美女| 中文字幕亚洲欧美日韩| 国产精品你懂的在线| 波多野结衣av在线免费观看| 成人av在线影院| 爱情岛论坛亚洲自拍| 激情五月激情综合网| 天美星空大象mv在线观看视频| 男女精品网站| 男人操女人免费软件| 日韩一区二区久久| 国产免费黄色一级片| 欧美1区2区| www.-级毛片线天内射视视| 日韩欧美一区免费| 亚洲精品中文字幕在线| 成人在线免费观看视频| 日本一区二区三区免费看| 亚洲专区视频| 秋霞久久久久久一区二区| 国产精品一区二区av交换| 欧美1o一11sex性hdhd| 日韩欧美ww| 欧美lavv| 日韩在线视屏| 夜夜爽www精品| 久久精品国产68国产精品亚洲| 五月婷婷一区| 亚洲a在线视频| 成年在线观看视频| 亚洲天堂男人| 毛片在线视频播放| 性久久久久久| 中文字幕第36页| 久久精品国产亚洲高清剧情介绍| 91视频这里只有精品| 国产一区二区三区四区五区入口| 精品人妻一区二区乱码| 成人一级片在线观看| 双性尿奴穿贞c带憋尿| 国产亚洲精品精华液| av在线播放中文字幕| 亚洲免费高清视频在线| 久久老司机精品视频| 欧美日韩另类字幕中文| www.五月婷婷.com| 91精品欧美久久久久久动漫 | 亚洲欧美中文在线视频| 91社区在线观看| 色综合久综合久久综合久鬼88| av中文字幕电影在线看| 欧美自拍视频在线| 激情小说亚洲| 成人免费看片网址| 国产成人一区| mm131午夜| 妖精视频成人观看www| 日韩大片一区二区| 国产盗摄视频一区二区三区| 国产精品嫩草av| 国产精品美女久久久久av爽李琼 | 欧美顶级大胆免费视频| 黄黄视频在线观看| 乱码第一页成人| 天堂网成人在线| 91麻豆精东视频| 国产传媒免费在线观看| 精品av在线播放| 国产精品久久久久久久久久久久久久久久久久 | 久久亚洲精品成人| 牛牛精品一区二区| 成人黄色生活片| 天美av一区二区三区久久| 一级黄色录像免费看| 亚洲深夜av| 中文字幕12页| 久久久久久9999| 欧美精品videos极品| 在线一区二区三区四区五区| 性欧美一区二区三区| 国产亚洲精品久久久| 成人影院在线播放| 91精品视频专区| 中文有码一区| 国产中文字幕二区| 国产伦精品一区二区三区视频青涩 | 在线播放成人| 日本视频一区二区不卡| 亚洲性感美女99在线| 色婷婷.com| 日本一区二区三区免费乱视频| 精品处破女学生| 欧美电影影音先锋| 最新av网站在线观看| 2019中文字幕在线观看| 盗摄系列偷拍视频精品tp| 一区二区精品国产| 免费在线观看成人| 97伦伦午夜电影理伦片| 午夜视频在线观看一区二区| www.99视频| 成年无码av片在线| 成人国产精品久久| 亚洲自拍偷拍二区| 日本成人中文字幕| 国产人妻大战黑人20p| 高跟丝袜欧美一区| 日韩一区二区三区不卡| 欧美激情欧美激情在线五月| 欧美三级一区| 国产又粗又爽又黄的视频| 久久国产麻豆精品| 国产精品久久久久久久av| 色综合 综合色| 极品美乳网红视频免费在线观看| 91精品国产乱码久久久久久蜜臀| 综合成人在线| 亚洲理论电影在线观看| 国产白丝网站精品污在线入口| 欧美色图亚洲天堂| 日韩精品中文字幕一区二区三区 | 精品人妻久久久久一区二区三区 | 亚洲私拍视频| 国产在线欧美日韩| 国产一区二区三区久久久久久久久 | 三年中文高清在线观看第6集| 麻豆精品国产91久久久久久| 久草手机视频在线观看| 在线播放欧美女士性生活| 秋霞影院午夜丰满少妇在线视频| 国产在线观看一区二区三区| 小处雏高清一区二区三区| 九九九久久久久久久| 亚洲午夜精品久久久久久久久| 丰满人妻一区二区三区四区53| 久久人人97超碰精品888| 久久九九热re6这里有精品| 欧美亚洲一二三区| 国产欧美一区二区精品性色| 伊人免费在线观看| 乱亲女秽乱长久久久| 91精品入口| 免费在线观看的av网站| 国产免费成人在线视频| 国产精品一级视频| 九九九久久国产免费| 欧美变态挠脚心| 免费激情视频在线观看| 日韩一区欧美小说| 欧美 日韩 国产 成人 在线| 国产98色在线| 98精品视频| 香蕉久久久久久av成人| 日韩欧美在线视频免费观看| 在线观看黄av| 国产精品久久国产精品| 久久久久久穴| 免费成人深夜夜行网站| 亚洲国产精品成人精品| 韩日一区二区| 4444亚洲人成无码网在线观看| 91丨porny丨首页| 亚洲无码精品在线观看| 韩国国内大量揄拍精品视频| 欧美日韩中文一区二区| 一级全黄裸体片| 欧美系列在线观看| av资源一区| 黄色高清视频网站| 91网站在线观看视频| 91国产精品一区| 欧美有码在线观看|