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

如何在Puppeteer中通过预定义变量指定浏览器语言

问题原因

page.evaluateOnNewDocument 传入的回调函数会被序列化后注入到浏览器上下文执行,和你的Node.js运行环境上下文完全隔离,回调无法直接访问Node层定义的外部变量,因此会抛出变量未定义的报错。

可行解决方案

利用 page.evaluateOnNewDocument 的传参能力,将需要注入的变量作为额外参数传入,参数会自动序列化后传递到浏览器上下文作为回调的入参使用,示例代码如下:

let predefinedLanguage = ["bn-BD","bn"]
await page.evaluateOnNewDocument((langList) => {
    Object.defineProperty(navigator, "languages", {
        get: function() {
            return langList;
        },
        configurable: true // 可选配置,避免后续其他逻辑修改该属性时报错
    });
}, predefinedLanguage); // 外部变量在这里作为第二个参数传入

补充说明

所有通过 page.evaluate、page.evaluateHandle、page.evaluateOnNewDocument 传递到浏览器的参数都必须是可序列化的(不能包含函数、循环引用、Symbol 等无法序列化的内容),你的场景下传递字符串数组完全符合要求。

内容的提问来源于stack exchange,提问作者Stefan Tapi Krstić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:06:06