You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Puppeteer和JS爬取受保护网站?遭反爬检测求助

Puppeteer爬取反爬站点的优化方案(以Nike为例)

针对你遇到的Puppeteer被网站检测、无法完成加购操作的问题,结合你的代码,给出以下具体优化措施:

1. 修复启动参数错误

你的options2中args数组里的disable-gpu缺少前缀--,这会导致该参数无效,正确写法应为--disable-gpu。

2. 补充反检测启动参数

在args中添加更多对抗浏览器指纹检测的核心参数:

  • --disable-blink-features=AutomationControlled:禁用Chrome的自动化控制标记,避免网站通过window.navigator.webdriver识别出Puppeteer
  • --no-sandbox、--disable-setuid-sandbox:规避沙箱环境带来的特殊特征(部分运行环境需要)
  • --disable-dev-shm-usage:解决部分系统的内存限制问题,避免浏览器意外崩溃

3. 增强指纹伪装

除了已使用的stealth和anonymize-ua插件,在页面创建后手动覆盖关键检测属性:

await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
    });
    // 可选:补充伪装浏览器插件列表,模拟真实环境
    Object.defineProperty(navigator, 'plugins', {
        get: () => [1,2,3].map(() => ({ name: 'PDF Viewer', description: '', version: '' }))
    });
});

4. 优化浏览器启动配置

  • 若使用userDataDir,确保路径正确且未被本地正在运行的Chrome实例占用,否则会导致启动失败;建议避免同时混用--profile-directory和userDataDir,二者选其一即可
  • 保留ignoreDefaultArgs: ['--enable-automation'],该参数会移除Chrome的"正在被自动软件控制"提示,减少暴露风险

5. 模拟真实用户行为

  • 在操作节点间增加随机延迟,比如点击加购前延迟1-3秒,模拟用户浏览决策的时间
  • 模拟鼠标移动、页面滚动轨迹,避免直接跳转式操作:
// 示例:模拟滚动到商品区域再移动到按钮
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight / 2));
await delay(Math.random() * 1500);
await page.mouse.move(buttonX, buttonY); // 替换为加购按钮的实际坐标
await delay(Math.random() * 800);
await page.click(buttonSelector);

修改后的示例代码

const puppeteer = require("puppeteer-extra");
const { executablePath } = require("puppeteer");
const pluginStealth = require("puppeteer-extra-plugin-stealth");
const Ua = require("puppeteer-extra-plugin-anonymize-ua");

puppeteer.use(pluginStealth());
puppeteer.use(Ua());

let browser, page;

function log(log) {
    console.log(log);
};

function delay(time) {
    return new Promise((resolve) => {
        setTimeout(resolve, time);
    });
}

async function openBrowser() {
    if (!browser) {
        const options = {
            args: [
                '--start-maximized',
                '--disable-gpu',
                '--disable-infobars',
                '--disable-extensions',
                '--ignore-certificate-errors',
                '--disable-blink-features=AutomationControlled',
                '--no-sandbox',
                '--disable-setuid-sandbox',
                '--disable-dev-shm-usage'
            ],
            headless: false,
            ignoreDefaultArgs: ['--enable-automation'],
            executablePath: "C:/Program Files/Google/Chrome/Application/chrome.exe",
            defaultViewport: null,
            ignoreHTTPSErrors: true
        };
        browser = await puppeteer.launch(options);
        await delay(Math.random() * 1000);
        page = await browser.newPage();

        // 页面初始化时覆盖检测属性
        await page.evaluateOnNewDocument(() => {
            Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
            Object.defineProperty(navigator, 'plugins', {
                get: () => [1,2,3].map(() => ({ name: 'PDF Viewer', description: '', version: '' }))
            });
        });

        log("New browser has been booted up");
    } else {
        log("Browser already in existence");
    };
}

内容的提问来源于stack exchange,提问作者Bertil Frigaard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:45:36