有什么方法可以检查当我从 python 运行 selenium webdriver 或从 javascript 运行 puppeteer 时,我正在访问的网站是否检测到我正在运行机器人?有没有网站可以告诉您机器人测试是否会失败? (例如:cloudflare 或验证码)
谢谢
这是 Cloudflare 的机器人测试:https://nowsecure.nl(如果检测到 Selenium/automation,它将永远继续加载页面。如果您绕过检测,您将看到您通过的闪烁指示灯。)
有一个 Python 库可以让你绕过机器人拦截器:unDetected-chromedriver
该工具已集成到 SeleniumBase 中,以便您可以作为 Selenium Python 测试的 pytest 命令行选项 (
--uc
) 绕过机器人检测:
pytest --uc
。
谢谢你的回答。我设法找到了更多资源。这是我找到的所有内容的列表:
https://nowsecure.nl/ (thanks to user Michael Mintz)
https://bot.sannysoft.com
https://browserleaks.com/
https://bot.incolumitas.com/
https://fingerprintjs.github.io/fingerprintjs/
https://antoinevastel.com/bots/
https://www.google.com/recaptcha/api2/demo
https://recaptcha-demo.appspot.com/
在所有网站中,我发现 browserleaks 和 incolumnitas 是最全面的。我将保留这个问题,如果您知道的话,请随时添加更多内容。
我是上述回复中提到的作者之一。机器人检测经常发展,因此我写了一篇更新的文章来解释如何从 2024 年 6 月开始检测使用 Selenium 检测的(无头)Chrome(即使经过修改)。我还创建了一个测试页面,以便您可以验证您的检测到机器人。
测试用户代理中是否存在
HeadlessChrome
子字符串并验证 navigator.webdriver
的值对于不修改过多指纹的机器人仍然很有帮助。
否则,有一种新的检测技术旨在检测 Selenium 等仪器框架使用的 CDP 自动化(Chrome devtool 协议)。
新测试如下:
var cdpDetected = false;
var e = new Error();
Object.defineProperty(e, 'stack', {
get() {
cdpDetected = true;
}
});
// This is part of the detection, the console.log shouldn't be removed!
console.log(e);
if (cdpDetected) {
isBot = true;
}