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 参数支持直接传入 usernamepassword,浏览器会在遇到代理认证时自动响应 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/contextPlaywright 默认行为
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 策略

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。