Headless Chrome + 专用代理:任意网站采集完整方案

Headless Chrome 配合专用代理是爬虫领域最强大的组合之一。本文教你如何将两者结合,稳定地采集任意网站数据。

为什么需要代理配合 Headless Chrome

Headless Chrome 虽然能渲染 JavaScript,但如果所有请求来自同一个 IP,反爬系统仍然能在几小时内就封掉你。代理让每个浏览器实例都使用不同的 IP。

Puppeteer 配置代理

const browser = await puppeteer.launch({
  headless: true,
  args: [
    '--proxy-server=http://user:pass@proxy:port',
    '--no-sandbox'
  ]
});

Playwright 配置代理

const browser = await chromium.launch({
  headless: true,
  proxy: {
    server: 'http://proxy:port',
    username: 'user',
    password: 'pass'
  }
});

关键技巧

  • 每个浏览器实例独立代理:不要复用同一个 IP
  • 隐藏 webdriver 标记:注入 JS 修改 navigator.webdriver
  • 随机化 Viewport:不同的屏幕尺寸避免指纹一致
  • 模拟真实行为:随机鼠标移动、不均匀延迟、滚动操作
  • 处理验证码:配合 2Captcha 等服务自动识别

完整示例

const puppeteer = require('puppeteer');

async function scrape(url) {
  const browser = await puppeteer.launch({
    headless: true,
    args: ['--proxy-server=http://user:pass@proxy:port']
  });
  const page = await browser.newPage();
  
  // 隐藏自动化标记
  await page.evalOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', {get: () => false});
  });
  
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64)...');
  await page.goto(url, {waitUntil: 'networkidle0'});
  const data = await page.content();
  await browser.close();
  return data;
}

相关教程

chcrazy

Share