开源爬虫神器,Playwright vs Puppeteer 对比,你应该选择哪个?
Playwright是一個用于瀏覽器自動化的 Node.js庫。 Puppeteer也是一個用于瀏覽器自動化的 Node.js 庫。讓我們看看它們的歷史由來,并考慮在實際使用應(yīng)該如何選擇。Angular 團隊對自動化框架進行了調(diào)查,自動化測試框架的使用比例,如下圖所示
圖片來自TestCafe vs Cypress: Core Differences | BrowserStack
測試自動化有哪些類似的開源工具?
歷史背景
首先了解一些歷史背景可能會有所幫助。瀏覽器自動化并不是一項新技術(shù)。
Selenium
Selenium自 2004 年以來一直存在,很長一段時間以來,它都是該類別的首選工具。雖然它的主要用例是為網(wǎng)站實現(xiàn)測試套件,但程序員也將它用于截屏或在網(wǎng)站不提供 API 時自動執(zhí)行任務(wù)。
然而,Selenium 以不可靠而著稱。Selenium 測試通常是不穩(wěn)定的,由于難以重現(xiàn)的非顯而易見的原因而間歇性地失敗。
Selenium 也相當耗費資源,部分原因是它通常用于運行完整的瀏覽器。最終,在某些情況下,程序員開始使用無頭瀏覽器。這些瀏覽器完成了完整瀏覽器的大部分工作,但它們實際上并不呈現(xiàn) UI。PhantomJS是比較流行的一種。
無頭瀏覽器可以很好地測試更簡單的網(wǎng)站,但要測試網(wǎng)站可以做的所有事情,它們需要通過支持各種 Web 標準來盡可能接近地模擬完整的瀏覽器。然而,由于瀏覽器變得如此復(fù)雜,全面的支持幾乎是一項不可能完成的任務(wù)。
2017年,PhantomJS 的作者棄用了它,他這樣做的原因是谷歌宣布了無頭 Chrome,它首先在 Chrome 59 中可用。Firefox 在當年晚些時候跟進了無頭模式。這些發(fā)展使得針對人們實際使用的瀏覽器編寫高效的測試和腳本成為可能。
優(yōu)勢
缺點
Puppeteer
2017年,谷歌公開發(fā)布了 Puppeteer,跟進了無頭 Chrome 。Chrome DevTools 團隊開發(fā)了它,使其比其他類似項目具有重大優(yōu)勢,因為它得到了世界上使用最廣泛的瀏覽器的同一家公司的機構(gòu)支持。
Puppeteer 可以驅(qū)動 Chrome 或 Chromium(所基于Chrome的開源瀏覽器),默認情況下,安裝 Puppeteer 還會下載兼容版本的 Chromium。這避免了您的瀏覽器最終獲得破壞 Puppeteer 的更新的其他可能情況。
圖片來自知乎,puppeteer vs selenium 比較
Puppeteer 讓瀏覽器自動化的入門變得容易。這部分是因為它與瀏覽器的交互方式。Selenium 使用WebDriver 協(xié)議,該協(xié)議需要運行一個充當 Selenium 和瀏覽器之間中介的服務(wù)器。例如,有ChromeDriver、 geckodriver(用于 Firefox)和 safaridriver。這種對特殊服務(wù)器的要求增加了復(fù)雜性。
相比之下,Puppeteer 使用非標準DevTools 協(xié)議控制 Chrome ,因此它直接與瀏覽器對話,并通過 Selenium 提供額外的功能,例如 攔截網(wǎng)絡(luò)請求。
優(yōu)勢
缺點
Playwright
當 Microsoft 于2020 年 1 月 31 日發(fā)布Playwright的第一個公共版本時,我們獲得了一個新選項。
如果您比較Playwright和 Puppeteer的貢獻者頁面 ,您會注意到Puppeteer的前兩個貢獻者現(xiàn)在在 Playwright 上工作。Puppeteer 團隊實質(zhì)上是從 Google 轉(zhuǎn)移到 Microsoft 并成為 Playwright 團隊。
因此,Playwright 在很多方面與 Puppeteer 非常相似。API 方法在大多數(shù)情況下是相同的,并且默認情況下 Playwright 還捆綁了兼容的瀏覽器。
Playwright 最大的區(qū)別在于跨瀏覽器支持。它可以驅(qū)動 Chromium、WebKit(Safari 的瀏覽器引擎)和 Firefox。
您可以在Is Playwright Ready?中查看測試套件的狀態(tài)。
尚未與 WebKit 和 Firefox 團隊一起開發(fā),Playwright 團隊可能無限期地維護這些瀏覽器的更新而更新,這可能會影響 Playwright 跨瀏覽器支持的長期可靠性。
最后一個值得注意的區(qū)別是 Playwright 具有更強大的瀏覽器上下文功能,可讓您使用單個瀏覽器實例模擬多個設(shè)備。每個瀏覽器上下文在 cookie、本地存儲等方面都與其他上下文隔離,每個上下文也可以在其下有多個頁面。
優(yōu)勢
如何選擇
因為 Playwright 和 Puppeteer 很大程度上是由同一個團隊開發(fā)的,并且有如此相似的 API,所以從 Puppeteer 遷移到 Playwright并不太難。然而,您不應(yīng)該僅僅因為 Playwright 較新而選擇 Playwright,因為在此之前 API可能會發(fā)生重大變化 。
要考慮的三個主要因素:跨瀏覽器支持、長期維護支持以及瀏覽器自動化的特定用例。
對于跨瀏覽器支持,重要的是要知道 Puppeteer最近添加了對驅(qū)動 Firefox 的實驗性支持,并且無需修補 Firefox 就可以做到這一點。
但是,似乎沒有任何關(guān)于 Puppeteer 支持 WebKit 的公開工作。請注意,即使是 iOS上的第三方瀏覽器 也需要使用 WebKit 作為其引擎。因此,如果對您的 iOS 用戶進行測試很重要,那么 Playwright 應(yīng)該很有吸引力。
另一方面,許多團隊認為測試多個瀏覽器(通常是 Chrome)不值得邊際收益。Playwright 可以選擇的原因,因為它使跨瀏覽器支持更容易。但是,我們不確定 Playwright 修補 Firefox 和 WebKit 的方法是否會在長期更新緊湊。
無論如何,慶幸 Puppeteer 仍在積極開發(fā)中,絕不是因為最初的開發(fā)人員的離開,而被放棄的項目。這是 Chrome 團隊支持的好處。
最后,決定使用哪一個取決于你的實際應(yīng)用。如果您正在執(zhí)行諸如自動化網(wǎng)站工作流程或截取屏幕截圖之類的工作,那么跨瀏覽器支持對您來說可能并不重要。
堅持使用 Selenium ,因為網(wǎng)絡(luò)上已經(jīng)在 Selenium 方面積累了多年的解決用例,您不必僅僅因為有新的選擇而放棄它。
結(jié)論
總的來說,技術(shù)框架的選擇,適合自己的才是最好。
本文來自我的個人站點:《開源爬蟲神器,Playwright vs Puppeteer 對比,你應(yīng)該選擇哪個?》
總結(jié)
以上是生活随笔為你收集整理的开源爬虫神器,Playwright vs Puppeteer 对比,你应该选择哪个?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机专业术语简单释义
- 下一篇: VS 2017生成exe(msi)文件