当前位置:   article > 正文

防止Selenium被检测 Google Chrome 125_chromedriver 125.0.6422.176

chromedriver 125.0.6422.176

背景

最近在使用selenium自动播放学习课程,相信大家也有一些类似的使用场景。

能自动化的事情,绝不自己干。

为防止被检测是机器人做题,刷视频,需要做一些小调整。

先来看作为服务方维护者,是如何检测是Selenium打开的浏览器,而非一般的活跃用户打开的浏览器。

测试环境

本文的测试环境如下:

Google Chrome 浏览器版本:版本 125.0.6422.77(正式版本) (64 位)

ChromeDriver版本:Chrome for Testing availability

如何检测是否是Selenium打开的浏览器页面

window.navigator.webdriver

直接的方式就是检测navigator的值。如果是selenium打开的web浏览器,则此值为true,或者为false,捉着undefined

 Selenium Page缓存

selenium自身再页面上的缓存有如下特征。

 可以用如下代码检测

  1. function getPageCache(opt_doc) {
  2. var doc = opt_doc || document;
  3. var key = '$cdc_asdjflasutopfhvcZLmcfl_';
  4. // var key = 'doggie_';
  5. if (!(key in doc))
  6. doc[key] = new Cache();
  7. return doc[key];
  8. }

如下是一些自动化测试常有的特征检测

  1. runBotDetection = function () {
  2. var documentDetectionKeys = [
  3. "__webdriver_evaluate",
  4. "__selenium_evaluate",
  5. "__webdriver_script_function",
  6. "__webdriver_script_func",
  7. "__webdriver_script_fn",
  8. "__fxdriver_evaluate",
  9. "__driver_unwrapped",
  10. "__webdriver_unwrapped",
  11. "__driver_evaluate",
  12. "__selenium_unwrapped",
  13. "__fxdriver_unwrapped",
  14. ];
  15. var windowDetectionKeys = [
  16. "_phantom",
  17. "__nightmare",
  18. "_selenium",
  19. "callPhantom",
  20. "callSelenium",
  21. "_Selenium_IDE_Recorder",
  22. ];
  23. for (const windowDetectionKey in windowDetectionKeys) {
  24. const windowDetectionKeyValue = windowDetectionKeys[windowDetectionKey];
  25. if (window[windowDetectionKeyValue]) {
  26. return true;
  27. }
  28. };
  29. for (const documentDetectionKey in documentDetectionKeys) {
  30. const documentDetectionKeyValue = documentDetectionKeys[documentDetectionKey];
  31. if (window['document'][documentDetectionKeyValue]) {
  32. return true;
  33. }
  34. };
  35. for (const documentKey in window['document']) {
  36. if (documentKey.match(/\$[a-z]dc_/) && window['document'][documentKey]['cache_']) {
  37. return true;
  38. }
  39. }
  40. if (window['external'] && window['external'].toString() && (window['external'].toString()['indexOf']('Sequentum') != -1)) return true;
  41. if (window['document']['documentElement']['getAttribute']('selenium')) return true;
  42. if (window['document']['documentElement']['getAttribute']('webdriver')) return true;
  43. if (window['document']['documentElement']['getAttribute']('driver')) return true;
  44. return false;
  45. };

去除Selenium特征

去除window.navigator.webdriver

  1. ChromeOptions options = new ChromeOptions();
  2. options.addArguments("--remote-allow-origins=*");
  3. // 移除chrome selenium 特征,window.navigator.webdriver
  4. // chrome 125
  5. options.addArguments("--disable-blink-features=AutomationControlled");
  6. // 关闭界面上的---Chrome正在受到自动软件的控制
  7. options.addArguments("disable-infobars");
  8. WebDriver driver = new ChromeDriver(options);
  9. // 再去打开页面
  10. // driver.get("https://xxxxx.xx.xx.xx")

修改ChromeDriver特征

修改ChromeDriver特征,要么修改源码,再重新编译,要么直接修改二进制代码。本文选择直接修改二进制代码的方式,比较简单。

下载VIM

download : vim online

修改ChromeDriver可执行文件内容,修改之前记得备份下chromedriver.exe

vim.exe chromedriver.exe

将cdc_开头的都替换成你想要的,比如这边我是替换成了doggie 

替换完成保存

%s/cdc_/doggie_/g

当然还有一些伪装自己是活人的办法:

不再深入,后续有机会再玩。

参考文档

https://www.zenrows.com/blog/selenium-avoid-bot-detection#remove-javascript-signiture

https://datadome.co/threat-research/detecting-selenium-chrome/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/777904
推荐阅读
相关标签
  

闽ICP备14008679号