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

Gio*_*gio 13 javascript google-chrome browser-testing google-chrome-headless puppeteer

我想es使用Puppeteer 推出一款带有西班牙语的谷歌Chrome浏览器.

我试过puppeteer.launch(args:['--lang=es',...],...)但是没用.

我试过传递环境变量,LANGUAGE=es mocha puppeteer-test.js但它没有用.

我已尝试使用该userDataDir选项并传递带有文件的Preferences文件夹{ "intl": { "accept_languages": "es" } }但浏览器设置 - 语言仍然不显示西班牙语,也window.navigator.languages没有window.navigator.language

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

Md.*_*her 31

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

启动时使用Args

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

将语言发送为标题

await page.setExtraHTTPHeaders({
    'Accept-Language': 'bn'
});
Run Code Online (Sandbox Code Playgroud)

强制设置语言

// 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"];
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

为了测试,我将用多种语言测试它,包括es,结果就是这里.

谷歌搜索:

ES BN

BrowserLeaks:

在此输入图像描述

  • 请注意,“args”解决方案在 macOS 上不起作用 (4认同)

kai*_*nsm 8

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"];
        }
    });
});
Run Code Online (Sandbox Code Playgroud)