起点
让受控的浏览器测试经由代理运行,同时让凭据、浏览器状态和导航失败都易于推断。
选择测试的范围
Playwright 支持在浏览器启动时或在单个浏览器上下文上设置代理。对于隔离的场景,使用上下文。代理的用户名和密码与 httpCredentials 是分开的,后者用于向网站认证。
在 Node.js 示例项目中,用 npm install playwright 安装 playwright,再用 npx playwright install chromium 安装其 Chromium 浏览器。把 PROXY_URL 设为你真实的 HTTP(S) 网关;https://proxy.example.invalid:8443 只是一个示例。以私密方式注入 PROXY_USERNAME 和 PROXY_PASSWORD。
运行一次有限制的导航
保存为 proxy-browser.mjs 并运行 node proxy-browser.mjs。本示例对 HTTP(S) 代理使用用户名/密码认证;不要假设这些认证选项对 SOCKS 网关同样有效。
proxy-browser.mjs · Playwright Chromium
import { chromium } from 'playwright';
function required(name) {
const value = process.env[name];
if (!value) throw new Error('Missing environment variable: ' + name);
return value;
}
const proxy = {
server: required('PROXY_URL'),
username: required('PROXY_USERNAME'),
password: required('PROXY_PASSWORD'),
};
const browser = await chromium.launch({ timeout: 30_000 });
try {
const context = await browser.newContext({ proxy });
context.setDefaultTimeout(15_000);
context.setDefaultNavigationTimeout(30_000);
const page = await context.newPage();
const response = await page.goto('https://example.com/', {
waitUntil: 'domcontentloaded',
});
if (!response || !response.ok()) throw new Error('Navigation did not succeed');
console.log({ status: response.status() });
await context.close();
} finally {
await browser.close();
}区分页面成功与网络成功
导航响应描述的是主文档,而不是页面发出的每个图片、脚本或 API 请求。对于真实测试,应断言你的工作流所依赖的确切界面或响应。使用你自己控制的页面,并让断言与一个可观察的结果绑定。
单个页面可能产生许多请求。如果你的提供商按请求轮换,在期望整个浏览器流程保持一个稳定出口之前,先确认它如何处理这些连接。Cookie 仍然是浏览器状态;选择粘性代理不会创建或恢复它们。
当页面超时时,先在 curl 中通过同一个网关重复一个小请求。然后检查脱敏后的浏览器请求失败记录以及具体失败的资源。在基础连通性检查期间,避免收集包含真实账户数据的截图或跟踪记录。
上线之前
- 为该场景使用全新的上下文。
- 将代理凭据与网站凭据分开。
- 导航之后验证应用真正的成功条件。
参考来源与延伸阅读
本指南参考的技术资料。请以你所安装版本的文档以及代理服务商支持的配置为准。