如何在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ć
相关产品推荐
相关产品推荐

