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

如何在Puppeteer中用page.evaluateOnNewDocument()修改navigator.languages?

问题解决:修改navigator.languages无效的原因及修复方案

你的预加载脚本存在语法错误,同时缺少对单个语言属性的覆盖,导致修改未生效。以下是具体修复步骤:

1. 修正预加载脚本的语法错误并完善属性覆盖

将你的预加载JS文件内容替换为以下代码:

// 覆盖navigator.languages数组
Object.defineProperty(navigator, 'languages', {
  get: () => ['fr-ca', 'fr'],
  configurable: true,
  enumerable: true
});

// 同步覆盖单个语言属性,确保页面检测一致
Object.defineProperty(navigator, 'language', {
  get: () => 'fr-ca',
  configurable: true,
  enumerable: true
});
  • 原脚本中get方法后的分号;是语法错误,需改为逗号,(Object.defineProperty的配置对象是键值对结构,键之间用逗号分隔)。
  • 添加configurable和enumerable属性,让自定义属性与原生属性行为一致,避免被页面脚本识别出异常。
  • 同步覆盖navigator.language,因为很多页面会同时读取这个单值属性判断语言偏好。

2. 验证脚本读取是否正确

可以在NodeJS脚本中添加日志,确认预加载文件是否被正确读取:

const preloadFile = fs.readFileSync(preldpath, 'utf8');
console.log('已读取的预加载脚本:', preloadFile); // 检查输出是否与修改后的脚本一致
await page.evaluateOnNewDocument(preloadFile);

3. 排除Stealth插件的干扰(可选)

如果修改后仍未生效,可以临时禁用StealthPlugin测试,部分插件的内置反检测逻辑可能会覆盖你的自定义属性。若禁用后生效,可调整插件配置或在插件加载后重新注入你的修改脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:37:25