常見問題
問:誰維護 Puppeteer?
Chrome 瀏覽器自動化團隊維護這個函式庫,但我們非常歡迎您在這個專案中提供幫助和專業知識!請參閱我們的貢獻指南。
問:跨瀏覽器支援的狀態為何?
從 Puppeteer v23.0.0 開始,Puppeteer 同時支援 Chrome 和 Firefox。
為了自動化 Chrome,Puppeteer 預設使用 Chrome DevTools Protocol (CDP),但也可以使用 WebDriver BiDi 進行自動化,這是自動化 Firefox 的預設設定。
若要了解 API 支援的細微差異,請參閱我們的 WebDriver BiDi 指南。
問:Puppeteer 支援 WebDriver BiDi 嗎?
從 Puppeteer v23.0.0 開始,Puppeteer 對於 WebDriver BiDi 具有可應用於正式環境的支援,可以自動化 Chrome 和 Firefox。
問:Puppeteer 會繼續支援 CDP 嗎?
即使 Puppeteer 支援 WebDriver BiDi,我們也不會停止支援使用 CDP 自動化 Chrome。這是為了不破壞現有依賴 CDP 的自動化,同時也為了繼續啟用 Chrome 特有且未以 WebDriver BiDi 標準化的自動化使用案例。
問:Puppeteer 的目標和原則是什麼?
此專案的目標如下:
- 提供參考實作,突顯 Chrome DevTools 和 WebDriver BiDi 通訊協定的功能。
- 增加自動化跨瀏覽器測試的採用率。
- 協助測試新的 DevTools Protocol 和 WebDriver BiDi 功能...並找出錯誤!
- 了解更多關於自動化瀏覽器測試的痛點,並協助填補這些差距。
我們採用 Chromium 原則來協助我們推動產品決策
- 速度:Puppeteer 在自動化頁面上幾乎沒有效能負擔。
- 安全性:Puppeteer 相對於瀏覽器在進程外運作,因此可以安全地自動化潛在惡意頁面。
- 穩定性:Puppeteer 不應該不穩定,也不應該洩漏記憶體。
- 簡潔性:Puppeteer 提供高階 API,易於使用、理解和除錯。
問:Puppeteer 可以取代 Selenium 嗎?
Puppeteer 是基於 Node.js 的參考實作,說明如何使用 CDP 和 WebDriver BiDi 自動化瀏覽器,Selenium 專案也在為相同的網路標準做出貢獻。
Selenium 專案在多個方面超越了 Puppeteer 的功能:它提供的繫結支援的語言不只有 JavaScript,而且也提供在大型環境中協調自動化的工具,例如 Selenium Grid。這兩者都超出了 Puppeteer 的範圍。
有些社群專案為 Puppeteer 的核心功能增加了額外功能,讓測試等事項更加方便。例如,請參閱
問:為什麼 Puppeteer v.XXX 無法與特定版本的 Chrome 或 Firefox 搭配使用?
每個 Puppeteer 版本都與特定的瀏覽器版本緊密捆綁在一起,以確保與底層通訊協定(Chrome DevTools Protocol 和 WebDriver BiDi)的實作相容。
這是為了防止 Chrome 或 Firefox 中的變更意外中斷 Puppeteer。
問:Puppeteer 使用哪個 Chrome 和 Firefox 版本?
請在 revisions.ts 中尋找 chrome
和 firefox
項目。
問:什麼被視為「導覽」?
從 Puppeteer 的角度來看,「導覽」是指任何會變更頁面 URL 的項目。除了瀏覽器連線網路以從網路伺服器擷取新文件的常規導覽外,這還包括 錨點導覽 和 History API 的使用。
藉由「導覽」的定義,Puppeteer 可以與單頁應用程式無縫協作。
問:「受信任」與「不受信任」的輸入事件之間有何差異?
在瀏覽器中,輸入事件可以分為兩大類:受信任與不受信任。
- 受信任的事件:使用者與頁面互動所產生的事件,例如使用滑鼠或鍵盤。
- 不受信任的事件:Web API 產生的事件,例如
document.createEvent
或element.click()
方法。
網站可以使用以下方法來區分這兩大類:
- 使用
Event.isTrusted
事件旗標 - 偵測伴隨事件。例如,每個受信任的
'click'
事件之前都會有'mousedown'
和'mouseup'
事件。
為了自動化,產生受信任的事件非常重要。所有使用 Puppeteer 產生的輸入事件都是受信任的,並且會觸發適當的伴隨事件。如果因為某些原因需要不受信任的事件,則始終可以使用 page.evaluate
跳到頁面內容,然後產生偽造事件。
await page.evaluate(() => {
document.querySelector('button[type=submit]').click();
});
問:Puppeteer 支援媒體和音訊播放嗎?
Puppeteer 預設使用 Chrome for Testing 二進位檔,其中從 M120 開始隨附專有編碼解碼器支援。
問:我在測試環境中安裝/執行 Puppeteer 時遇到問題。我應該在哪裡尋求協助?
我們有針對各種作業系統的疑難排解指南,其中列出了所需的相依性。
問:我還有其他問題!我應該在哪裡提問?
有很多種方式可以獲得 Puppeteer 的協助
- 如有問題:Stack Overflow
- 如需錯誤報告:GitHub Issues
請務必在發布問題之前搜尋這些管道。