1、Puppeteer 簡介
Puppeteer 是一個node庫,他提供了一組用來操縱Chrome的API, 通俗來說就是一個 headless chrome瀏覽器 (當然你也可以配置成有UI的,默認是沒有的)。既然是瀏覽器,那么我們手工可以在瀏覽器上做的事情 Puppeteer 都能勝任, 另外,Puppeteer 翻譯成中文是”木偶”意思,所以聽名字就知道,操縱起來很方便,你可以很方便的操縱她去實現:
1) 生成網頁截圖或者 PDF
2) 高級爬蟲,可以爬取大量異步渲染內容的網頁
3) 模擬鍵盤輸入、表單自動提交、登錄網頁等,實現 UI 自動化測試
4) 捕獲站點的時間線,以便追蹤你的網站,幫助分析網站性能問題
如果你用過 PhantomJS 的話,你會發現她們有點類似,但Puppeteer是Chrome官方團隊進行維護的,用俗話說就是”有娘家的人“,前景更好。
2、運行環境
查看 Puppeteer 的官方 API 你會發現滿屏的 async, await 之類,這些都是 ES7 的規范,所以你需要:
npm install puppeteer --save
3、基本用法
先開看看官方的入門的 DEMO
const puppeteer = require('puppeteer');(async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({path: 'example.png'}); await browser.close();})();上面這段代碼就實現了網頁截圖,先大概解讀一下上面幾行代碼:
是不是覺得好簡單? 反正我是覺得比 PhantomJS 簡單,至于跟 selenium-webdriver 比起來, 那更不用說了。下面就介紹一下 puppeteer 的常用的幾個 API。
3.1 puppeteer.launch(options)
使用 puppeteer.launch() 運行 puppeteer,它會 return 一個 promise,使用 then 方法獲取 browser 實例, 當然高版本的 的 nodejs 已經支持 await 特性了,所以上面的例子使用 await 關鍵字,這一點需要特殊說明一下,Puppeteer 幾乎所有的操作都是 異步的, 為了使用大量的 then 使得代碼的可讀性降低,本文所有 demo 代碼都是用 async, await 方式實現。這個 也是 Puppeteer 官方推薦的寫法。對 async/await 一臉懵逼的同學狠狠的戳這里
options 參數詳解
| 參數名稱 | 參數類型 | 參數說明 |
| ignoreHTTPSErrors | boolean | 在請求的過程中是否忽略 Https 報錯信息,默認為 false |
| headless | boolean | 是否以”無頭”的模式運行 chrome, 也就是不顯示 UI, 默認為 true |
| executablePath | string | 可執行文件的路勁,Puppeteer 默認是使用它自帶的 chrome webdriver, 如果你想指定一個自己的 webdriver 路徑,可以通過這個參數設置 |
| slowMo | number | 使 Puppeteer 操作減速,單位是毫秒。如果你想看看 Puppeteer 的整個工作過程,這個參數將非常有用。 |
| args | Array(String) | 傳遞給 chrome 實例的其他參數,比如你可以使用” 主站蜘蛛池模板: 英山县| 铁岭市| 梅河口市| 大名县| 济源市| 梧州市| 湖口县| 鱼台县| 怀柔区| 抚松县| 无锡市| 鄂尔多斯市| 庆城县| 舟曲县| 盐津县| 昭平县| 揭西县| 郸城县| 贵德县| 宁乡县| 左云县| 安龙县| 瑞金市| 石台县| 沂源县| 呼图壁县| 永善县| 西乡县| 晋中市| 三明市| 招远市| 上虞市| 康平县| 重庆市| 洪江市| 城步| 木兰县| 仁化县| 兰溪市| 长治市| 富宁县| |