一、Puppeteer 介紹
Puppeteer 翻譯是操縱木偶的人,利用這個(gè)工具,我們能做一個(gè)操縱頁(yè)面的人。Puppeteer 是一個(gè)Nodejs 的庫(kù),支持調(diào)用Chrome的API來(lái)操縱Web ,相比較Selenium 或是PhantomJs ,它最大的特點(diǎn)就是它的操作Dom 可以完全在內(nèi)存中進(jìn)行模擬既在V8 引擎中處理而不打開(kāi)瀏覽器,而且關(guān)鍵是這個(gè)是Chrome團(tuán)隊(duì)在維護(hù),會(huì)擁有更好的兼容性和前景。
二、Puppeteer 用處
- 利用網(wǎng)頁(yè)生成PDF、圖片
- 爬取SPA應(yīng)用,并生成預(yù)渲染內(nèi)容(即“SSR” 服務(wù)端渲染)
- 可以從網(wǎng)站抓取內(nèi)容
- 自動(dòng)化表單提交、UI測(cè)試、鍵盤(pán)輸入等
- 幫你創(chuàng)建一個(gè)最新的自動(dòng)化測(cè)試環(huán)境(chrome),可以直接在此運(yùn)行測(cè)試用例6.捕獲站點(diǎn)的時(shí)間線,以便追蹤你的網(wǎng)站,幫助分析網(wǎng)站性能問(wèn)題
三、puppeteer環(huán)境準(zhǔn)備
1、Puppeteer環(huán)境要求
1.1、Puppeteer要求node版本不低于v6.4.0,但是async/await只在Node v7.6.0或更高的版本支持。
1.2、需要最近版本的Chromium瀏覽器
2、Puppeteer環(huán)境準(zhǔn)備
1.Node.js 安裝配置
2.Puppeteer安裝
通過(guò)npm安裝:npm install puppeteer --save
由于封網(wǎng),直接下載 Chromium 會(huì)失敗,可以先阻止下載 Chromium 然后再手動(dòng)下載它
ERROR: Failed to download Chromium r515411! Set 'PUPPETEER_SKIP_CHROMIUM_DOWNLOAD' env variable to skip download. # 設(shè)置環(huán)境變量跳過(guò)下載 Chromium set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 # 或者可以這樣干,只下載模塊而不build npm i --save puppeteer --ignore-scripts # 成功安裝模塊 + puppeteer@0.13.0 added 1 package in 1.77s
手動(dòng)下載 Chromium,下載完后將壓縮包解壓,會(huì)有個(gè) Chromium.app ,將其放在你喜歡的目錄下,例如 /Users/huqiyang/Documents/project/z/chromium/Chromium.app 。正常安裝包后 Chromium.app 會(huì)在 .local-chromium 中
Tip:下載 Chromium 失敗解決辦法
PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org
npm install -g cnpm --registry=https://registry.npm.taobao.org
2、jest環(huán)境
安裝 Jest:npm install --save-dev jest
四、puppeteer自動(dòng)化初試
初試 Puppeteer ,截個(gè)圖吧
知識(shí)點(diǎn)
puppeteer.launch 啟動(dòng)瀏覽器實(shí)例browser.newPage() 創(chuàng)建一個(gè)新頁(yè)面page.goto 進(jìn)入指定網(wǎng)頁(yè)page.screenshot 截圖
const puppeteer = require('puppeteer'); const browser = await (puppeteer.launch({ // 若是手動(dòng)下載的chromium需要指定chromium地址, 默認(rèn)引用地址為 /項(xiàng)目目錄/node_modules/puppeteer/.local-chromium/ executablePath: '/Users/huqiyang/Documents/project/z/chromium/Chromium.app/Contents/MacOS/Chromium', //如果是訪問(wèn)https頁(yè)面 此屬性會(huì)忽略https錯(cuò)誤 // 打開(kāi)開(kāi)發(fā)者工具, 當(dāng)此值為true時(shí), headless總為false // 關(guān)閉headless模式, 不會(huì)打開(kāi)瀏覽器 const page = await browser.newPage(); await page.goto('https://www.jianshu.com/u/40909ea33e50'); // quality: 100, 只對(duì)jpg有效 // 指定區(qū)域截圖,clip和fullPage兩者只能設(shè)置一個(gè)
|