022.(附加)chromedriver编译-绕过selenium机器人检测

news2024/9/22 1:31:51
  • 有小伙伴说使用selenium没能绕过机器人检测,盘他。

一、selenium简介

  • Selenium 是一个强大的工具,用于Web浏览器自动化,更常被用于爬虫
  • 但selenium需要通过webdriver来驱动chrome,每次运行selenium时,都要先找到对应版本的chromedriver.exe。
  • chromedriver自动化会对浏览器的部分属性进行修改,非常容易被识别为机器人。
  • pypeeteer却没有这种烦恼,它不需要中间驱动,所以还是建议大家使用pyppeteer。但如果你已经写了上万行selenium代码了,那还是编译一个驱动吧。

二、机器人识别网站

  • 1.https://www.browserscan.net/bot-detection
    在这里插入图片描述
  • 1.https://www.browserscan.net/bot-detection

在这里插入图片描述

很明显,常规网站都能检测到selenium机器人。

三、检测原理

  • 将下面的js代码复制粘贴进F12控制台:
// 定义正则表达式
let regex = /^([a-z]){3}_.*_(Array|Promise|Symbol|JSON|Object|Proxy)$/;
// 获取window对象的所有属性名称
let allProps = Object.getOwnPropertyNames(window);
// 过滤出符合正则表达式的属性名称
let filteredProps = allProps.filter(prop => regex.test(prop));
// 输出匹配的属性名
console.log(filteredProps);
  • 正常浏览器会打印
[]
  • 被selenium控制的浏览器会打印
(6) ['cdc_adoQpoasnfa76pfcZLmcfl_Array', 'cdc_adoQpoasnfa76pfcZLmcfl_Object', 
'cdc_adoQpoasnfa76pfcZLmcfl_Promise', 'cdc_adoQpoasnfa76pfcZLmcfl_Proxy', 
'cdc_adoQpoasnfa76pfcZLmcfl_Symbol', 'cdc_adoQpoasnfa76pfcZLmcfl_JSON']

在这里插入图片描述

注意:这就是这2个站检测selenium机器人的核心逻辑。pypeeteer机器人已经不用担心,网站检测不到。

四、编译crhomedriver.exe

注意,这里依旧是全网独一份哈。

  • 打开chromium源码文件:\chrome\test\chromedriver\chrome\devtools_client_impl.cc
1.找到:
std::string script =
        "(function () {"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Array = window.Array;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Object = window.Object;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Promise = window.Promise;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Proxy = window.Proxy;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol = window.Symbol;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_JSON = window.JSON;"
        "}) ();";
    params.Set("source", script);
2.替换为:
std::string script =
        "(function () {"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Array = window.Array;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Object = window.Object;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Promise = window.Promise;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Proxy = window.Proxy;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol = window.Symbol;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_JSON = window.JSON;"
        "}) ();";
    params.Set("source", script);
3.编译:
ninja  -C  out/Default chromedriver

注意:编译完后,会在out/Default目录下生成一个chromedriver.exe文件,这就是驱动。

五、验证

  • 将生成的chromedriver.exe拿过来,运行下面的python代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

# 指定chromedriver的路径
s = Service(r"chromedriver.exe")  # 请将这里替换为你的chromedriver路径

# 初始化Chrome选项
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = r"C:\Users\Administrator\AppData\Local\Chromium\Application\chrome.exe"  # 请将这里替换为你的Chrome浏览器路径
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--fingerprints=11111111")

# 使用Service对象初始化driver
driver = webdriver.Chrome(service=s, options=chrome_options)
driver.delete_all_cookies()

# driver.get("https://www.browserscan.net/bot-detection")
driver.get("https://fingerprintjs.github.io/BotD/main/")
time.sleep(99999)

在这里插入图片描述

可以看到,依旧是自动化控制,官网却已经检测不到了。browserscan也一样。

六、成品

  • 我还是建议小伙伴们自己把流程全部跑一边,编译个自己的指纹浏览器和驱动。
  • 懒的小伙伴还是直接买成品。链接:[https://dwz.cn/KOweICeK]。之前买过的,联系我拿更新。(https://dwz.cn/KOweICeK)
  • 还有,再次感谢小伙伴们的建议和红包鼓励。

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

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

相关文章

VMware Workstation17 安装 Ubuntu 操作系统

今天给伙伴们分享一下VMware Workstation17 安装 Ubuntu 操作系统 ,希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维…

企业邮箱有哪些便捷功能

企业邮箱有哪些便捷功能?一、消息流实现社交式互动;二、邮件委托轻松分担工作;三、音视频通话即时沟通;四、邮件定时发送与提醒确保重要信息不遗漏;五、邮件召回与延迟发送提供反悔机会;六、离线阅读邮件实现无缝工作…

QtQuick Text-对齐方式

属性 Text项目 的horizontalAlignment和verticalAlignment分别用来设置文本在 Text项目区域中的水平、垂直对齐方式。 默认文本在左上方。 属性值有: horizontalAlignment Text.AlignLeftText.AlignRightText.AlignHCenterText.Justify verticalAlignment Text.…

(纯分享01)初学AI,怎样才算是有效提示问题呢?

前言 你有没有想过,为什么有些人似乎能从 AI 工具中获得惊人的效果,而其他人却举步维艰?好用的永远在别人那,而自己的人工智能AI怎么这么像"人工智障"呢?有没有经常被气到呢哈哈哈哈? 问题的答…

Python IDLE修改JetBrains Mono字体教程

自己在使用Python IDLE过程中发现原生字体不好看,不美观。尤其是对于部分字符,l打印不美观,区别不明显。于是诞生了换字体的想法。 教程简单,快速,3-5分钟不到即可完成。 目录 选型 下载安装 使用 选型 考虑到代码…

网络空间资产测绘:为安全防护“画出”实时“地图”

网络空间已成为继海、陆、空、天之后的“第五疆域”,对其空间布局进行摸排并形成“地图”,是维护网络空间安全的基础性工作。近日在2024全球数字经济大会上发布的DayDayMap全球网络空间资产测绘平台,能为用户提供全面、精准、实时的全球网络空…

Go语言中获取tls中的KeyLogFile,用于dubug

文章目录 获取KeyLogFile示例代码:1. client2. client3. 效果 获取KeyLogFile tls.config自带了接口,所以配置的时候只需要打开就行,以客户端为例 keylogfile 是一个 io.Writer 开了这个就自动使用了 keyLogFile, _ : os.OpenFile(keyLogFi…

C#开发编程软件下载安装

1、Visual Studio 2022社区版下载 2、开始安装 3、安装进行中 。。。。

基于edge和bwmorph函数的两种图像边缘检测方法及应用

边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。本文给出edge和bwmorph两个函数进行边缘检测的基本用法,并给出一个应用示例。 一、edge和bwmorph函数简介 edge和bwmorph是MATLAB中用于图像处理边缘检测…

Datawhale AI 夏令营(2024第三期)AI+逻辑推理方向 模型微调学习笔记

如何基于开源大模型进行优化 1. Prompt工程 大模型可能知道问题相关,但是我们问的不清楚。所以需要根据我们的提问,构建出一个比较结构化的、大模型易于理解和分析的提问内容。 在下方的第二个资料里,我才知道有这么多Prompt的构建思路&…

认真学习JVM中类加载过程

本文我们总结JVM中类加载器子系统关于类加载过程,这里默认是Oracle的Hotspot。 【1】类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。 ClassLoader只负责class文件的加载&#xff0…

软件测试——测试分类(超超超齐全版)

为什么要对软件测试进行分类 软件测试是软件⽣命周期中的⼀个重要环节,具有较⾼的复杂性,对于软件测试,可以从不同的⻆度加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理测试的分类⽅法。…

见证中国数据库的崛起:从追赶到引领的壮丽征程《一》

见证中国数据库的崛起:从追赶到引领的壮丽征程《一》 一、追溯历史:中国数据库发展的艰难起步萌芽阶段(20世纪70年代末-80年代初)起步阶段(20世纪80年代中期-90年代初)发展阶段(20世纪90年代中期…

实验2-1-7 输出倒三角图案

本题要求编写程序&#xff0c;输出指定的由“*”组成的倒三角图案。 输出格式: * * * ** * ** **程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {for (int i 0; i < 4; i) {for (int k 0; k < i; k) {printf(" &qu…

YOLO:目标检测模型的训练和推理(简单Demo)

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何训练和推理YOLO模型。使用coco8数据集以一个简单的demo进行示例。 文章目录 一、准备1.1 模型类型1.2 环境配置 二、模型训练和推理三、讨论 一、准备 1.1 模型类型 YOLO8模型性能数据&#xff1a; ModelSize (pixels)mAPval…

ICC2:分段长tree简易版教程

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 分段长tree让一部分sink balance的更好,有助于时序收敛,但ICC2的分段长tree需要单独写一个sdc去做sub tree再换回原始sdc去长tree,流程繁琐,我整理了一个简单的流程,不需要额外的sdc,唯一的缺…

Linux系统如何查看版本信息,内核、发行版、cpu、所有版本

查看当前操作系统内核信息&#xff1a;uname -a查看当前操作系统版本信息&#xff1a;cat /proc/version查看当前操作系统发行版信息&#xff1a; cat /etc/redhat-release 或 cat /etc/issue查看cpu相关信息&#xff0c;包括型号、主频、内核信息等&#xff1a;cat /proc/cpui…

【ARM】SMMU:boot_code.s中转换页表的配置方式

#工作记录# 拖了非常久的页表转换整理&#xff0c;补坑&#xff01;废话不多说开整。 MMU相关的知识点可以参考我之前的博客&#xff0c;这篇博客主要介绍如何在boot_code.s中配置页表。 目录 1.boot_code.s简介 2. MMU配置相关 2.1系统寄存器 2.2 ttb0_base的配置 1.boo…

设计模式的优点

设计模式的优点 1、可重用性2、架构指导3、经验传承4、设计透明5、实践验证 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、可重用性 设计模式允许开发者在遇到相似问题时复用解决方案&#xff0c;节省时间并减少错误。 2、架构指导 …

汽车网络安全 -- MAC介绍:CMAC与CBC-MAC不能混为一谈

目录 1.什么是MAC 2.CMAC 3.HMAC 4.小结 1.什么是MAC MAC全称Message authentication code&#xff0c;是经过特定算法后产生的一小段数据信息&#xff0c;用于校验某数据的完整性和真实性。在数据传递过程中&#xff0c;可检查其内容是否被更改过&#xff0c;不管更改的原…