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

标签 selenium puppeteer detection

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

我设法改变了window.navigator.webdriver通过此代码在 puppeteer 中:

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

我正在绕过 this测试就好了:

enter image description here

然而this测试仍然以某种方式 mock 我:

enter image description here

为什么WEBDRIVER不一致?

最佳答案

试试这个,

首先,删除定义,如果你定义并从原型(prototype)中删除,它将不起作用。

Object.defineProperty(navigator, 'webdriver', ()=>{}) // <-- delete this part

用这个替换你的代码。
delete navigator.__proto__.webdriver;

结果:
enter image description here

为什么它有效?

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

enter image description here

但是,如果您从实际原型(prototype)中删除,它在任何情况下都将不再存在。

enter image description here

附加提示

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

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

关于selenium - 在 puppeteer 中更改 window.navigator 以绕过反机器人系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56335066/

相关文章:

java - Eclipse java查找属性值

node.js - Chrome Headless puppeteer 占用太多 CPU

opencv - 无法检测到图像上的等号

audio - 快速傅里叶变换 FFT 中的幅度值因恒定输入信号而异?

c# - 获取在节点上执行的测试名称以将 Windows 凭据传递到 Windows Vault for Web 应用程序登录 Selenium 网格

html - 使用 Selenium Webdriver,如何找到与 div 关联的所有类?

node.js - Node puppeteer 截图整页 SPA

javascript - 使用 puppeteer 获取完整的网页源代码 html - 但总是缺少某些部分

iOS:从 UITextView 中提取检测到的数字和链接?

java - Selenium:setHeadless() 对 ChromeDriver 没有影响