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

26

我想使用Puppeteer启动一个语言为西班牙语 es 的Google Chrome浏览器。

我已经尝试过 puppeteer.launch(args:['--lang=es',...],...) 但是没有成功。

我已经尝试通过传递环境变量 LANGUAGE=es mocha puppeteer-test.js,但是也没有成功。

我已经尝试使用 userDataDir 选项,并传递一个包含 { "intl": { "accept_languages": "es" } } 文件的文件夹,但是浏览器设置-语言仍然没有显示西班牙语,window.navigator.languageswindow.navigator.language 也不行。

我正在使用:
Puppeteer 0.11.0
Node 8.4.0
NPM 5.2.0
macOS El Capitan 10.11.6
MacBook Pro Retina, 15-inch, Mid 2015


从终端启动Chromium浏览器时,传递语言参数是否有效? - Dejan Toteff
我也遇到了同样的问题,在Puppeteer的无头Chromium中,“window.navigator”未定义,即使使用--lang开关也是如此。 - Bruno
3个回答

67

有几种方法可以更改语言环境,您可以尝试它们中的所有方法找到适合您的方法。

使用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


3
请注意,args解决方案在Mac OS上不起作用。 - avalanche1
有没有其他适用于Mac OS X的方法? - Aaron
Chromium问题755338中,他们写道,在Linux上设置环境变量LANG也应该可以工作。不过似乎Windows上没有类似的东西... - Petr Bodnár
他们两个都对我没用。 - Srushti Shah

7

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"];
        }
    });
});

1
谢谢你指出这个问题,我已经更新了我的回答。 - Md. Abu Taher

3
在Chrome Linux上,你可以这样做:
puppeteer.launch({ ...yourParams, env: { LANGUAGE: "fr_FR" } })

我不确定其他操作系统/浏览器是否...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接