Playwright 的用途
开发者使用 Playwright 来:
- 对 Web 应用运行端到端测试。
- 采集需要 JavaScript 渲染的页面内容。
- 检查不同浏览器引擎中的布局和行为。
- 自动执行页面跳转、填写表单和截图等操作。
Playwright 提供 JavaScript 和 TypeScript、Python、Java 及 .NET 的官方 API。
Playwright 的工作原理
Playwright 使用兼容的浏览器版本,以无头或有头模式启动 Chromium、Firefox 或 WebKit。浏览器上下文相当于相互隔离的浏览器环境,各自拥有独立的 Cookie 和存储空间;每个页面则对应一个标签页。
定位器 API 可以按文本、角色、标签、CSS 或 XPath 查找元素。Playwright 会自动等待许多元素和操作满足执行条件,减少使用固定延迟的需要。
让 Playwright 流量经过代理
启动浏览器时设置代理。以下示例会让该浏览器打开的所有页面都经过同一个需要认证的代理:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
proxy: { server: 'http://HOST:PORT', username: 'USERNAME', password: 'PASSWORD' }
});
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();
})();
这些代理字段表示 http://USERNAME:PASSWORD@HOST:PORT。如果代理拒绝认证凭据,可能会返回 407 Proxy Authentication Required(需要代理认证)。
Playwright、Puppeteer 与 Selenium 对比
| 工具 | 支持的浏览器 | 常见选择场景 |
|---|---|---|
| Playwright | Chromium、Firefox 和 WebKit | 跨浏览器自动化 |
| Puppeteer | Chrome 和 Firefox | 以 Chrome 为主的 Node.js 工作流 |
| Selenium | Chrome、Edge、Firefox 和 Safari | 现有 WebDriver 测试套件 |
需要用同一套 API 在多个浏览器引擎中保持一致行为时,通常会选择 Playwright。
局限与负责任的使用方式
与直接使用 HTTP 客户端相比,完整浏览器会占用更多内存和 CPU,因此不一定适合静态页面或 API。代理可以改变网站看到的 IP 地址,但无法消除浏览器指纹信号,也无法修正过于激进的请求行为。
应将并发控制在网站允许的范围内,收到 429 响应后降低请求频率,并遵守网站的 robots.txt 文件和使用条款。不要利用浏览器自动化绕过访问控制或验证码。
常见问题
Playwright 适合网页采集吗?
适合,尤其是需要通过 JavaScript 加载数据或控件的页面。对于静态 HTML 或 API,直接使用 HTTP 客户端通常速度更快,占用的资源也更少。
Playwright 可以使用需要认证的代理吗?
可以。在浏览器启动选项或浏览器上下文选项中传入代理服务器、用户名和密码。如果 Playwright 收到 407 响应,应单独测试认证凭据。
网站能检测到 Playwright 吗?
能。Playwright 使用真实的浏览器引擎,但网站仍可检查自动化特征、浏览器指纹和请求行为。应将其用于获准的测试和数据采集,而不是试图绕过安全控制。