zoukankan      html  css  js  c++  java
  • 开源爬虫神器,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 对比,你应该选择哪个?

  • 相关阅读:
    各类 HTTP 返回状态代码详解
    ANDROID内存优化——大汇总(转)
    Process Stats:了解你的APP如何使用内存(转)
    Android开发之AlarmManager详解
    转 16 jmeter中的监听器以及测试结果分析
    转 15 jmeter分布式性能测试
    转 14 jmeter性能测试实战--数据库MySQL
    转 12 jmeter性能测试实战--web程序
    转 11 jmeter之图形监控扩展
    转 10 jmeter之动态关联
  • 原文地址:https://www.cnblogs.com/channel9/p/15787166.html
Copyright © 2011-2022 走看看