防止Selenium被检测 Google Chrome 125

背景

最近在使用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自身再页面上的缓存有如下特征。

 可以用如下代码检测

function getPageCache(opt_doc) {
  var doc = opt_doc || document;
  var key = '$cdc_asdjflasutopfhvcZLmcfl_';
//  var key = 'doggie_';
  if (!(key in doc))
    doc[key] = new Cache();
  return doc[key];
}

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

runBotDetection = function () {
    var documentDetectionKeys = [
        "__webdriver_evaluate",
        "__selenium_evaluate",
        "__webdriver_script_function",
        "__webdriver_script_func",
        "__webdriver_script_fn",
        "__fxdriver_evaluate",
        "__driver_unwrapped",
        "__webdriver_unwrapped",
        "__driver_evaluate",
        "__selenium_unwrapped",
        "__fxdriver_unwrapped",
    ];

    var windowDetectionKeys = [
        "_phantom",
        "__nightmare",
        "_selenium",
        "callPhantom",
        "callSelenium",
        "_Selenium_IDE_Recorder",
    ];

    for (const windowDetectionKey in windowDetectionKeys) {
        const windowDetectionKeyValue = windowDetectionKeys[windowDetectionKey];
        if (window[windowDetectionKeyValue]) {
            return true;
        }
    };
    for (const documentDetectionKey in documentDetectionKeys) {
        const documentDetectionKeyValue = documentDetectionKeys[documentDetectionKey];
        if (window['document'][documentDetectionKeyValue]) {
            return true;
        }
    };

    for (const documentKey in window['document']) {
        if (documentKey.match(/\$[a-z]dc_/) && window['document'][documentKey]['cache_']) {
            return true;
        }
    }

    if (window['external'] && window['external'].toString() && (window['external'].toString()['indexOf']('Sequentum') != -1)) return true;

    if (window['document']['documentElement']['getAttribute']('selenium')) return true;
    if (window['document']['documentElement']['getAttribute']('webdriver')) return true;
    if (window['document']['documentElement']['getAttribute']('driver')) return true;

    return false;
};

去除Selenium特征

去除window.navigator.webdriver

ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
// 移除chrome selenium 特征,window.navigator.webdriver
// chrome 125
options.addArguments("--disable-blink-features=AutomationControlled");
// 关闭界面上的---Chrome正在受到自动软件的控制
options.addArguments("disable-infobars");
WebDriver driver = new ChromeDriver(options);
// 再去打开页面
// 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/

相关推荐

  1. selenium火狐避免检测向ChartGPT的有效提问

    2024-06-12 06:20:02       41 阅读
  2. 如何防止服务器攻击

    2024-06-12 06:20:02       13 阅读
  3. 如何防止服务器攻击

    2024-06-12 06:20:02       15 阅读
  4. 如何防止服务器暴力破解

    2024-06-12 06:20:02       44 阅读
  5. 【C++】防止头文件重复包含

    2024-06-12 06:20:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 06:20:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 06:20:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 06:20:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 06:20:02       20 阅读

热门阅读

  1. Spark 面试题(四)

    2024-06-12 06:20:02       9 阅读
  2. css常用的伪类有哪些

    2024-06-12 06:20:02       7 阅读
  3. leetcode 11 盛最多水的容器

    2024-06-12 06:20:02       5 阅读
  4. 前端面试题日常练-day65 【面试题】

    2024-06-12 06:20:02       5 阅读
  5. 栈-227.基本计算器II(四则运算)

    2024-06-12 06:20:02       5 阅读
  6. Python Django 5 Web应用开发实战

    2024-06-12 06:20:02       8 阅读
  7. 【机器学习算法】支持向量机SVM算法概述

    2024-06-12 06:20:02       4 阅读
  8. 小红书运营教程

    2024-06-12 06:20:02       6 阅读
  9. C++的枚举

    2024-06-12 06:20:02       10 阅读
  10. git commit -am 竟然第一次知道

    2024-06-12 06:20:02       9 阅读
  11. 修改添加数据界面的布局

    2024-06-12 06:20:02       7 阅读