Node.js Playwright 隧道代理:浏览器自动化集成爬虫代理
Playwright 配置亿牛云爬虫代理的完整流程,页面导航、请求监控、场景对比。
亿牛云技术团队2026年5月23日2 分钟阅读
Playwright + 爬虫代理
Playwright 是微软开发的浏览器自动化框架,支持 Chromium、Firefox、WebKit。通过内置的 proxy 参数可以直接对接亿牛云爬虫代理。
环境准备
export PROXY_HOST=t.16yun.cn
export PROXY_PORT=31111
export PROXY_USERNAME=your-username
export PROXY_PASSWORD=your-password
export TARGET_URL=https://httpbin.org/ip
基础用法
import { chromium } from 'playwright';
const host = process.env.PROXY_HOST || 't.16yun.cn';
const port = process.env.PROXY_PORT || '31111';
const user = process.env.PROXY_USERNAME || 'user';
const pass = process.env.PROXY_PASSWORD || 'password';
const target = process.env.TARGET_URL || 'https://httpbin.org/ip';
async function main() {
const browser = await chromium.launch({
headless: true,
proxy: {
server: `http://${host}:${port}`,
username: user,
password: pass,
},
});
const page = await browser.newPage({ ignoreHTTPSErrors: true });
// 监控请求和响应
page.on('request', (req) => console.log('>>', req.method(), req.url()));
page.on('response', (res) => console.log('<<', res.status(), res.url()));
await page.goto(target, { waitUntil: 'load', timeout: 60000 });
const content = await page.content();
console.log(content);
await browser.close();
}
main().catch((err) => { console.error(err); process.exit(1); });
代理认证说明
Playwright 的 proxy 参数支持直接传入 username 和 password,浏览器会在遇到代理认证时自动响应 407 挑战,无需手动处理。
请求/响应监控
Playwright 的事件监听机制可以实时查看哪些请求走了代理、响应状态如何:
page.on('request', (req) => {
console.log(`[请求] ${req.method()} ${req.url()}`);
});
page.on('response', (res) => {
console.log(`[响应] ${res.status()} ${res.url()}`);
});
page.on('requestfailed', (req) => {
console.log(`[失败] ${req.url()} - ${req.failure().errorText}`);
});
页面内容提取
Playwright 可以拿到页面渲染后的完整内容,适合需要 JS 渲染的场景:
// 获取页面纯文本
const text = await page.innerText('body');
// 获取完整 HTML
const html = await page.content();
// 截图
await page.screenshot({ path: 'page.png', fullPage: true });
四种场景在 Playwright 中的实现
Playwright 主要通过 browser.newContext() 的 proxy 参数控制代理,IP 切换策略取决于 TCP 连接的生命周期:
| 场景 | Playwright 实现 | 说明 |
|---|---|---|
| A:强制切换 | 每次操作关闭 browser 重新创建 | 开销大,不推荐高频切换 |
| B:保持 IP | 复用同一 browser/context | Playwright 默认行为 |
| C:Proxy-Tunnel | 配合 axios 等 HTTP 客户端 | 浏览器本身不发送自定义请求头 |
Playwright 是浏览器级工具,IP 切换效率不如 requests/httpx 等 HTTP 客户端。如果只需要 HTTP 请求级别的 IP 控制,建议用 HTTP 客户端配合 Playwright 的场景截图需要。
配合其他工具获取最优效果
Playwright 强在浏览器渲染和截图,HTTP 请求控制交给专业的 HTTP 库:
// Playwright 渲染页面 → 获取 HTML → httpx 通过代理提取数据
const html = await page.content();
// 用 axios 通过同一代理发送额外请求
const response = await axios.get('https://api.example.com/data', {
proxy: { host, port, auth: { username: user, password: pass } },
});
错误排查
| 现象 | 原因 | 解决 |
|---|---|---|
| 页面加载超时 | 代理不可用或目标站慢 | 用 curl 验证代理链路 |
| 407 错误 | 代理认证失败 | 核对用户名密码 |
| 页面内容为空 | 目标站需要 JS 渲染 | 确认 waitUntil 策略 |
需要企业代理方案?
我们可根据目标站点、并发规模与稳定性目标提供定制方案。