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

使用Puppeteer.connect搭配代理时如何设置User Agent?

问题描述

使用puppeteer.connect连接browserless.io远程浏览器服务,通过page.authenticate完成远程代理认证,但每次尝试设置User Agent均失败。移除代理后所有功能正常运作,请问该场景下如何设置User Agent?

相关代码示例

async function taskProcessor(task) {
  const browser = await puppeteer.connect({ browserWSEndpoint: 'wss://chrome.browserless.io/?token=b&stealth&headless=false&slowMo=1000&ignoreDefaultArgs=--hide-scrollbars,--disable-default-apps&--proxy-server=https://br-pr.oxylabs.io:20000'})
  const page = await browser.newPage();
    await page.authenticate({
      username: 'user',
      password: 'password'
    })

  const userAgent = new UserAgent();

  console.log(userAgent.toString());
  
  await page.setViewport({width:1920,height:1080});

  await page.setUserAgent(userAgent.toString());

  await page.goto('https://google.com',{waitUntil:"networkidle2"});

  const userAgentString = await page.evaluate(() => navigator.userAgent);
  console.log(userAgentString);
}

输出结果

2023-07-25T23:38:31.139741+00:00 app[web.1]: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
2023-07-25T23:38:45.331961+00:00 app[web.1]: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36
解决方案

问题核心是browserless的stealth参数会覆盖自定义User Agent,同时代理服务可能篡改请求头,可通过以下方式解决:

方法一:关闭stealth并通过启动参数指定User Agent

移除browserless连接URL中的stealth参数,直接在启动参数里添加--user-agent,确保浏览器启动时就应用自定义User Agent:

async function taskProcessor(task) {
  const customUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36';
  const browser = await puppeteer.connect({ 
    browserWSEndpoint: `wss://chrome.browserless.io/?token=b&headless=false&slowMo=1000&ignoreDefaultArgs=--hide-scrollbars,--disable-default-apps&--proxy-server=https://br-pr.oxylabs.io:20000&--user-agent=${encodeURIComponent(customUserAgent)}`
  });
  const page = await browser.newPage();
  await page.authenticate({
    username: 'user',
    password: 'password'
  });

  await page.setViewport({width:1920,height:1080});

  await page.goto('https://google.com',{waitUntil:"networkidle2"});

  const userAgentString = await page.evaluate(() => navigator.userAgent);
  console.log(userAgentString);
}

方法二:保留stealth,通过请求头和页面注入修改

如果需要stealth功能,同时设置HTTP请求头的User Agent,并在页面初始化时修改navigator.userAgent的只读属性:

async function taskProcessor(task) {
  const customUserAgent = new UserAgent().toString();
  console.log(customUserAgent);

  const browser = await puppeteer.connect({ 
    browserWSEndpoint: 'wss://chrome.browserless.io/?token=b&stealth&headless=false&slowMo=1000&ignoreDefaultArgs=--hide-scrollbars,--disable-default-apps&--proxy-server=https://br-pr.oxylabs.io:20000'
  });
  const page = await browser.newPage();
  
  await page.authenticate({
    username: 'user',
    password: 'password'
  });

  await page.setViewport({width:1920,height:1080});

  // 设置HTTP请求头中的User Agent
  await page.setExtraHTTPHeaders({
    'User-Agent': customUserAgent
  });

  // 在页面加载前注入代码,修改navigator.userAgent
  await page.evaluateOnNewDocument((ua) => {
    Object.defineProperty(navigator, 'userAgent', {
      get: () => ua,
      configurable: true
    });
  }, customUserAgent);

  await page.goto('https://google.com',{waitUntil:"networkidle2"});

  const userAgentString = await page.evaluate(() => navigator.userAgent);
  console.log(userAgentString);
}

方法三:检查代理服务设置

部分代理服务商(如Oxylabs)可能默认篡改User Agent,可登录代理后台查看并关闭相关设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:27:04