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

如何在Puppeteer无头模式下模拟有头浏览器行为?

Puppeteer无头模式模拟有头浏览器的解决方案

针对无头模式被网站检测的问题,可以通过以下几种方式伪装成有头浏览器的行为:

  • 启用新版无头模式
    Chrome 112+推出的--headless=new模式更接近真实有头浏览器的行为,替代旧版--headless=true能大幅降低被检测概率。启动示例:

    const browser = await puppeteer.launch({
      headless: 'new',
      args: ['--window-size=1920,1080']
    });
    
  • 禁用自动化控制标识
    网站常通过navigator.webdriver判断是否为自动化浏览器,可通过启动参数和页面注入脚本清除该标识:

    const browser = await puppeteer.launch({
      args: [
        '--disable-blink-features=AutomationControlled',
        '--no-sandbox'
      ]
    });
    const page = await browser.newPage();
    // 注入脚本覆盖webdriver属性
    await page.evaluateOnNewDocument(() => {
      Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
      });
    });
    
  • 补充浏览器环境特征
    无头模式下部分浏览器对象属性缺失,可手动添加模拟真实环境:

    await page.evaluateOnNewDocument(() => {
      // 模拟window.chrome对象
      window.chrome = {
        runtime: {},
        app: { isInstalled: false },
        webstore: { onInstallStageChanged: {}, onDownloadProgress: {} }
      };
      // 修复plugins数组
      Object.defineProperty(navigator, 'plugins', {
        get: () => [1, 2, 3, 4]
      });
      // 修复languages数组
      Object.defineProperty(navigator, 'languages', {
        get: () => ['zh-CN', 'zh', 'en-US', 'en']
      });
    });
    
  • 模拟真实用户交互
    避免机械性的快速操作,添加随机延迟、鼠标移动、滚动等行为:

    // 随机延迟
    await page.waitForTimeout(Math.random() * 1000 + 500);
    // 模拟鼠标移动到页面元素
    const element = await page.$('selector');
    const box = await element.boundingBox();
    await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
    // 模拟滚动
    await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
    
  • 统一User-Agent
    确保无头模式使用和有头模式完全一致的User-Agent,可先在有头模式下获取UA,再设置:

    // 有头模式下获取UA:console.log(navigator.userAgent)
    const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
    await page.setUserAgent(userAgent);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:22:20