😀 今天我们来讲一下selenium自动化怎么永久去除痕迹。本系列的浏览器编译魔改完的浏览器会放在星球上。
📝 主旨内容
Selenium技术概述
Selenium是业界主流的Web自动化测试框架,通过WebDriver协议实现对浏览器的程序化控制。它能够精确模拟用户交互行为,包括页面导航、元素定位、表单操作等复杂场景,因此在自动化测试、数据采集等领域得到广泛应用。
Selenium的工作机制本身会在浏览器环境中留下特定的技术指纹。当浏览器通过ChromeDriver等WebDriver组件启动时,会在运行时环境中注入特定的JavaScript对象和属性,这些特征可能被网站的反自动化系统识别和拦截。
检测机制分析:WebDriver指纹识别
现代网站通常通过JavaScript运行时环境分析来识别自动化工具。
// WebDriver特征检测代码
const webdriverPattern = /^([a-z]){3}_.*_(Array|Promise|Symbol|JSON|Object|Proxy)$/;
const windowProperties = Object.getOwnPropertyNames(window);
const suspiciousProperties = windowProperties.filter(prop => webdriverPattern.test(prop));
console.log('检测到的WebDriver属性:', suspiciousProperties);
正常浏览器环境输出:
检测到的WebDriver属性:[]
Selenium控制的浏览器输出:
检测到的WebDriver属性:[ 'cdc_adoQpoasnfa76pfcZLmcfl_Array', 'cdc_adoQpoasnfa76pfcZLmcfl_Object', 'cdc_adoQpoasnfa76pfcZLmcfl_Promise', 'cdc_adoQpoasnfa76pfcZLmcfl_Proxy', 'cdc_adoQpoasnfa76pfcZLmcfl_Symbol', 'cdc_adoQpoasnfa76pfcZLmcfl_JSON']
这些以cdc_前缀开头的属性是ChromeDriver在运行时注入的内部对象,成为了识别自动化环境的关键指纹。
代码测试
自动化正常情况
我们打开一个检测网站,可以看到目前是被他检测到了。我们也可以用JavaScript捕获到痕迹。
这个是检测selenium的一种手段,当然检测还有很多种。我们后面也会来慢慢处理掉这些痕迹。
image.png
代码修改
在chromium源代码中修改
找到这个路径:src\chrome\test\chromedriver\chrome\devtools_client_impl.cc
image.png
我们需要把这些注释掉。然后我们重新编译驱动。
ninja -C out/Default chromedriver
效果
查看编译完成后的效果
image.png
🤗 总结归纳
Selenium作为成熟的自动化测试框架,在面对现代反自动化检测时会比较无力。这时候我们可以通过修改源代码来进行去除这些源代码,已达到最优的效果。