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

使用Puppeteer的emulate函数时如何强制设置User-Agent?

解决Puppeteer模拟设备时自定义User-Agent的问题

你遇到的直接修改iPhone对象属性无效的问题,是因为Puppeteer内置的设备配置对象是不可修改的冻结对象。可以通过以下两种方式实现自定义User-Agent:

方法1:复制设备配置并修改User-Agent后传入emulate

通过解构赋值复制内置设备的配置,修改其中的userAgent字段,再将新配置传给page.emulate():

const puppeteer = require('puppeteer')
const iPhone = puppeteer.devices['iPhone 13 Pro'];

// 复制设备配置并替换自定义User-Agent
const customiPhone = {
  ...iPhone,
  userAgent: '你的自定义User-Agent字符串'
};

(async () => {
    const browser = await puppeteer.launch({headless: false, slowMo: 250});
    const page = await browser.newPage();
    await page.emulate(customiPhone); // 使用修改后的配置
    await page.goto('https://www.google.com');
    
    // 验证UA是否生效
    console.log('当前User-Agent:', await page.evaluate(() => navigator.userAgent));
    
    await page.screenshot({
      path: 'test3.png',
      type: 'png',
      fullPage: true
    })
    console.log(await page.title())
    await browser.close();
})();

方法2:分开调用setViewport和setUserAgent

page.emulate()本质是同时调用page.setViewport()和page.setUserAgent(),因此可以分开执行这两个方法,直接自定义UA:

const puppeteer = require('puppeteer')
const iPhone = puppeteer.devices['iPhone 13 Pro'];

(async () => {
    const browser = await puppeteer.launch({headless: false, slowMo: 250});
    const page = await browser.newPage();
    
    // 设置设备视口
    await page.setViewport(iPhone.viewport);
    // 设置自定义User-Agent
    await page.setUserAgent('你的自定义User-Agent字符串');
    
    await page.goto('https://www.google.com');
    
    // 验证UA是否生效
    console.log('当前User-Agent:', await page.evaluate(() => navigator.userAgent));
    
    await page.screenshot({
      path: 'test3.png',
      type: 'png',
      fullPage: true
    })
    console.log(await page.title())
    await browser.close();
})();

两种方法都能实现需求,方法2更灵活,适合只需要调整部分配置的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:25:11