当前位置: 首页 > news >正文

chromium魔改——navigator.webdriver 检测

chromium源码官网 https://source.chromium.org/chromium/chromium/src

说下修改的chromium源码思路:

首先在修改源码过检测之前,我们要知道它是怎么检测的,找到他通过哪个JS的API来做的检测,只有知道了如何检测,我们才能想办法去绕过,俗话说,知己知彼百战百胜嘛!

绕过 navigator.webdriver 检测

在浏览器中环境对抗的时候,会通过 navigator.webdriver 来检测是否为自动化在控制网站,如果返回为true,则表示是自动化在控制,否则不是,所以我们只需要将他的返回值永远返回false即可

自动化控制返回的值
在这里插入图片描述

正常浏览器返回的值
在这里插入图片描述

在chromium源码中,找到以下路径

\src\third_party\blink\renderer\core\frame\navigator.cc

有以下两种修改方式,选其中一种即可。

方式一:
在这里插入图片描述

方式二:
在这里插入图片描述

修改完之后保存代码即可,在修改的时候不要将原始代码删除,注释即可方便出错的时候查问题。

保存好了之后,运行以下命令,这个命令就是前面编译章节中的编译命令,你当时编译的时候用的是什么,这里就写什么,他不是重新编译,是增量编译,只对新增的内容进行编译,所以速度会快很多。

autoninja -C out/Default chrome

在这里插入图片描述

编译好之后,通过自动化程序检测一下

我们这里使用 playwright 来测试

from playwright.sync_api import sync_playwright

def run():
    with sync_playwright() as p:
        browser = p.chromium.launch(
            executable_path="E:\my_code\chromium\src\out\Default\chrome.exe",
            headless=False
        )
        # 创建一个新的浏览器上下文
        context = browser.new_context()
        # 打开一个新页面
        page = context.new_page()
        # 访问目标网站
        page.goto("https://www.baidu.com")

        # 等待用户输入后再关闭浏览器
        input("Press Enter to close the browser...")
        
        # 关闭浏览器
        browser.close()

if __name__ == "__main__":
    run()

可以看到是已经成功了

在这里插入图片描述

http://www.dtcms.com/a/109563.html

相关文章:

  • 【无人机】无人机PX4飞控系统高级软件架构
  • 创新项目实训开发日志1
  • 21.数据链路层协议
  • 如何在本地部署魔搭上千问Qwen2.5-VL-32B-Instruct-AWQ模型在显卡1上面运行推理,并开启api服务
  • QT 中的元对象系统(五):QMetaObject::invokeMethod的使用和实现原理
  • JavaScript基础-移动端常用开发框架
  • 智能多媒体处理流水线——基于虎跃办公API的自动化解决方案
  • Redis 除了数据类型外的核心功能 的详细说明,包含事务、流水线、发布/订阅、Lua 脚本的完整代码示例和表格总结
  • 【数据集】多视图文本数据集
  • Python第七章09:自定义python包.py
  • maven引入项目内本地包方法
  • WEB安全--文件上传漏洞--php伪协议的利用
  • MySQL索引(操作篇)
  • 分布式锁之redis6
  • GenerationMixin:_sample方法(GenerationMode.SAMPLE, GenerationMode.GREEDY_SEARCH)
  • 程序员学商务英语之Establing Biz Relations Inquiry
  • 自适应卡尔曼滤波
  • 探索 GitHub Copilot:当 AI 成为你的贴身编码助手
  • Win11本地从零开始部署dify全流程
  • TP6图片操作 Image::open 调用->save()方法时候报错Type is not supported
  • Redis基础知识-3
  • linux - 字符设备驱动简介
  • MySql 数据库题目
  • 三防笔记本有什么用 | 三防笔记本有什么特别
  • CentOS中挂载新盘LVM指南:轻松扩展存储空间,解决磁盘容量不足问题
  • ORM mybits mybits-plus
  • 探索现代网络技术:从负载均衡到 Kubernetes
  • ECMAScript介绍
  • 使用C#写的一个Kafka的使用工具
  • git的作用,以及和github的区别