首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >木偶组织中的navigator.languages覆盖问题

木偶组织中的navigator.languages覆盖问题
EN

Stack Overflow用户
提问于 2021-02-08 00:30:05
回答 1查看 1.3K关注 0票数 1

我有一个我无法解决的问题,要完成匿名木偶师的制作。到目前为止,我已经通过了所有的反机器人测试,但是我无法配置语言,让我解释一下:

  • 覆盖用户代理时,我设法将"navigator.language“从"en-US,in”改为"es-ES,es“。
  • 但是我已经试过了所有的东西,我无法覆盖"navigator.languages“,它总是保留在"en-US,en”中。

我希望有人能帮我改变语言。

我附上截图和链接的插件,我使用。

https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth

https://github.com/berstend/puppeteer-extra/blob/master/packages/puppeteer-extra-plugin-stealth/evasions/user-agent-override/index.js

代码语言:javascript
复制
const puppeteer = require("puppeteer-extra");


// add stealth plugin and use defaults (all evasion techniques)


const stealth_plugin = require("puppeteer-extra-plugin-stealth");
const stealth = stealth_plugin();

puppeteer.use(stealth);

const UserAgentOverride = require("puppeteer-extra-plugin-stealth/evasions/user-agent-override");

const ua = UserAgentOverride({locale: "es-ES,es;q=0.9", userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.141 Safari/537.36", platform: "MacIntel"});

const path = require('path')
const websites = require('./websites.json')

async function run() {
    puppeteer.use(ua);

    const browser = await puppeteer.launch({
        headless: false,
        userDataDir: "./cache",
        ignoreHTTPSErrors: true,
        ignoreDefaultArgs: [
            "--disable-extensions",
            "--enable-automation",
        ],
        args: [
            "--lang=es-ES,es;q=0.9",
            "--no-sanbox",
            "--disable-dev-shm-usage",
            "--disable-gpu"
        ]
    })

    console.log(await browser.userAgent());
    const page = await browser.newPage()

    const pathRequire = path.join(__dirname, 'src/scripts/index.js')
    for (const website of websites) {
        require(pathRequire)(page, website)
    }

}

run().catch(error => { console.error("Something bad happend...", error); });

反bot测试结果图片:

您好,谢谢您的回答,在测试了编辑的代码之后,我注意到以下几点:

  • 当我启动浏览器时,一旦输入任何url,配置就会消失。
  • 然而,如果我不放任何url,它就能完美地通过测试。

即使没有放置url它是很好的配置,我附上两个图像,一个与url和一个没有,我不知道我能做什么,我已经尝试了一切。

Object.getOwnPropertyDescriptors (navigator.languages)

代码语言:javascript
复制
it's writable using the languages evasion:

[value] => en-US
[writable] => 1
[enumerable] => 1
[configurable] => 1

while it should be
configurable: false
enumerable: true
value: "es-ES"
writable: false

反bot测试结果图像

反bot测试结果图像

EN

回答 1

Stack Overflow用户

发布于 2021-02-15 16:09:28

每次启动新页时,我都设法保留指定的语言,但我仍然不解析铬浏览器中的默认权限:

Object.getOwnPropertyDescriptors (navigator.languages)

虽然它应该是可配置的: false枚举:真值:"es-ES“可写: false

如果有人知道怎么解决这个问题,我会很感激的。

代码语言:javascript
复制
const websites = require('./websites.json')

异步函数run() { puppeteer.use(ua);

代码语言:javascript
复制
const optionslaunch = require("./src/scripts/options/optionslaunch");    
const browser = await puppeteer.launch(optionslaunch)

const page = await browser.newPage()

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

const pathRequire = path.join(__dirname,‘src/script/app.js’)

代码语言:javascript
复制
for (const website of websites) {
    // require(pathRequire)(page, pageEmail, website)
    require(pathRequire)(page, website)
}

}

run().catch(error => {console.error(“有事发生了.”,错误);});

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66094546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档