防止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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqoop的安装配置

1. 上传并解压安装包 tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ../server/ 重命名:mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop 2. 配置环境变量 sudo vim /etc/profile # 配置sqoop的环境变量 export SQOOP_HOME/export/server/sqoop export PATH$PATH…

C#——正则表达式详情

正则表达式 正则表达式: 列如判断一个字符串是不是手机号,或者密码是否包含大小写数字等这些要求,可以把这些条件写成一个表达式 创建正则表达式 string s1 "1234adsab1KHGFJD"; // 创建正则时需要在字符串前面加上 Regex r new Regex(&q…

NettyのNIOBIO原理解析

1、IO模型 在IO模型中,主要可分为同步与异步操作: 在同步 I/O 模型中,I/O 操作是阻塞的,当一个进程或线程执行 I/O 操作时,它会一直等待这个操作完成才继续执行后续的代码。 在异步 I/O 模型中,I/O 操作是非…

Shiro有key但无回显利用链子-JRMP大法

前言 shiro在手天下我有,扫出key直接梭哈getshell,横扫内网。但要是像这种情况,直接下班拜拜跑路,没有链子玩毛线… 直到出现了这么一个工具可以通过JRMP协议探测是否存在漏洞,很显然上面工具是做不到的,实…

Cheat Engine 学习

文章目录 Exact Value scanning任务实现步骤Unknown initial value任务实现步骤原理说明Floating points任务实现步骤原理说明Code finder任务实现步骤原理说明Pointers任务实现步骤原理说明Change Pointer 操作:Active(活跃状态)和数值修改:Code Injection任务概述实现步骤…

2024年【四川省安全员C证】考试题及四川省安全员C证考试资料

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员C证考试题是安全生产模拟考试一点通总题库中生成的一套四川省安全员C证考试资料,安全生产模拟考试一点通上四川省安全员C证作业手机同步练习。2024年【四川省安全员C证】考试题及四川省安全员…

博客没人看啊?我分析是这些原因

1.封面 主题封面还是个性化封面?主题封面对系列化很友好,如下图左: 在目录中什么主题一目了然,个性化封面在目录中就略显杂乱。但是通过观察CSDN主页发现热榜文章清一色个性化封面。如果使文字封面就会显得很无聊。 所以从提高浏…

Jenkins三种构建类型

目录 传送门前言一、概念二、前置处理(必做)1、赋予777权限2、让jenkins用户拥有root用户的kill权限3、要运行jar包端口号需要大于1024 三、自由风格软件项目(FreeStyle Project)(推荐)三、Maven项目&#…

金融科技:推动保险行业数字化转型的引擎

随着科技的飞速发展,金融科技(FinTech)已经成为推动金融行业变革的重要力量。特别是在保险行业,金融科技正引领着一场深刻的数字化转型,为保险公司带来了前所未有的机遇与挑战。本文将探讨金融科技如何推动保险行业的数…

UDP 协议详解与实战

目录 简介什么是 UDP?UDP 与 TCP 的区别 UDP 数据传输方式单播 - Unicast(1:1)广播 - Broadcast(1:n)有限广播 - Limited Broadcast直接广播 - Directed Broadcast 组/多播 - Multicast(n:m)任播…

屹晶微EG3002 单通道功率MOSFET驱动芯片 贴片SOP8

EG3002作为一款功率MOSFET驱动芯片,它的应用领域主要取决于其技术参数和性能特点。根据之前提供的信息,EG3002可能适用于以下领域: 1. 电源管理:用于高效率电源转换器,如开关电源(SMPS)、电池充…

栈的实现详解

目录 1. 栈1.1 栈的概念及结构1.2 栈的实现方式1.3 栈的应用场景 2. 栈的实现2.1 结构体2.2 初始化2.3 销毁2.4 入栈2.5 出栈2.6 获取栈顶元素2.7 判空2.8 获取个数 3. test主函数4. Stack.c文件5. Stack.h文件6. 运行展示 1. 栈 1.1 栈的概念及结构 栈:一种特殊的…

【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常

【问题分类】驱动使用 【关键字】OCI、驱动使用、PHP 【问题描述】 PHP使用OCI8连接yashan数据库,使用绑定参数获取数据时,出现报错 如果使用PDO_OCI接口连接数据库,未弹出异常,但是无法正确获取数据 【问题原因分析】 开启O…

张艺兴step新专开启自由驾驶新纪元

张艺兴《Step》新专,开启自由驾驶新纪元!当音乐与驾驶相遇,会碰撞出怎样的火花?当实力派艺人张艺兴遇上全新英文专辑《Step》,便为我们解锁了一种前所未有的出行体验!这不仅仅是一张音乐专辑,更…

Pandas AI:最棒的大模型数据分析神器!

暑期实习基本结束了,校招即将开启。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑&…

Java Opencv识别图片上的虫子

最近有个需求,希望识别图片上的虫子,对于java来说,图像识别不是很好做。在网上也搜索了很多,很多的代码都是不完整,或者下载下载报错,有的写的很长看不懂。所以自己试着用java的opencv写了一段代码。发现识…

Django+Vue.js怎么实现搜索功能

一.前言 类似这样的搜索功能 二.前端代码 <div class"form-container"><div class"form-group"><label for"departure-city">出发城市</label><select v-model"departureCity" id"departure-city&q…

把Vue项目从Window系统迁移到Mac系统的方案

不能启动vue ui 直接运行&#xff0c;会报错如下&#xff1a; failed to load config from /Users/xiaochen/IdeaProjects/ChatViewer-frontend/vite.config.tserror when starting dev server: Error: You installed esbuild for another platform than the one youre curre…

C++:STL容器-->set

使用set容器时需要导入头文件&#xff1a;#include <set> set和multiset区别&#xff1a; set不允许容器中有重复的元素 multiset允许容器中有重复的元素 1. 构造函数 set<T> st; set s(const &st); void printSet(set<int>& s) {for (set<int>…

Integer溢出问题

0. 背景 在刷 LeetCode 时&#xff0c;代码的执行结果与预期出现了偏差&#xff0c;原因是 Int 值超过了允许范围 [ − 2 31 , 2 31 − 1 ] [-2^{31},2^{31}-1 ] [−231,231−1]。工作中从来没有遇到过这种情况&#xff0c;之前的认知是如果 Int 中存储的值超过了允许范围也许…