一、Puppeteer簡介
Puppeteer是NPM庫,它提供了NodeJS高階API來控制Chrome。Puppeteer 預設以無頭(無介面)方式執行,但也可以配置為執行有介面的Chrome。
Puppeteer 提供了一系列 API,通過 Chrome DevTools Protocol 協議控制 Chromium/Chrome 瀏覽器的行為
二、什麼是Headless Chrome
(1)在無介面的環境中執行 Chrome
(2)通過命令列或者程式語言操作 Chrome
(3)無需人的干預,執行更穩定
(4)在啟動 Chrome 時新增引數 --headless,便可以 headless 模式啟動 Chrome
三、Puppeteer 結構
API分層結構,反映了瀏覽器結構
- Puppeteer: 使用DevTools協議與瀏覽器進行通訊
- Browser:對應一個瀏覽器例項,一個 Browser 可以包含多個 BrowserContext、
- BrowserContext: 對應瀏覽器一個上下文會話,就像我們開啟一個普通的 Chrome 之後又開啟一個隱身模式的瀏覽器一樣,BrowserContext 具有獨立的 Session(cookie 和 cache 獨立不共享),一個 BrowserContext 可以包含多個 Page
- Page:表示一個 Tab 頁面,通過 browserContext.newPage()/browser.newPage() 建立,browser.newPage() 建立頁面時會使用預設的 BrowserContext,一個 Page 可以包含多個 Frame
- Frame: 一個框架,每個頁面有一個主框架(page.MainFrame()),也可以多個子框架,主要由 iframe 標籤建立產生的
- ExecutionContext: 是 javascript 的執行環境,每一個 Frame 都一個預設的 javascript 執行環境
- ElementHandle: 對應 DOM 的一個元素節點,通過該該例項可以實現對元素的點選,填寫表單等行為,我們可以通過選擇器,xPath 等來獲取對應的元素
四、Puppeteer 用途
- 網頁截圖或者生成 PDF
- 自動提交表單,進行 UI 測試,鍵盤輸入等。
- 建立一個時時更新的自動化測試環境。 使用最新的 JavaScript 和瀏覽器功能直接在最新版本的Chrome中執行測試。
- 捕獲網站的時間線,幫助診斷效能問題
- 網路爬蟲
- ......