返回博客

Playwright 网络抓取: 实用教程

网络抓取就像没有剧本的戏剧导演——难以预测、杂乱无章。这就是 Playwright 的用武之地:它是一款功能强大的无头浏览器自动化工具,能让现代动态网站刮擦变得前所未有的顺畅。在本实用教程中,您将学习如何使用 Playwright 从任何网页中可靠地提取数据。

Zilvinas Tamulis

6月 19日, 2025年

8 分钟阅读

什么是 Playwright?

Playwright 是一个现代网络抓取和浏览器自动化框架,可简化从网页中提取数据的过程。它支持多种无头浏览器,包括 Chromium、Firefox 和 WebKit,是一款能满足许多常用开发人员需求的便捷工具。它还提供了一个简单易用的 API,允许开发人员与动态用户界面交互,使用 CSS 选择器定位元素,并轻松提取结构化数据。

虽然 Playwright 是一款新工具,但它凭借其丰富的功能在众多老工具中脱颖而出。它擅长处理现代 JavaScript 繁重的网站,支持 JavaScript、Python 和 C# 等多种编程语言,允许开发人员使用任何首选语言编写脚本。Playwright 还能创建隔离的浏览器上下文,从而在不共享状态的情况下同时对多个页面进行刮擦,使其既高效又安全。可以看出,Playwright 是由深谙网页搜索之道的人创建的,并将所有最好的功能都整合到了这个神奇的框架中。

如果您觉得要获取数据的网站就像威廉莎士比亚的《无事生非》中错综复杂的情节一样复杂——不用担心,Playwright 可以轻松应对任何网络抓取或网络自动化挑战。

​​使用 Playwright 进行网络抓取的方法

Playwright 提供了几种功能强大的网络抓取方法,适用于不同的编程语言,包括 Python、Node.js 和 JavaScript。下面列出了其中几种:

  1. 页面导航。使用 Playwright,您可以使用 page.goto() 等函数导航到网页。这样,您就可以浏览网站的各个页面,当内容不局限于一个页面时,这一点尤其有用。这是一种常用的方法,可用于搜索在多个页面上列出产品的电子商务网站。
  2. 元素选择。Playwright 允许您使用 CSS 选择器或 XPath 选择页面上的元素。无论您的偏好如何,该框架都能让您使用 page.querySelector() 等方法轻松选择 HTML 元素。选定元素后,您可以提取各种类型的数据,包括文本、链接、图像和属性。
  3. 处理动态内容。Playwright 可以通过 page.waitForSelector()page.waitForTimeout() 等待元素加载,从而与 JavaScript 较多的网站进行交互,确保在刮擦之前内容已完全加载。
  4. 与元素互动。 Playwright 允许您模拟点击按钮、填写表格和滚动页面以加载更多内容等操作。page.click() 等方法可以帮助您搜索交互式元素背后的内容。
  5. 处理浏览器上下文。Playwright 支持多个浏览器上下文,因此您可以从不同的网页中抓取数据或模拟用户会话,而不会发生冲突。该功能与可靠的代理服务器配合使用,是在浏览时保持匿名不被发现的好方法。这对于多标签页面搜刮、多账户管理或同时自动执行多个操作非常有用。
  6. 网络拦截。你可以使用 page.route() 拦截网络请求和响应,通过 API 调用收集动态加载的数据,提供了一种直接从网络流量中获取数据的高级方法。
  7. 浏览器自动化。Playwright 可自动执行复杂的工作流程,如登录网站、提交表单和浏览各种页面,因此适用于从具有登录机制或多步骤交互的应用程序中抓取数据。

使用 Playwright 进行网络搜索:分步指南

既然你已经了解了 Playwright 的全部功能,那就让我们开始设置它以进行网络刮擦吧。在本教程中,我们将使用 Node.js,但也可以使用 Python 安装该框架。请按照以下步骤进行设置并立即开始使用:

  1. 安装 Playwright。你可以使用 npmyarnpnpm 获取 Playwright,在终端中输入下面的命令即可。你需要回答一些提示,例如在 TypeScript 和 JavaScript 之间进行选择、测试文件夹的名称以及浏览器:

npm

npm init playwright@latest

yarn

yarn create playwright

ppm

pnpm create playwright

2. 在脚本中加入 Playwright。创建一个新的 JavaScript (.js) 文件,在文件开头加入下面一行。如果安装了 webkit 或 firefox,可以将 chromium 选项换成 webkitfirefox

const { chromium } = require('playwright');

3. 浏览网页。在本例中,我们将从一个名为 ScrapeMe 的网站上提取数据,该网站非常适合进行各种网页刮擦测试。有了下面的代码,你就可以启动一个新的浏览器窗口并导航到网页:

const { chromium } = require('playwright');
(async () => {
// Launch a new browser instance
const browser = await chromium.launch({ headless: false });
// Open a new page
const page = await browser.newPage();
// Navigate to the ScrapeMe website
await page.goto('https://scrapeme.live/shop/');
// After the above actions are performed, close the browser.
await browser.close();
})();

4. 选择并提取特定元素。该网站有一个类似于普通网上商店的商品列表。虽然 Playwright 提供了多种与网页交互的功能,但在本例中,我们只需根据类名从列表中选择第 3 种产品即可。让我们扩展前面的代码:

const { chromium } = require('playwright');
(async () => {
// Launch a new browser instance
const browser = await chromium.launch({ headless: false });
// Open a new page
const page = await browser.newPage();
// Navigate to the ScrapeMe website
await page.goto('https://scrapeme.live/shop/');
// Select all elements matching the class
const productElements = await page.$$('.woocommerce-loop-product__title');
// Access the 3rd element (index 2) and get its text content
const thirdProductTitle = await productElements[2].textContent();
console.log(`3rd Product Title: ${thirdProductTitle}`);
// After the above actions are performed, close the browser.
await browser.close();
})();

该脚本会打开一个浏览器窗口,导航到目标网站,选择具有已定义类的所有元素,然后从具有该类的项目列表中打印第 3 个元素的文本内容。如果您不确定如何检查网站的 HTML 并找到标题的类名,请查看我们的元素检查综合指南。

在这些示例中,我们使用了 headless: false 选项,该选项可使浏览器在执行脚本操作时可见。你可以将其设置为 true,以节省计算机资源,并只在终端中获得结果。

代理实施

虽然 Playwright 允许自动脚本为您工作,但请记住,请求仍然来自您的 IP 地址。为了实现完全匿名和无风险的网络搜索,强烈建议您使用高质量的代理。Decodo 提供一系列高性价比的代理解决方案,包括廉价代理,覆盖 195 个以上国家/地区,平均速度小于 0.3 秒,正常运行时间为 100%,可确保您使用 Playwright 进行的网络搜刮活动不被发现。

要在 Playwright 中使用代理,可以通过浏览器的 launch 或 launchPersistentContext 选项传递代理设置。Playwright 通过接收代理服务器 URL 的代理对象支持代理集成。

以下是如何修改脚本,使其包含带身份验证的代理:

const { chromium } = require('playwright');
(async () => {
// Proxy server
const proxy = 'gate.decodo.com:10001';
// Launch a new browser instance with proxy settings
const browser = await chromium.launch({
headless: false,
proxy: {
server: `http://${proxy}`,
},
});
// Open a new browser context and pass the credentials
const context = await browser.newContext({
httpCredentials: {
username: 'user',
password: 'pass',
},
});
// Open a single page
const page = await context.newPage();
// Check IP on the same page by navigating to the IP check URL
await page.goto('https://ip.decodo.com/ip');
const content = await page.evaluate(() => document.body.innerText);
console.log(`Your IP: ${content}`);
// Navigate to the ScrapeMe website
await page.goto('https://scrapeme.live/shop/');
// Select all elements matching the class
const productElements = await page.$$('.woocommerce-loop-product__title');
// Access the 3rd element (index 2) and get its text content
const thirdProductTitle = await productElements[2].textContent();
console.log(`3rd Product Title: ${thirdProductTitle}`);
// Close the browser
await browser.close();
})();

该脚本会做几件事:首先,它连接到代理服务器,通过不同的 IP 地址发出任何未来请求。然后,它向 Decodo IP 检查器网站发出请求,打印您的 IP 地址,以检查连接是否来自您自己的不同地址。最后,它会向 ScrapeMe 网站发出同样的请求,以打印产品页面的第三个元素。

剧作家与其他框架

Playwright 并不是最流行的网络刮擦工具片尾曲中提到的唯一名字。在搜索最有效的框架时,还有两个有名的名字--Puppeteer Selenium。这些工具与 Playwright 有什么不同,为什么要选择它们?下面是一个简短的比较表:

Playwright

Puppeteer

Selenium

速度

快速(支持现代浏览器)

快速(仅适用于基于 Chromium 的浏览器

速度较慢(支持旧版浏览器)

特点

先进的自动化,支持跨浏览器

专注于 Chromium;其他浏览器功能较少

功能丰富但现代化程度较低

效率

高(默认为无头浏览器,可同时运行多个实例)

高(仅限于 Chromium,适合现代设置)

中型(由于传统支持,占用空间较大)


易于使用

简单(便于开发人员使用的应用程序接口,易于设置)

简单(简单的APIs)

中等(学习曲线较陡)

社区

小型(由微软支持)

中等的 (由 Google 提供支持)

大型企业(长期从事该行业的资深企业)

文件

优秀(详细且定期更新)

良好(侧重于 Chromium 使用案例)

广泛(涵盖传统和现代用例)

浏览器支持

Chromium、Firefox、WebKit

仅限基于 Chromium 的浏览器

Chromium、火狐浏览器、Safari、IE 浏览器、Edge


编程语言支持

多种语言(JavaScript、Python、Java、C# 等)

有限(主要是 JavaScript)

广泛(JavaScript、Python、Java、Ruby 等)

Playwright 与 Puppeteer 的网页抓取对比

Playwright 和 Puppeteer 提供快速高效的刮擦功能,但面向不同的受众。Playwright 支持多种浏览器,是跨浏览器刮擦任务的理想选择,而 Puppeteer 则只专注于基于 Chromium 的浏览器。Playwright 还提供默认无头模式和并发会话等高级功能,使其在复杂工作流程的效率方面更具优势。不过,Puppeteer 的简单性和与 Chromium 的紧密集成使其成为更直接的刮擦项目的绝佳选择。

Playwright 与 Selenium 的网页抓取对比

Playwright 和 Selenium 是另一对优秀的框架,它们在不同的阶段各显神通。Playwright 提供现代 API、默认无头浏览器模式和卓越的效率,是复杂工作流程的理想选择。相比之下,Selenium 广泛支持传统浏览器(如 Internet Explorer)和更广泛的编程语言,使其成为需要传统兼容性的项目的更好选择。虽然 Selenium 拥有更大的社区和更成熟的生态系统,但对于现代浏览器自动化任务而言,Playwright 的速度更快、效率更高。

总结

Playwright 已经完成了最后的鞠躬--这真是一场精彩的演出!Playwright 具有广泛的浏览器支持、现代化的功能和简便的设置,作为网络刮擦和自动化的最佳框架之一,Playwright 确实赢得了满堂喝彩。无论您是协调复杂的搜索项目还是运行简单的数据提取脚本,该工具都能让您的工作流程顺畅高效。将它与 Decodo 可靠的代理解决方案搭配使用,可以保持匿名和不被发现的状态,确保演出顺利进行。准备好利用 Playwright 站在舞台中央了吗?立即体验无缝网络抓取的强大功能!

关于作者

Zilvinas Tamulis

技术文案

作为一名拥有 4 年以上工作经验的技术作家,Žilvinas 将自己在多媒体和计算机设计方面的学习与创建用户手册、指南和技术文档方面的实际专业知识相结合。他的工作包括利用 JavaScript、PHP 和 Python 的实践经验,开发每天有数百人使用的网络项目。


通过 LinkedIn 与 Žilvinas 联系。

Decodo 博客上的所有信息均按原样提供,仅供参考。对于您使用 Decodo 博客上的任何信息或其中可能链接的任何第三方网站,我们不作任何陈述,也不承担任何责任。

常见问题

Playwright 可以用于刮削吗?

是的,Playwright 非常适合用于网络抓取。它使用无头浏览器从网页中高效提取数据。它支持多种编程语言,并能处理动态内容,是一款强大的网络搜索工具。

如何使用Playwright进行网页抓取?

安装 Playwright 库,创建浏览器实例,并打开浏览器页面。使用 CSS 选择器定位元素并提取数据。以无头模式运行浏览器,实现高效自动化。

Selenium 比 Playwright 更适合网络刮擦吗?

这两种工具都非常适合网络刮擦,但 Playwright 对现代网络应用和无头浏览器的支持更好。Selenium 更为成熟,支持更广泛的网络浏览器。

Puppeteer 和 Playwright 在刮擦方面有什么区别?

Playwright 支持更多浏览器(如 Chromium、Firefox、WebKit),并具有多种浏览器上下文等高级功能。而 Puppeteer 仅限于 Google Chrome 和 Chromium。

相关文章

使用 Python 解析 XML —— 终极指南 2025

标准是明确和界定世界上人与人、人与物之间交流的一种手段。例如,人类语言、计算机 USB 插座或倒牛奶前必须先加麦片的事实。说到计算机应用程序和系统,有一种标准是最受开发人员欢迎的,它就是 XML(可扩展标记语言)。在本文中,我们将探讨如何使用 Python 的内置库从 XML 文件中解析数据,了解解析的最佳方法,并理解有效读取信息的重要性。


James Keenan

2月 13日, 2025年

13 分钟阅读

人工智能如何处理数据?从字节到辉煌

人工智能彻底改变了我们处理数据的方式,使机器能够快速高效地分析和解读海量信息。在本综合指南中,我们会探讨人工智能如何处理数据,了解高质量数据的重要性,并深入探讨人工智能面临的挑战。

James Keenan

2月 05日, 2025年

3 分钟阅读

© 2018-2025 Decodo 版权所有 津ICP备2022004334号-2