Uncategorized
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;
}