Playwright与Selenium指南

了解 Playwright 和 Selenium,基于它们提供的功能、灵活性和性能、社区支持、浏览器支持、设置和易用性来评估这些工具。
2 min read
Playwright与Selenium指南

如果你想抓取使用 JavaScript 的动态网站,推荐使用浏览器自动化工具。这些工具可以通过代码操作浏览器并抓取显示在浏览器中的信息。

有多种浏览器自动化工具可供选择,如PuppeteerSeleniumPlaywright。本文将重点介绍 Playwright 和 Selenium,并根据它们提供的功能、灵活性和性能、社区支持、浏览器支持、设置和易用性进行评审。

着急吗?这里有一个快速比较:

标准 Playwright Selenium
设置和易用性 提供简单明了的设置,特别适合熟悉 Node.js 和 JavaScript 的用户。 设置和配置可能比较复杂,尤其是对网络自动化新手来说。
提供的功能 提供跨浏览器支持、无头模式、自动等待机制和强大的交互能力等高级功能。 支持深入的网页元素交互、多语言支持和与各种测试框架的集成。
灵活性和性能 高性能且资源利用效率高。跨浏览器兼容性增强了其灵活性。 相比无头浏览器速度较慢,但在多语言和多浏览器支持方面提供灵活性。
社区支持 相对较新,社区正在成长;社区资源可能不如 Selenium 丰富。 受益于成熟且庞大的社区,提供丰富的资源和支持。

Playwright

Playwright 是一个开源库,用于自动化 Chromium、Firefox 和 WebKit 浏览器。在网页抓取中,Playwright 因其能够处理现代 Web 应用和传统网站而脱颖而出。它允许自动化导航、交互和数据提取,为复杂的抓取任务提供了全面的环境。

优点

Playwright 为网页抓取提供了几个优点:

  • 跨浏览器支持:无缝支持 Chromium、Firefox 和 WebKit。
  • 无头模式:在无头环境中抓取,适合基于服务器的自动化。
  • 一致的 API:在所有浏览器中提供统一的 API,简化脚本开发。
  • 强大的交互能力:支持多页场景和网络拦截等高级交互。
  • 自动等待机制:在交互前自动等待元素准备好,减少错误。

缺点

尽管优势明显,但使用 Playwright 也有一些缺点:

  • 高资源消耗:在运行多个实例时可能消耗大量系统资源。
  • 浏览器特定行为:某些功能在不同浏览器中的行为或支持可能不同。
  • 需要 Node.js 熟练度:有效使用 Playwright 需要掌握 Node.js 及其异步模式。
  • 新兴社区:作为相对较新的工具,可能比更成熟的工具有较少的社区资源和解决方案。
  • 检测风险:尽管具备复杂的自动化能力,但仍有被高级机器人检测系统标记的风险。

Selenium

Selenium 是一个久负盛名的开源框架,用于自动化网络浏览器。它在网页抓取中被广泛使用,通过编程控制浏览器,从网站中提取有价值的数据。Selenium 支持多种编程语言和浏览器,成为多样化网页抓取需求的灵活选择。

优点

Selenium 在网页抓取方面提供了几个关键优点:

  • 多语言支持:兼容 Java、Python、C# 和 Ruby 等多种编程语言。
  • 跨浏览器兼容性:支持 Chrome、Firefox、Internet Explorer 和 Safari 等主流浏览器。
  • 成熟社区:受益于庞大且活跃的社区和丰富的资源。
  • 对网页的详细控制:能够深入交互网页元素。
  • 与测试框架集成:轻松集成各种测试框架,有助于自动化测试场景。

缺点

然而,使用 Selenium 进行网页抓取也存在一些局限性:

  • 复杂的设置:设置和配置可能具有挑战性,尤其是对初学者而言。
  • 较慢的性能:由于控制完整浏览器的开销,速度往往比无头浏览器慢。
  • 资源密集型:运行多个浏览器实例时需要大量系统资源。
  • 可见性:作为一个完整的浏览器自动化工具,更容易被反抓取技术检测到。
  • 依赖 Web 驱动程序:依赖浏览器特定的驱动程序,这可能会带来维护和更新的麻烦。

现在我们已经介绍了主要的优缺点,是时候比较两者了!

设置和易用性

Playwright 和 Selenium 都支持多种编程语言,包括通过绑定支持 Java、Python 和 JavaScript。这些绑定是特定语言的实现,使用相同的 API。要开始使用 Playwright 或 Selenium,你需要下载适用于你的语言的绑定库。

例如,如果你使用 Python,需要下载并安装pytest-playwright库,或在使用 Selenium 时安装selenium库。

然而,安装 Selenium 还需要一步额外操作:你需要下载用于浏览器的 WebDriver。例如,如果你想用 Chrome 进行抓取,需要下载ChromeDriver。相比之下,Playwright 只需一个驱动程序,并通过运行命令playwright install下载所有支持浏览器的必要二进制文件。

一旦一切设置好,两者的库的操作非常相似,如果你有网页抓取的经验,应该很容易上手。然而,如果你是初学者,Playwright 提供了更简洁的 API 和强大的调试功能,帮助你顺利创建第一个脚本。此外,Playwright 的文档更现代,更适合初学者。

总而言之,Selenium 和 Playwright 都很容易上手;然而,Playwright 的体验更加无缝,更少不必要的困惑。

提供的功能

Playwright 和 Selenium 都提供所有必要的基本元素定位功能。你可以使用 CSS 或 XPath 选择器定位元素:

# Playwright
heading = page.locator('h1')
accept_button = page.locator('//button[text()="Accept"]')

# Selenium
heading = driver.find_element(By.CSS_SELECTOR, 'h1')
accept_button = driver.find_element(By.XPATH, '//button[text()="Accept"]')

Playwright 提供额外的定位器,可以查询文本、占位符、标题和角色等属性。这些使开发人员可以编写更清晰的定位函数,并且对于尚不熟悉如何使用选择器实现这些定位的新手非常有帮助:

accept_button = page.get_by_text("Accept")

在抓取 Web 应用时,准确的操作时机非常重要。你需要确保不在尚未出现的元素上执行操作,也不需要长时间等待元素加载。

为此,Selenium 使用显式等待语句。例如,它们可以指示脚本等待元素加载到页面上:

el = WebDriverWait(driver, timeout=3).until(lambda x: x.find_element(By.TAG_NAME,"button"))
el.click()

相比之下,Playwright 的等待机制更简单。在对元素执行操作之前,Playwright 会自动运行一系列可操作性检查。这意味着无法尝试点击尚未可见的元素:

page.get_by_role("button").click()

两种工具还提供了几项显著的代码调试和生成的生活质量功能。例如,Playwright Inspector使你可以逐步执行脚本并查看出错位置——无需再重复运行相同的脚本数百万次!

如果你想在不在 HTML 中搜索选择器的情况下创建脚本,Playwright 提供了记录选项代码生成器。该生成器记录你进行的操作,并提供执行这些操作的代码。这是初学者熟悉该库的最佳方式之一。

虽然代码生成器生成的代码由于选择器的特定性而不适用于抓取信息,但专家可以发现它在生成抓取前发生的设置操作(如登录帐户或导航到正确页面)方面非常有用。

Selenium 也有一个播放和录制工具,称为Selenium IDE,作为 Chrome 和 Firefox 的浏览器扩展提供。Selenium IDE 作为播放和录制工具,允许在浏览器环境中直接记录 Selenium 脚本。此工具将 Playwright Inspector 和代码生成器的功能组合在一个简单易用的软件包中。

灵活性和性能

如前所述,Playwright 和 Selenium 由多种语言支持。Playwright 官方支持 JavaScript/TypeScript、Java、Python 和 C#。Selenium 官方支持 Java、C#、Python、JavaScript、Ruby 和 Kotlin。

除了官方支持的语言,语言还可以有非官方绑定库,用于实现相同的效果。其中,Selenium 更受欢迎,大多数编程语言至少有一个绑定库。这意味着如果选择使用 Selenium,最终可以在遇到的任何编程语言中使用它进行抓取。

根据大多数基准测试,Playwright 明显比 Selenium 更快。由于它们都驱动真实的网络浏览器(虽然通常不进行 GUI 渲染以节省资源),工具的效率有其极限。然而,Playwright 开发人员实施了许多优化,使脚本执行更快、更易于并行化。

目前,两种工具都支持上下文,类似于浏览器的无痕模式——它允许你在一个浏览器中运行多个独立会话,节省浏览器启动成本,同时在隔离中运行脚本。然而,Playwright 的上下文实现带来了比 Selenium 更大的性能收益,因为你可以并行运行多个上下文,从而进一步加快抓取速度。

社区支持

Selenium 和 Playwright 都有出色的社区支持,并被许多网页抓取专家使用,因此很容易找到任何主题的教程。

由于 Selenium 比 Playwright 更早,它有更多时间积累文档和教程,涵盖其广泛的功能。无论你想使用什么功能,它很可能已经被开发团队和社区广泛记录。此外,如果你在使用 Selenium 时需要帮助,有很多地方可以获得解答。

相比之下,Playwright 积累的资料较少,但其开发人员团队会解释和介绍新功能,这些功能由 Microsoft 开发并带来。其文档 arguably 更清晰现代,使初学者更容易使用。

有关如何使用 Playwright 的提示和教程,你可以访问官方博客YouTube 频道。如果你想加入 Playwright 社区,团队有一个社区Discord 频道

结论

当你比较 Playwright 和 Selenium 时,Playwright 绝对是一个拥有许多新功能的闪亮工具,而 Selenium 是一个性能稳定且足够专家使用的工具。如果你刚开始学习网页抓取,Playwright 更适合,因为它对初学者的支持更好。

无论选择 Playwright 还是 Selenium 进行网页抓取,Bright Data代理都可以轻松集成这两种浏览器自动化工具。请按照我们的逐步指南进行Playwright 代理集成Selenium 代理集成。加入最大的代理网络并获得免费试用。

常见问题解答

什么是 Playwright?

Playwright 是一个用于自动化 Chromium、Firefox 和 WebKit 浏览器的库,支持多种语言。

什么是 Selenium?

Selenium 是一个用于浏览器自动化的框架,支持多种语言和浏览器。

Playwright 与 Selenium 在设置上有何不同?

Playwright 提供了更简单的设置,特别是对 JavaScript 用户;Selenium 的设置更复杂。

哪一个性能更好,Playwright 还是 Selenium?

Playwright 通常提供更快的性能和效率,尤其是在无头模式下。

哪个社区支持更好,Playwright 还是 Selenium?

Selenium 有一个更成熟和广泛的社区,而 Playwright 的社区较新但正在增长。