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

欧美三级午夜理伦三级老人| 国产精品999| 中文字幕一二三区| 亚洲精品久久久久久国| 在线视频成人| 亚洲综合在线免费观看| 精品伦理一区二区三区| 黄色网址中文字幕| 中文字幕日韩一区二区不卡| 亚洲国产免费av| 日韩精品免费播放| 综合图区亚洲| 久久夜色精品国产噜噜av| 国产三级精品网站| 日本网站在线播放| 999国产精品视频| 亚洲电影中文字幕| 色播五月综合网| caoporn视频在线观看| 中文字幕乱码一区二区免费| 成人免费视频观看视频| 正在播放木下凛凛xv99| 韩日精品视频| 色哟哟亚洲精品一区二区| 又大又长粗又爽又黄少妇视频| 久久久久久久久99| 宅男在线一区| 欧美挠脚心视频网站| 国产精品裸体瑜伽视频| 男人的天堂在线视频免费观看 | 日本三级中国三级99人妇网站| 日本一本高清视频| 97精品一区| 亚洲午夜色婷婷在线| 国产综合内射日韩久| 粉嫩av国产一区二区三区| 一本色道久久综合亚洲91 | 精品毛片在线观看| 男女男精品视频| 91成人福利在线| 久久久久久久中文字幕| 我不卡影院28| 国产亚洲日本欧美韩国| 亚洲精品乱码久久久久久不卡| 性国裸体高清亚洲| 一区二区三区欧美久久| 亚洲天堂av免费在线观看| 久草在线网址| 久久中文字幕电影| 久久久久天天天天| 深夜福利视频在线免费观看| 国产91精品露脸国语对白| 亚洲a中文字幕| 91国内精品久久久| 欧美aa在线视频| 2020久久国产精品| 免费的毛片视频| 亚洲综合电影一区二区三区| 性色av一区二区三区在线观看 | 日韩美女视频19| 色噜噜狠狠一区二区三区| 欧美女优在线观看| 久久精品亚洲一区二区三区浴池 | 91社区在线| 韩国视频一区二区| 成人精品一区二区三区电影免费 | 亚洲成人精品在线观看| 精品人妻人人做人人爽| 欧美性爽视频| 亚洲妇熟xx妇色黄| 免费一级特黄特色毛片久久看| 九色蝌蚪在线| 亚洲国产精品99久久久久久久久| 91传媒在线免费观看| jizz中国少妇| 国产成人午夜视频| 精品综合在线| 风间由美一区| 亚洲免费在线看| 精品丰满人妻无套内射| 精品三级久久| 欧洲色大大久久| 99九九99九九九99九他书对| 亚洲视频资源| 精品电影一区二区| 亚洲精品成人无码熟妇在线| 欧美老女人另类| 久色乳综合思思在线视频| 国产一级在线观看视频| 欧美综合国产| 国产欧美va欧美va香蕉在线| 亚洲精品字幕在线观看| 91视频在线看| 一区二区三区在线视频看| 影院在线观看全集免费观看| 精品欧美aⅴ在线网站| 男女啪啪网站视频| 一区二区三区视频播放| 亚洲欧美日韩精品久久亚洲区 | 中文人妻熟女乱又乱精品| 国产一区二区女| 久久久久久草| 黄网站在线免费| 狠狠做深爱婷婷久久综合一区 | 亚洲作爱视频| 国产在线视频不卡| 性感美女视频一二三| 国产精品家庭影院| 国产日韩欧美精品在线观看| 国产a亚洲精品| 亚洲黄色www网站| 国产亚洲精品久久久久久豆腐| 国产在视频线精品视频www666| 日韩麻豆第一页| 国产老头老太做爰视频| 国产日韩精品视频一区二区三区| 97久久精品在线| 88av在线视频| 国产天堂亚洲国产碰碰| 久久99久久99精品蜜柚传媒| 色哟哟免费在线观看| 亚洲成av人片在线观看| 国产精品区在线| 日韩精品免费一区二区三区竹菊| 日韩的一区二区| 91视频综合网| 美女www一区二区| 精品无码久久久久久久动漫| 国产视频在线播放| 欧美影视一区在线| 人妻精品久久久久中文字幕| 亚洲一级高清| 91超碰rencao97精品| 日本在线人成| 欧美色倩网站大全免费| 久久久久亚洲av成人无码电影| 色综合视频一区二区三区日韩| 欧美亚洲综合网| 黑丝av在线播放| 黄色亚洲免费| 91精品国产91久久久久青草| av在线免费一区| 91国偷自产一区二区开放时间| 激情图片中文字幕| 色综合久久网| 国产精品视频一区二区三区四 | 精品国产污污免费网站入口| 精品亚洲乱码一区二区| 日本aⅴ免费视频一区二区三区| 成人激情视频在线| 免费大片黄在线观看视频网站| 亚洲三级在线观看| 久久久久xxxx| 亚洲免费二区| 91影院在线免费观看视频| 免费**毛片在线| 欧美福利一区二区| 欧美在线视频第一页| 久久爱另类一区二区小说| 最新欧美日韩亚洲| 精品国产一区二| 欧美乱人伦中文字幕在线| www.色日本| 亚洲小说欧美激情另类| 熟妇高潮一区二区| 亚洲伦伦在线| 麻豆成人av| 国模一区二区| 久久亚洲精品视频| 免费av一级片| 欧美日韩午夜剧场| 亚洲国产日韩一区无码精品久久久| 国产精品videosex性欧美| 亚洲综合av影视| 神马午夜伦理不卡| 日韩精品欧美国产精品忘忧草| 国产av无码专区亚洲av毛网站| 久久福利一区| 亚洲精品久久区二区三区蜜桃臀| 鲁鲁在线中文| 亚洲精品自拍偷拍| 一级黄色av片| 亚洲精品一二三| 亚洲视频 中文字幕| 日日夜夜精品视频天天综合网| 国产日韩欧美一区二区三区四区| 美女av在线播放| 欧美va亚洲va香蕉在线| 欧美性猛交bbbbb精品| 国产精品毛片大码女人| 亚洲911精品成人18网站| 99国产精品私拍| 亚洲精品国产精品国自产观看| 范冰冰一级做a爰片久久毛片| 日韩欧美一级二级三级 | 亚洲男人的天堂在线aⅴ视频 | 美女扒开腿让男人桶爽久久软| 欧美一区二区三区喷汁尤物| 日韩成人免费观看| 国产精品网站在线播放| www.四虎在线| 久久精品99国产精品日本| 久久99久久久久久| 成人激情诱惑| 国产手机精品在线| 偷拍自拍亚洲| 青青a在线精品免费观看| 国产原创在线观看| 亚洲欧美日韩国产中文专区| 北条麻妃一二三区| 欧美日韩国产小视频在线观看| www.日本高清视频| 成人a区在线观看| xxww在线观看| 国产视频一区欧美| 在线观看污视频| 你懂的一区二区三区| 97在线电影| 日本成人在线网站| 国产成人综合一区二区三区| 乱插在线www| 久久久国产视频| 成人高清免费观看mv| 亚洲精品不卡在线| 精品人妻伦一二三区久久| 欧美视频在线一区二区三区 | 亚洲美女性囗交| 亚洲在线视频| 成人一对一视频| 欧美日韩国产在线一区| 在线观看一区二区三区三州| 狠狠色丁香婷婷综合影院| 久久一区免费| 欧美黑人巨大videos精品| 97av影视网在线观看| 在线视频成人| 成人激情视频在线| 人人精品久久| 91免费观看网站| 豆花视频一区| 成人免费在线视频网址| 青青久久精品| 成人欧美在线视频| 999精品嫩草久久久久久99| 国产中文日韩欧美| 欧美成a人片免费观看久久五月天| 欧美成aaa人片在线观看蜜臀| 人成网站在线观看| 日韩精品自拍偷拍| 亚洲精品字幕在线| 亚洲第一福利网站| 亚洲日本中文字幕在线| 日韩成人激情视频| 日本福利在线观看| 亚洲色图av在线| 成人高清免费在线播放| 色伦专区97中文字幕| 1024国产在线| 日韩一区av在线| 成人日批视频| 欧美俄罗斯性视频| 丰满大乳少妇在线观看网站| 韩国三级电影久久久久久| 18aaaa精品欧美大片h| 69av在线播放| 久久久人成影片一区二区三区在哪下载| 欧美成人sm免费视频| 羞羞的网站在线观看| 久久全国免费视频| av在线中出| 国产精品1234| 国产亚洲高清一区| 国产乱码精品一区二区三区不卡| 日韩综合久久| 国产精品亚洲综合| 亚洲理论电影片| 亚洲视频电影| 亚洲视频高清| 日本女优爱爱视频| 狠狠色丁香久久婷婷综| 手机免费看av片| 国产欧美综合在线观看第十页| 六十路息与子猛烈交尾| 欧美国产精品专区| 亚洲综合网在线| 午夜精品福利久久久| 中文字幕一区二区人妻| 日韩欧美中文字幕公布| 欧美日韩在线中文字幕| 久久网福利资源网站| 毛片在线网站| 92看片淫黄大片看国产片| 欧美1区二区| 国产麻豆电影在线观看| 亚洲欧美久久久| 在线播放av中文字幕| 99在线精品视频| 久久久精品少妇| 欧美午夜激情小视频| 99久久99久久久精品棕色圆| 亚洲欧美国产精品va在线观看| 五月天久久久久久| 日韩亚洲欧美中文高清在线| 韩国精品一区| 亚洲一区二区在线播放| 欧美女优在线视频| 国产美女主播在线| 久久精品国产网站| 三级网站在线免费观看| 亚洲夂夂婷婷色拍ww47| 欧美一区免费看| 亚洲国产精品资源| 二区在线播放| 国产精品欧美风情| 日韩人体视频| 黄色a级片免费看| 老鸭窝一区二区久久精品| 久久久久久久久免费看无码| 亚洲欧美色图小说| 中文在线免费看视频| 国产丝袜高跟一区| 超碰中文在线| 91在线国产电影| 久久国产中文字幕| 91香蕉视频导航| 99riav一区二区三区| 免费观看一级视频| 欧美一区二区三区小说| 日本中文字幕电影在线免费观看| 欧美高清自拍一区| 亚洲aⅴ网站| 亚洲人体一区| 奇米一区二区三区| 成人片黄网站色大片免费毛片| 国产精品久久久久久久岛一牛影视| 日本黄色录像视频| 欧美日韩一区 二区 三区 久久精品| 一级欧美一级日韩| 北条麻妃久久精品| jizz久久久久久| 亚洲精品乱码久久久久久蜜桃91| 国产精品大片| 日批视频免费看| 一区二区在线观看免费| 国产精品亚洲lv粉色| 久久精品国产欧美亚洲人人爽| sm在线播放| 久久精品一二三区| 校园激情久久| 日韩精品无码一区二区三区久久久| 国产精品福利一区二区三区| 日本视频www色| 色爱av美腿丝袜综合粉嫩av| 色999韩欧美国产综合俺来也| 国产一区二区三区色淫影院 | 日本精品免费视频| 国产伦精品一区二区三区视频青涩 | 久久亚洲午夜电影| 久久av一区| 国产欧美小视频| 337p亚洲精品色噜噜噜| 国产在线观看a| 国产91精品入口17c| 999亚洲国产精| 成人乱码一区二区三区av| 欧美图片一区二区三区| 好操啊在线观看免费视频| 99久久精品久久久久久ai换脸| 欧洲grand老妇人| 91极品视频在线观看| 精品一区二区三区免费播放| www.xx日本| 欧美va在线播放| 国产精欧美一区二区三区蓝颜男同| 97超级碰碰| 日韩午夜免费| av女人的天堂| 欧美一区二区视频在线观看| 久久99亚洲网美利坚合众国| 久久艹中文字幕| 蜜臀va亚洲va欧美va天堂| 天天综合天天做| 日韩毛片中文字幕| 色综合久久久| 玩弄中年熟妇正在播放| 欧美国产禁国产网站cc| www.麻豆av| 国产精品99久久久久久久久久久久| 麻豆精品少妇| 熟女少妇精品一区二区| 亚洲精品成人少妇| 巨骚激情综合| 91成人在线看| 日韩电影在线看| 久久国产精品波多野结衣av| 国产偷亚洲偷欧美偷精品| 99综合久久| av免费播放网址| 亚洲激情六月丁香| 成人综合影院|