在 puppeteer 中更改 window.navigator 以绕过反机器人系统

BT1*_*101 4 selenium detection puppeteer

我试图让我的在线机器人无法被检测到。我阅读了许多如何做到这一点的文章,并将所有技巧放在一起并使用它们。其中之一是改变window.navigator.webdriver

我设法window.navigator.webdriver通过以下代码在 puppeteer 中进行了更改:

await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
    });
});
Run Code Online (Sandbox Code Playgroud)

我绕过这个测试就好了:

在此处输入图片说明

然而,这个测试仍然以某种方式嘲笑我:

在此处输入图片说明

为什么WEBDRIVER不一致?

Md.*_*her 9

尝试这个,

首先,删除定义,如果从原型中定义和删除将不起作用。

Object.defineProperty(navigator, 'webdriver', ()=>{}) // <-- delete this part
Run Code Online (Sandbox Code Playgroud)

用这个替换你的代码。

delete navigator.__proto__.webdriver;
Run Code Online (Sandbox Code Playgroud)

结果: 在此处输入图片说明

为什么有效?

直接删除只是删除对象的实例而不是实际定义。getter 和 setter 仍然存在,因此浏览器可以找到它。

在此处输入图片说明

但是,如果您从实际原型中删除,它在任何实例中都将不再存在。

在此处输入图片说明

附加提示

你提到你想让你的应用程序无法被检测到,有很多插件可以实现相同的目标,例如这个名为puppeteer-extra-plugin-stealth 的包包含一些很酷的反机器人检测技术。有时只重用一些包比一遍遍地重新创建解决方案更好。

PS:上面的解释可能是我错了,请随时指导我,以便我改进答案。

  • 非常感谢“附加提示”我不知道这个包的存在。 (3认同)
  • 还升级了`puppeteer-extra-plugin-stealth`! (3认同)
  • 这很奇怪,但它在我的环境中不起作用:https://i.imgur.com/6RnZgD1.png 你能在 github/bitbucket 上分享你的项目以便我可以匹配差异吗? (2认同)
  • 它将起作用,删除上面的定义 webdriver 部分。 (2认同)
  • 没错,那是因为我多次重新定义导航器对象。 (2认同)