開源爬蟲神器,Playwright vs Puppeteer 對比,你應該選擇哪個?


Playwright是一個用於瀏覽器自動化的 Node.js庫。 Puppeteer也是一個用於瀏覽器自動化的 Node.js 庫。讓我們看看它們的歷史由來,並考慮在實際使用應該如何選擇。Angular 團隊對自動化框架進行了調查,自動化測試框架的使用比例,如下圖所示

圖片來自https://www.browserstack.com/guide/testcafe-vs-cypress

測試自動化有哪些類似的開源工具?

  1. WebdriverIO :一個使用 Selenium WebDriver 的基於 JavaScript 的測試自動化框架。
  2. Playwright:微軟的自動化測試框架。
  3. NightWatchJS:用 NodeJS 編寫的端到端測試解決方案。
  4. Selenium Webdriver:用於測試自動化的 Selenium 核心庫。
  5. Puppeteer 是一個提供高級 API 來控制無頭 Chrome NodeJS 庫,Chrome團隊支持的項目。

歷史背景

首先了解一些歷史背景可能會有所幫助。瀏覽器自動化並不是一項新技術。

Selenium

Selenium自 2004 年以來一直存在,很長一段時間以來,它都是該類別的首選工具。雖然它的主要用例是為網站實現測試套件,但程序員也將它用於截屏或在網站不提供 API 時自動執行任務。

然而,Selenium 以不可靠而著稱。Selenium 測試通常是不穩定的,由於難以重現的非顯而易見的原因而間歇性地失敗。

Selenium 也相當耗費資源,部分原因是它通常用於運行完整的瀏覽器。最終,在某些情況下,程序員開始使用無頭瀏覽器。這些瀏覽器完成了完整瀏覽器的大部分工作,但它們實際上並不呈現 UI。PhantomJS是比較流行的一種。

無頭瀏覽器可以很好地測試更簡單的網站,但要測試網站可以做的所有事情,它們需要通過支持各種 Web 標准來盡可能接近地模擬完整的瀏覽器。然而,由於瀏覽器變得如此復雜,全面的支持幾乎是一項不可能完成的任務。

2017年,PhantomJS 的作者棄用了它,他這樣做的原因是谷歌宣布了無頭 Chrome,它首先在 Chrome 59 中可用。Firefox 在當年晚些時候跟進了無頭模式。這些發展使得針對人們實際使用的瀏覽器編寫高效的測試和腳本成為可能。

優勢

  1. 歷史悠久:2004年發布,在網上可以搜到很多相關的主題
  2. 目前最主流的瀏覽器(web頁面)自動化工具,支持眾多瀏覽器:ChromeFirefoxSafariIEOpera
  3. 支持眾多編程語言:JavaC#、Python、Ruby等
  4. 通過Selenium IDE支持錄制功能
  5. 支持測試平台:Web、(通過Appium)支持移動端

缺點

  1. 速度相對(Puppeteer)慢一點
  2. 安裝和設置相對(Puppeteer)麻煩一些
  3. 不支持跨平台
  4. 截圖只支持圖片

Puppeteer

2017年,谷歌公開發布了 Puppeteer,跟進了無頭 Chrome 。Chrome DevTools 團隊開發了它,使其比其他類似項目具有重大優勢,因為它得到了世界上使用最廣泛的瀏覽器的同一家公司的機構支持。

Puppeteer 可以驅動 Chrome 或 Chromium(所基於Chrome的開源瀏覽器),默認情況下,安裝 Puppeteer 還會下載兼容版本的 Chromium。這避免了您的瀏覽器最終獲得破壞 Puppeteer 的更新的其他可能情況。

圖片來自知乎,puppeteer vs selenium 比較

Puppeteer 讓瀏覽器自動化的入門變得容易。這部分是因為它與瀏覽器的交互方式。Selenium 使用WebDriver 協議,該協議需要運行一個充當 Selenium 和瀏覽器之間中介的服務器。例如,有ChromeDriver、 geckodriver(用於 Firefox)和 safaridriver。這種對特殊服務器的要求增加了復雜性。

相比之下,Puppeteer 使用非標准DevTools 協議控制 Chrome ,因此它直接與瀏覽器對話,並通過 Selenium 提供額外的功能,例如 攔截網絡請求。

優勢

  1. 速度相對快一些,安裝和設置相對簡單
  2. 截圖支持圖片和PDF
  3. 抓取 SPA(單頁應用程序)並生成預渲染內容(即“SSR”(服務器端渲染))
  4. 自動化表單提交、UI 測試、鍵盤輸入等
  5. 可以使用最新的 JavaScript 和瀏覽器功能,直接在最新版本的 Chrome 中運行測試。
  6. 捕獲您網站的時間線軌跡以幫助診斷性能問題
  7. 測試 Chrome 擴展程序

缺點

  1. 測試平台只支持:Web(所基於Chrome的開源瀏覽器)

Playwright

當 Microsoft 於2020 年 1 月 31 日發布Playwright的第一個公共版本時,我們獲得了一個新選項。

如果您比較Playwright和 Puppeteer的貢獻者頁面 ,您會注意到Puppeteer的前兩個貢獻者現在在 Playwright 上工作。Puppeteer 團隊實質上是從 Google 轉移到 Microsoft 並成為 Playwright 團隊。

因此,Playwright 在很多方面與 Puppeteer 非常相似。API 方法在大多數情況下是相同的,並且默認情況下 Playwright 還捆綁了兼容的瀏覽器。

Playwright 最大的區別在於跨瀏覽器支持。它可以驅動 Chromium、WebKit(Safari 的瀏覽器引擎)和 Firefox。

您可以在Is Playwright Ready 中查看測試套件的狀態。

尚未與 WebKit 和 Firefox 團隊一起開發,Playwright 團隊可能無限期地維護這些瀏覽器的更新而更新,這可能會影響 Playwright 跨瀏覽器支持的長期可靠性。

最后一個值得注意的區別是 Playwright 具有更強大的瀏覽器上下文功能,可讓您使用單個瀏覽器實例模擬多個設備。每個瀏覽器上下文在 cookie、本地存儲等方面都與其他上下文隔離,每個上下文也可以在其下有多個頁面。

優勢

  1. 跨越多個頁面、域和 iframe 的場景
  2. 在執行操作(如單擊、填充)之前自動等待元素准備好(UI已經呈現)
  3. 攔截網絡活動以存根和模擬網絡請求
  4. 模擬移動設備、地理位置、權限。這包括適用於 Android Chrome Android WebView
  5. 模擬鼠標和鍵盤的本機輸入事件
  6. 上傳和下載文件

如何選擇

因為 Playwright 和 Puppeteer 很大程度上是由同一個團隊開發的,並且有如此相似的 API,所以從 Puppeteer 遷移到 Playwright並不太難。然而,您不應該僅僅因為 Playwright 較新而選擇 Playwright,因為在此之前 API可能會發生重大變化 。

要考慮的三個主要因素:跨瀏覽器支持、長期維護支持以及瀏覽器自動化的特定用例

對於跨瀏覽器支持,重要的是要知道 Puppeteer最近添加了對驅動 Firefox 的實驗性支持,並且無需修補 Firefox 就可以做到這一點。

但是,似乎沒有任何關於 Puppeteer 支持 WebKit 的公開工作。請注意,即使是 iOS上的第三方瀏覽器 也需要使用 WebKit 作為其引擎。因此,如果對您的 iOS 用戶進行測試很重要,那么 Playwright 應該很有吸引力。

另一方面,許多團隊認為測試多個瀏覽器(通常是 Chrome)不值得邊際收益。Playwright 可以選擇的原因,因為它使跨瀏覽器支持更容易。但是,我們不確定 Playwright 修補 Firefox 和 WebKit 的方法是否會在長期更新緊湊。

無論如何,慶幸 Puppeteer 仍在積極開發中,絕不是因為最初的開發人員的離開,而被放棄的項目。這是 Chrome 團隊支持的好處。

最后,決定使用哪一個取決於你的實際應用。如果您正在執行諸如自動化網站工作流程或截取屏幕截圖之類的工作,那么跨瀏覽器支持對您來說可能並不重要。

堅持使用 Selenium ,因為網絡上已經在 Selenium 方面積累了多年的解決用例,您不必僅僅因為有新的選擇而放棄它。

結論

總的來說,技術框架的選擇,適合自己的才是最好

本文來自我的個人博客:開源爬蟲神器,Playwright vs Puppeteer 對比,你應該選擇哪個?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM