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

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

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

 [[379603]]

本文主要講述一下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-09-13 09:28:10

PuppeteerNode 庫DevTools 協議

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

前端工程師

2011-04-15 09:14:03

抄襲巨頭IT

2019-12-18 10:30:24

前端開發技術

2019-06-24 09:40:17

前端前端工程師開發工具

2020-09-29 07:38:22

Python裝飾器框架
點贊
收藏

51CTO技術棧公眾號

国产综合网站| 在线成人免费| 国产欧美一区二区三区网站| 国产女精品视频网站免费| 国产精品视频看看| 91国内精品| 欧美在线你懂的| xxxxxx在线观看| 性感美女福利视频| 精品一区二区三区香蕉蜜桃| 97在线观看视频| 免费黄色激情视频| 老熟妇一区二区| 丁香花在线电影| wwwwww.欧美系列| 成人性教育视频在线观看| 日本网站免费观看| 99精品视频在线观看免费播放| 亚洲成人xxx| 中文字幕成人免费视频| 亚洲黄色免费看| 亚洲午夜免费电影| 涩涩涩999| 午夜影院免费视频| 国产精品456| 国产精选久久久久久| 国产一级片毛片| 亚洲调教视频在线观看| 久久久91精品国产一区不卡| 女人又爽又黄免费女仆| 一区二区三区在线免费看| 欧美日韩精品三区| 亚洲 中文字幕 日韩 无码| 日韩伦理av| 亚洲视频 欧洲视频| 视频一区视频二区视频三区视频四区国产 | 欧美在线一级视频| 国产午夜精品无码| 欧美精品黄色| 欧美成人高清视频| 我要看一级黄色录像| 精品国产一区二区三区久久久樱花| 亚洲成人av片| 亚洲麻豆一区二区三区| 亚洲91网站| 91精品国产一区二区三区蜜臀| 国产精品一区二区羞羞答答| 色成人免费网站| 色综合久久综合网欧美综合网| 美女黄色免费看| 国产丝袜在线观看视频| 天天做天天爱天天爽综合网| 亚洲欧洲av一区二区三区久久| 日本在线播放一区| 高清国产福利在线观看| 久久久久久久久久久久久久久99| 精品一区日韩成人| 亚洲av成人精品一区二区三区在线播放| 国产精品1区2区| 亚洲最大成人网色| 精品人妻无码一区二区色欲产成人 | 九九视频精品全部免费播放| 国产手机视频精品| 国产精品一二三区在线观看| 国产精品一国产精品| 亚洲人成网7777777国产| 国产手机在线观看| 欧美aaaa视频| 欧美久久精品午夜青青大伊人| 欧美卡一卡二卡三| 亚洲激情社区| 欧美专区日韩视频| 免费又黄又爽又猛大片午夜| 日本不卡123| 91夜夜未满十八勿入爽爽影院| av老司机久久| www.99精品| 日本视频一区二区不卡| 77777影视视频在线观看| 亚洲视频1区2区| 日本人体一区二区| 小早川怜子影音先锋在线观看| 色老头久久综合| 日韩av在线中文| 日韩区欧美区| 亚洲欧美日韩国产中文| 午夜国产福利视频| 国内激情久久| 奇米四色中文综合久久| 在线观看国产黄| 成人天堂资源www在线| 久久天天狠狠| freemovies性欧美| 亚洲第一主播视频| 牛夜精品久久久久久久| www深夜成人a√在线| 精品国产乱码久久久久久果冻传媒| 色yeye香蕉凹凸一区二区av| 天天看片中文字幕| 亚欧美中日韩视频| 成人黄色免费看| 日韩在线视频免费| 国产精品激情偷乱一区二区∴| 国产1区2区3区中文字幕| 亚洲一二三四| 日韩欧美成人一区二区| 中日韩精品一区二区三区 | 中文字幕在线亚洲| 中文字幕一区二区三区手机版| 久久字幕精品一区| 99久久免费国| 日本成人网址| 黑人巨大精品欧美一区免费视频| 亚洲美女性囗交| 亚欧洲精品视频在线观看| 久久精品最新地址| 亚洲欧美另类在线视频| 国产专区欧美精品| 欧美日韩精品免费在线观看视频| mm1313亚洲国产精品美女| 日韩欧亚中文在线| 天堂www中文在线资源| 久久精品青草| 国产精品久久久久久影视| 欧洲av在线播放| 有坂深雪av一区二区精品| 午夜在线观看av| 国产a久久精品一区二区三区| 欧美高清在线播放| 国产精品毛片一区视频播| 国产情人综合久久777777| 日日碰狠狠添天天爽超碰97| 欧美专区视频| 久久精品最新地址| 91成人国产综合久久精品| 久久精品一区二区三区av| 亚洲精品久久久久久久蜜桃臀| 欧美97人人模人人爽人人喊视频| 亚洲国产精品va在线观看黑人| 性色av无码久久一区二区三区| 青青草97国产精品免费观看无弹窗版 | 婷婷国产v国产偷v亚洲高清| 毛毛毛毛毛毛毛片123| 91亚洲人成网污www| 国产精品久久久久久久app| 日韩毛片在线一区二区毛片| 午夜精品一区二区三区免费视频| 欧美性猛交乱大交| 欧美人与禽猛交乱配视频| 成人在线激情视频| 毛片免费不卡| 欧美精品亚洲二区| 免费精品在线视频| 九色|91porny| 超薄肉色丝袜足j调教99| 95精品视频| 久久天天躁狠狠躁夜夜av| 国产又大又长又粗| 亚洲精品欧美专区| 亚洲妇女无套内射精| 中文字幕亚洲综合久久五月天色无吗''| 国产日韩精品在线| 激情视频在线观看| 91精品国产色综合久久不卡电影| 污污视频网站在线免费观看| 久久精品国产精品亚洲综合| 一区二区成人国产精品 | 久久国产精品久久w女人spa| 久久久久久艹| 亚洲欧洲高清| 伊人精品在线观看| 亚洲图片小说视频| 亚洲精品欧美激情| 香港三级日本三级| 亚洲综合国产| 亚洲二区三区四区| 久久99成人| 高清视频欧美一级| 久久久久久久影视| 欧美日韩一级二级| 国产乡下妇女做爰| 久久久久久麻豆| 天天干天天av| 精品电影一区| 日韩经典在线视频| 日韩欧美久久| 青青草精品毛片| 免费在线看黄网站| 激情av综合| 久久国产精品偷| 视频一区二区免费| 欧美性一级生活| 欧美国产精品一二三| 91在线观看污| www.污污视频| 中文亚洲字幕| 国产免费色视频| 老司机在线精品视频| 国产精品久久久久久久久久尿| 91福利国产在线观看菠萝蜜| 日韩精品在线观| 国产三级在线观看视频| 天天色图综合网| 影音先锋男人资源在线观看| 99久久免费视频.com| 另类小说第一页| 亚洲日本成人| 中文精品一区二区三区| 欧美三级午夜理伦三级小说| 成人精品久久久| 性欧美xxx69hd高清| 欧美成人激情图片网| 国产对白叫床清晰在线播放| 精品国产伦一区二区三区观看体验 | 在线中文字幕亚洲| 色女孩综合网| 神马日本精品| 国产精品久久精品国产| 欧美综合影院| 国产成人综合一区二区三区| 91美女主播在线视频| 久青草国产97香蕉在线视频| 国产精品麻豆一区二区三区| 亚洲激情自拍图| 午夜精品一二三区| 91麻豆精品久久久久蜜臀 | 欧美变态tickling挠脚心| 毛片在线免费播放| 欧美日韩一区二区精品| 久久久久黄色片| 亚洲欧美日韩中文播放 | 国产精品视频精品视频| sis001欧美| 91sa在线看| 爱情岛亚洲播放路线| 色综合久久悠悠| 免费av在线网址| 最近2019年中文视频免费在线观看 | 国产高清不卡二三区| 污视频网址在线观看| 美国一区二区三区在线播放| 国产精品69页| 日韩精品一级二级 | 韩国成人在线| 国产精品海角社区在线观看| 亚洲v.com| 国产成人精品一区二区| 韩国主播福利视频一区二区三区| 国内外成人免费激情在线视频| 成人福利电影| 午夜免费久久久久| 看黄在线观看| 18性欧美xxxⅹ性满足| 色一区二区三区| 91高清在线免费观看| 松下纱荣子在线观看| 欧洲永久精品大片ww免费漫画| 波多野结衣亚洲| 国产极品jizzhd欧美| 免费成人美女女| 国产精品久久久久不卡| 黄色日韩网站| 91gao视频| 国产精伦一区二区三区| 国内精品二区| 欧美精品momsxxx| 水蜜桃亚洲精品| 一区二区影院| 欧美精品卡一卡二| 小嫩嫩精品导航| www.99av.com| 国产精品99久| 久久人妻少妇嫩草av无码专区| 久久综合久久久久88| 亚洲精品国产精品国自| 伊人性伊人情综合网| 日韩av电影网| 欧美在线视频不卡| jizz国产视频| 亚洲欧美激情一区| 尤物在线视频| 欧美激情精品久久久久久| 免费看男女www网站入口在线| 日韩美女免费观看| 精品欧美日韩精品| www.久久爱.cn| 蜜乳av综合| 久久国产精品免费观看| 亚洲日韩视频| 91欧美视频在线| 国产91精品久久久久久久网曝门| 极品人妻一区二区三区| 国产精品视频一二| 久久久精品99| 欧洲av在线精品| 日本波多野结衣在线| 伊人精品在线观看| 999精品网| 国产视频观看一区| 高潮久久久久久久久久久久久久| 日韩欧美第二区在线观看| 黄色成人在线网站| 污网站免费在线| 91视视频在线观看入口直接观看www | 最新亚洲视频| 日韩av自拍偷拍| 91老师片黄在线观看| 99久久婷婷国产综合| 在线视频你懂得一区| 蜜臀av中文字幕| 久久精品视频导航| 欧美片第1页| 国产精品一区免费观看| 久久一区91| 可以免费观看av毛片| 成人精品一区二区三区四区| 成人午夜免费影院| 色婷婷综合激情| 日本精品999| 欧美精品在线网站| 91精品国产一区二区在线观看| 久久久久欧美| 亚洲精品1234| 少妇熟女视频一区二区三区 | 日韩深夜福利网站| 欧美日本国产精品| 亚洲区第一页| 人妻精品久久久久中文字幕69| 国产精品女上位| 亚洲欧美日韩激情| 亚洲精品日韩久久久| 国产精品论坛| 国产高清一区二区三区| 亚洲激情久久| 久久久精品视频国产| 国产精品灌醉下药二区| 国产情侣免费视频| 伊人亚洲福利一区二区三区| 中文字幕一区久| 久久久久se| 久久xxxx| 国精品无码人妻一区二区三区| 欧美日韩精品在线视频| 日本高清视频网站| 97精品国产97久久久久久免费| 97久久综合区小说区图片区| 欧美视频在线第一页| 国产aⅴ精品一区二区三区色成熟| 乱h高h女3p含苞待放| 日韩三级中文字幕| av免费在线观| 国产精品v欧美精品∨日韩| 欧美日本一区二区视频在线观看| 91视频福利网| 亚洲一区二区三区在线| 欧美性猛交 xxxx| 26uuu另类亚洲欧美日本老年| 欧美黑白配在线| 日av中文字幕| 欧美国产精品一区二区三区| 中文字幕一区二区在线视频 | 欧美日韩国产精品综合| 欧美成人福利视频| yellow在线观看网址| 久久久久资源| 日本不卡一区二区三区| 男人操女人的视频网站| 亚洲精品在线一区二区| 天堂√8在线中文| 日韩欧美亚洲精品| 蜜臂av日日欢夜夜爽一区| 国产精品久久久精品四季影院| 精品国产青草久久久久福利| 美女露胸视频在线观看| 日本精品一区二区三区高清 久久| 九色porny丨国产精品| 国产亚洲欧美精品久久久久久| 亚洲精品美女久久| 欧美性理论片在线观看片免费| 一区二区三区四区免费视频| 国产成人免费视频网站高清观看视频| 日韩成人免费在线视频| 亚洲午夜精品久久久久久性色| 亚洲综合视频| av免费观看网| 国产精品福利一区二区三区| 亚洲精品视频网| 国产精品成久久久久三级| 亚洲最新av| 中文字幕免费在线看线人动作大片| 欧美疯狂做受xxxx富婆| 黄毛片在线观看| 亚洲日本精品一区| zzijzzij亚洲日本少妇熟睡| 在线观看黄色国产| 91高清视频在线免费观看| 国产精品毛片一区二区在线看| 日韩少妇一区二区| 欧美久久一区二区| 天堂中文av在线资源库|