Selenium 与 Puppeteer:该选择哪一个?
比较 Puppeteer 和 Selenium 可帮助您选择合适的网络自动化和测试工具。Puppeteer 于五年前问世,由于功能强大且适用于许多不同的用例,因此迅速流行起来。另一方面,Selenium 早在 2004 年就已问世,至今仍是网络自动化的宠儿。它可以与许多不同的编程语言和系统配合使用。我将带您详细比较这两个框架,以便您决定哪一个更适合您的需求。
主要功能和使用案例
Selenium
Selenium 是一种测试工具,它不仅支持 Chrome 和 Chromium 浏览器,还支持 Firefox、Safari、Opera 和 Microsoft Edge。您可以用 JavaScript、Ruby、C#、Java 或 Python 编写 Selenium 脚本,这样开发人员就可以用自己喜欢的语言运行高级测试,并使用一种工具测试各种浏览器。
Selenium 还有 Selenium WebDriver、Selenium IDE 和 Selenium Grid 等附加组件。这些附加组件使 Selenium 更加强大,帮助用户满足不同的测试要求。
Selenium 可用于各种任务,例如:
- 自动化测试。
- 网络应用程序测试。
- 网络性能测试。
- 性能测试。
- 数据搜刮(您可以在我们详细的 Selenium 教程中学习如何使用 Python 进行网络搜刮)。
Puppeteer
Puppeteer 主要是一个用于自动测试的 Node.js 库。谷歌开发它是为了使用 DevTools 协议控制 Chrome 和 Chromium。
Selenium 支持多种编程语言,而 Puppeteer 则不同,它只专注于 JavaScript。它就像 Chrome 浏览器的遥控器,提供特定的控制结构。Puppeteer 专注于 JavaScript 和 Chrome 浏览器,从而简化了测试,这与 Selenium 不同,后者的方法更广泛。
Puppeteer 被开发人员广泛用于执行各种任务:
- 使用 Puppeteer 可简化 Chrome 浏览器扩展的测试。
- 它可帮助截图和创建 PDF,用于用户界面测试。
- Puppeteer 可帮助在最新的 Chromium 版本上进行测试。
- 表单提交和键盘输入等手动测试流程可通过 Puppeteer 实现自动化。
- 它还可以方便地执行网络搜索任务,并提供详细的教程指导。
优缺点
要确定哪种工具最适合您的需求,关键是要比较 Puppeteer 和 Selenium 的优缺点。让我们在本节中分析这两种工具的主要优缺点。
Selenium
优势
- 可与多种浏览器、平台和编程语言配合使用。
- 包括用于测试和自动化的 WebDriver、IDE 和 Grid 等内置工具。
- 轻松与 CI/CD 集成,增强功能。
缺点
- 安装可能比较复杂,因为它支持多种平台、语言和浏览器。
- 不提供与 Puppeteer 相同的性能管理功能。
- 学习硒是一项挑战。
Puppeteer
优势
- 使用 DevTools 协议控制广泛使用的浏览器 Chrome 浏览器。
- Puppeteer 运行速度更快,因为它只使用一种浏览器和一种语言。
- 由于不需要单独的浏览器驱动程序,因此需要的依赖性更少。
- 提供屏幕截图和负载性能记录等性能管理工具。
缺点
- 仅支持 JavaScript 编程。
- 仅限于使用 Chrome 浏览器。
设置和网络抓取的区别
安装
设置 Puppeteer 和 Selenium 环境非常简单。关键区别在于所需的库。Puppeteer 用户只需一条 npm 命令即可安装。另一方面,Selenium 用户必须遵循特定语言的安装说明。
Selenium
- npm install selenium-webdriver
- npm install chromedriver
Puppeteer
- npm install puppeteer
浏览器控制和网络抓取
这两种工具都能让你通过代码控制网页浏览器。你可以通过它从网页中抓取动态内容。让我们来比较一下如何完成一些关键任务,如启动无头 Chrome 浏览器、导航到网页、等待加载内容并抓取内容。
我们将使用 http://quotes.toscrape.com/js/ 用于我们的刮擦。这是一个动态页面,报价通过 JavaScript 加载。报价显示在 <DIV 元素,每个元素都有一个引用类。
步骤 1 - 依赖关系和设定目标
硒:
- const { Builder, By, Key, until } = require('selenium-webdriver');
- const chrome = require('selenium-webdriver/chrome');
- const url = 'http://quotes.toscrape.com/js/';
木偶师
- const puppeteer = require('puppeteer');
- const url = 'http://quotes.toscrape.com/js/';
Selenium 适用于不同的浏览器,需要它们的驱动程序(如 Chrome 浏览器驱动程序)。Puppeteer 已包含 Chrome 浏览器驱动程序,因此无需单独导入。
第 2 步 - 启动无头 Chrome 浏览器会话并访问所需 URL
硒:
- let driver = await new Builder().forBrowser('chrome') .setChromeOptions(new chrome.Options().headless()).build();
- await driver.get(url);
木偶师
- const headlessBrowser = await puppeteer.launch({ headless: true });
- const newTab = await headlessBrowser.newPage();
- await newTab.goto(url);
Puppeteer 使用 awaitable launch() 方法启动浏览器。然后,它使用 newPage() 方法创建一个新的浏览器标签页。之后,标签页可以使用 goto() 方法浏览任何 URL。
相比之下,Selenium 使用 Builder() 构造函数创建一个新的 Builder 实例,然后再添加特定选项。最后,build() 方法会生成并返回一个新的 webdriver 会话实例。
请记住,您需要将可等待调用放在异步函数中。
第 3 步 - 等待加载动态内容。
现在,让我们比较一下 Puppeteer 和 Selenium 如何处理等待加载特定 JavaScript 内容的问题。下面的代码演示了等待 <Div 元素,其中包含要加载的引用类。
硒:
- await driver.wait(until.elementLocated(By.className('quote'));
木偶师
- await newTab.waitForSelector('.quote');
在 Puppeteer 中,您使用 waitForSelector() 方法来等待特定元素加载。同时,在 Selenium 中,您可以使用 wait() 方法和 until 属性来实现相同的等待行为。
第 4 步 - 搜索报价
在 Puppeteer 中,您可以使用 querySelectorAll() 方法,根据提供的 CSS 选择器选择并获取所有匹配元素的列表。相反,Selenium 提供了 findElements() 方法,用于检索与指定 By 选择器匹配的相关元素。
硒:
let quotes = await driver.findElements(By.className('quote'));
let quotesString = "";
for (let quote of quotes) {
let qouteText = await quote.findElement(By.className('text')). getText();
quotesString += `${qouteText} \n`;
}
console.log(quotesString);
木偶师
let quotes = await newTab.evaluate(() => {
let allQuoteDivs = document.querySelectorAll(".quote");
let quotesString= "";
allQuoteDivs.forEach((quote) => {
let qouteText = quote.querySelector(".text").innerHTML;
quotesString += `${qouteText} \n`;
});
return quotesString;
});
console.log(quotes);
Puppeteer 中的 evaluate() 方法可在当前页面上下文中运行函数。这样,你就能与当前页面的文档对象模型(DOM)中的元素进行交互,并对其进行修改。最终,你可以从函数中返回一个值,就像本例中的 quotesString。
步骤 #5 - 关闭浏览器
Puppeteer 使用 close() 方法关闭浏览器实例,而 Selenium 使用 quit() 方法退出浏览器实例并终止驱动程序会话。
硒:
- await driver.quit();
木偶师
- headlessBrowser.close();
Puppeteer 与 Selenium:2025 年孰优孰劣
Puppeteer 和 Selenium 是两款流行的网络浏览器自动化工具,但它们有一些关键区别。下面是详细介绍:

您应该选择哪一种?
在 Puppeteer 和 Selenium 之间做出选择取决于你的具体需求。如果你主要使用 Chrome 浏览器,那么 Puppeteer 是最佳选择。它简单易用的功能让你可以很好地控制浏览器,从而提高测试设置的效率。此外,Puppeteer 更专注于网络自动化,对于网络爬行和刮擦等任务非常方便。
但是,如果您需要使用不同的浏览器和编程语言,请选择 Selenium。它的 WebDriver 支持各种浏览器,允许直接交互。这就扩大了测试的可能性,而不需要额外的工具。我发现,当跨浏览器兼容性至关重要时,Selenium 尤其有用。因此,在决定哪种工具最适合您的需求之前,请仔细考虑您的要求。
最后的话
在本文中,我比较了两种最流行的自动化框架:Puppeteer 和 Selenium。它们各有特点和优势。我的目的是帮助您确定具体的项目要求,并选择最合适的工具。
如果您不确定在数据收集项目中使用哪种工具,请浏览我的其他网络搜刮工具比较。我还概述了 顶级抗检测浏览器 以帮助决策。
考虑尝试先进的网络刮擦解决方案,这些解决方案具有简化流程的内置功能。无论是收集数据还是测试网站,都有很多工具可以提高效率!