如何在Puppeteer中指定浏览器语言

时间:2017-10-24 10:53:16

标签: javascript google-chrome google-chrome-headless puppeteer browser-testing

我想使用Puppeteer推出一款语言为西班牙语es的Google Chrome浏览器。

我已经尝试了puppeteer.launch(args:['--lang=es',...],...),但它没有用。

我已尝试传递环境变量LANGUAGE=es mocha puppeteer-test.js,但它无效。

我已尝试使用userDataDir选项并将Preferences文件的文件夹传递给{ "intl": { "accept_languages": "es" } },但浏览器设置 - 语言仍未显示西班牙语,window.navigator.languages也未显示window.navigator.language 1}} Řezníček

我正在使用
Puppeteer 0.11.0
节点8.4.0
NPM 5.2.0
macOS El Capitan 10.11.6
MacBook Pro Retina,15英寸,2015年中半年

2 个答案:

答案 0 :(得分:23)

有多种方法可以更改区域设置,您可以尝试所有这些方法来找到适合您的方法,

启动时使用Args

const browser = await puppeteer.launch({
    headless: false,
    args: ['--lang=bn-BD,bn']
});

将语言作为标题发送

await page.setExtraHTTPHeaders({
    'Accept-Language': 'bn'
});

强制设置语言

// Set the language forcefully on javascript
await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, "language", {
        get: function() {
            return ["bn-BD"];
        }
    });
    Object.defineProperty(navigator, "languages", {
        get: function() {
            return ["bn-BD", "bn"];
        }
    });
});

为了测试,我会用多种语言对其进行测试,包括es,这就是结果。

Google搜索:

es bn

BrowserLeaks:

enter image description here

答案 1 :(得分:0)

Md-Abu-Taher的答案有误。

navigator.language的响应应返回一个字符串,而不是数组。在您自己的浏览器控制台中尝试。

代码段应为:

await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, "language", {
        get: function() {
            return "en-GB";
        }
    });
    Object.defineProperty(navigator, "languages", {
        get: function() {
            return ["en-GB", "en"];
        }
    });
});