探索Selenium的规避检测策略

news2025/1/19 23:02:33

Selenium之规避检测

背景

​ 目前很多大网站有对selenium采取了监测机制。在正常情况下我们用浏览器访问相关网站的window.navigator.webdriver的值为 undefined或者为false。而使用selenium访问则该值为true。我们如何伪装,防止被检测出来呢?

在这里插入图片描述

​ 这是正常浏览器访问,接下来我们看一下selenium的。

在这里插入图片描述

​ 怎么样,是不是被检测出来呢 ?被检测出来的话,可能会不给你数据,弹出一些警告等等,会影响网页的布局等等

应对措施:

使用随机的User-Agent:

​ 网站通常会根据User-Agent标识来判断请求是否来自真实的浏览器。通过设置随机的User-Agent,可以模拟多种浏览器行为。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import random

# 创建浏览器对象
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")

# 设置随机User-Agent
user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36",
    # 添加其他User-Agent...
]
options.add_argument(f"user-agent={random.choice(user_agents)}")

# 创建浏览器对象
driver = webdriver.Chrome(options=options)

​ 我们使用了Options对象来配置浏览器选项,通过add_argument()方法设置随机的User-Agent。您可以在user_agents列表中添加多个常见的浏览器User-Agent,然后使用random.choice()方法随机选择一个User-Agent作为请求头。

​ 当然我们也可以使用python自带的UA库,不需要自己找一些UA了。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent

# 创建UserAgent对象
ua = UserAgent()

# 生成随机User-Agent
user_agent = ua.random

# 创建浏览器选项
options = Options()
options.add_argument(f"user-agent={user_agent}")

# 创建浏览器对象
driver = webdriver.Chrome(options=options)
设置窗口大小和位置

​ 有些网站可能会根据窗口的大小和位置来检测自动化行为。可以使用set_window_size()set_window_position()方法设置浏览器窗口的大小和位置。

# 设置窗口大小和位置
driver.set_window_size(1024, 768)
driver.set_window_position(0, 0)

​ 通过设置合理的窗口大小和位置,可以使浏览器窗口看起来更像是由真实用户操作的。

延时操作

​ 加适量的延时操作可以模拟人类用户的行为模式。

import time
import random

# 等待随机时间
time.sleep(random.uniform(1, 3))

# 执行点击操作
element.click()

# 等待一段时间
time.sleep(2)

​ 在执行某些操作之前等待一段随机的时间,或在执行点击操作后等待一小段时间,可以降低被检测的风险。

注入js脚本:

使用 execute_script() 方法修改 window.navigator.webdriver 的值。

from selenium import webdriver

# 创建浏览器对象
driver = webdriver.Chrome()

# 执行 JavaScript 代码修改 window.navigator.webdriver 的值
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

# 打开网页
driver.get("https://www.taobao.com")

# 继续执行其他操作...

# 关闭浏览器
driver.quit()
```

​ 在上述代码中,我们使用 execute_script() 方法执行 JavaScript 代码来修改 window.navigator.webdriver 的值为 undefined,以欺骗网站的检测机制。

使用 ChromeOptions 添加 excludeSwitches 选项:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 创建浏览器选项
options = Options()

# 添加 excludeSwitches 选项,禁用 webdriver
options.add_experimental_option("excludeSwitches", ["enable-automation"])

# 创建浏览器对象
driver = webdriver.Chrome(options=options)

# 打开网页
driver.get("https://www.taobao.com")

# 继续执行其他操作...

# 关闭浏览器
driver.quit()

在上述代码中,我们使用 add_experimental_option() 方法添加 excludeSwitches 选项,并设置为 ["enable-automation"],以禁用 WebDriver,从而绕过网站的检测。

终极策略:
from selenium.webdriver import ActionChains
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
driver = Chrome('./chromedriver',options=chrome_options)
with open('./stealth.min.js') as f:
    js = f.read()
#进行js注入
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": js
})

driver.get('https://www.baidu.com')

大家如果想要这个js文件,可以上Github上找一下,这里我就分享了。

在这里插入图片描述

温馨提示:

​ 这些方法并不能保证适用于所有网站,因为不同的网站可能采取不同的检测机制。应该注意的是,规避网站的检测机制可能违反网站的使用条款或法律法规。在使用 Selenium 进行自动化脚本时,请确保遵守相关法律法规,并尊重网站的规则和限制。

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

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

相关文章

【Maven】依赖管理

1. 依赖管理 1.1 依赖配置 依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖。 依赖引入步骤:在pom.xml中编写标签,在标签中使用引入坐标,定义坐标的 groupId、artifactId、version,最后点击刷新&…

FluxMQ—2.0.8版本更新内容

FluxMQ—2.0.8版本更新内容 前言 FLuxMQ是一款基于java开发,支持无限设备连接的云原生分布式物联网接入平台。FluxMQ基于Netty开发,底层采用Reactor3反应堆模型,具备低延迟,高吞吐量,千万、亿级别设备连接&#xff1…

WIN10下解决HIVE 初始化MYSQL表报错:Unknown version specified for initialization

今天本地WINDOWS装HIVE,走到最后一步初始化数据库死活不通过: D:\hive\hive-rel-release-3.1.3\bin\ext>hive --service schematool -dbType mysql -initSchema --verbose SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found bind…

基于JSDoc实现TypeScript类型安全的实践报告

在FEDay 2023中我讲了《从JS到TS无缝迁移的实践报告》【视频在这里在这里】,是将一个传统的JS项目(mochajs/mocha)迁移到TypeScript环境的全程。其中提到了一件事情,就是“可以通过JSDoc/TSDoc来生成.d.ts”,从而实现T…

【C语言:自定义类型(结构体、位段、共用体、枚举)】

文章目录 1.结构体1.1什么是结构体1.2结构体类型声明1.3结构体变量的定义和初始化1.4结构体的访问 2.结构体对齐2.1如何对齐2.2为什么存在内存对齐? 3.结构体实现位段3.1什么是位段3.2位段的内存分配3.3位段的跨平台问题3.4位段的应用3.5位段使用注意事项 4.联合体4…

全国规模最大!玻色量子加入算力并网行动!

8月19日,在2023中国算力大会主论坛上,中国移动携手多个超算中心、智算中心,以及云服务商,共同发起全国规模最大的“百川”算力并网行动,打造算力类型最全、规模最大、覆盖最广的“百川”算力并网平台,加快推…

提高Idea编码速度和插件自用推荐

非常推荐 Easy Javadoc 一款注释生成器,很好使~免费,配合使用腾讯、百度之类的翻译免费额度完全够用了,印象中是50万字符每月。下图是使用快捷键生成的注释(我采用鼠标侧面按键,随手一按很方便) Chinese …

HTTP会话技术---Cookie、Session和Token介绍及它们在JavaWeb中的使用

当涉及到Web应用程序的身份验证和状态管理时,我们通常会使用到Cookie、Session和Token这些会话技术。下面是对它们的介绍,并在JavaWeb中的示例 Cookie(HTTP Cookie) Cookie是一种存储在用户浏览器中的小型文本文件,由…

360公司-2019校招笔试-Windows开发工程师客观题合集解析

360公司-2019校招笔试-Windows开发工程师客观题合集 API无法实现进程间数据的相互传递是PostMessage2.以下代码执行后,it的数据为(异常) std::list<int> temp; std::list<int>::iterator it = temp.begin(); it = --it; 3.API在失败时的返回值跟其他不一样是 …

OSPF浅析

一、预习&#xff1a; 1、优点&#xff1a; 是一种典型的链路状态路由协议&#xff0c;协议号89&#xff0c;把大型网络分隔为多个较小、可管理的单元&#xff1a;Area a.减少LSA泛洪范围&#xff0c;有效地把拓朴变化 控制在区域内&#xff0c;达到网络优化的目的…

混音编曲软件tudio One 6.5.1 保姆级安装教程

根据软件大数据显示De-Esser驯服人声嘶嘶声和其他高频声音&#xff0c;和其他 Studio One 中新的去实体插件一样高效且直观易用&#xff0c;使用“收听”按钮查找有问题的频率&#xff0c;然后使用相关的旋钮和 S-Mon 功能拨入 S-Reduce 量即可。实际上我们可以这样讲工作流和协…

消费数据可视化大屏,助力金融机构智慧运维

在今天的数字化时代&#xff0c;消费数据的可视化已经成为了一种重要的趋势。通过将消费数据以图表、图像等形式展现出来&#xff0c;可以帮助我们更直观地了解消费者的行为和趋势。同时&#xff0c;这也为企业提供了更多的分析和决策依据。无论是针对市场营销策略的制定&#…

如何搭建eureka-server

在Spring Cloud项目的pom文件中添加eureka-server的starter依赖坐标 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…

科技论文中的Assumption、Remark、Property、Lemma、Theorem、Proof含义

一、背景 学控制、数学、自动化专业的学生在阅读论文时&#xff0c;经常会看到Assumption、Remark、Property、Lemma、Theorem、Proof等单词&#xff0c;对于初学者可能不太清楚他们之间的区别&#xff0c;因此这里做一下详细的说明。 以机器人领域的论文为例。 论文题目&…

Footprint Analytics x Future3 万字研报:AI 与 Web3 数据行业融合的现状、竞争格局与未来机遇探析(上)

GPT的横空出世将全球的目光吸引至大语言模型&#xff0c;各行各业都尝试着利用这个“黑科技”提高工作效率&#xff0c;加速行业发展。Future3 Campus携手Footprint Analytics共同深入研究AI与Web3结合的无限可能&#xff0c;联合发布了《AI与Web3数据行业融合现状、竞争格局与…

数电笔记之寄存器

数电 1 数字电路基础 1.2 二进制数据表达 1.2.1 二进制简介 1.2.2 用二进制表达文字 常用的中文字符集&#xff1a;GBK&#xff0c;UTF8 1.2.3 用二进制表达图片 图片像素化&#xff0c;像素数字化 1.2.4 用二进制表达声音 1.2.5 用二进制表达视频 1.3 数字电路 1.3…

tmux简单使用

它允许你在一个终端窗口中创建多个终端会话&#xff0c;并在它们之间进行切换。以下是tmux的一些主要用途和功能&#xff1a; 多窗口&#xff1a; Tmux允许你在一个终端中创建多个窗口。每个窗口可以包含一个或多个终端会话&#xff0c;你可以轻松地在这些窗口之间切换。面板分…

1-4节电池升降压充电IC解决方案

描述 MP2760是一款集成窄电压DC&#xff08;NVDC&#xff09;电源路径管理功能和USB On-the-Go(OTG)功能的升降压充电IC&#xff0c;兼容USB PD&#xff0c;适用于单节至4节串联的电池包应用。该芯片的充电输入电压范围广&#xff0c;可支持最高22V。 当启用电池放电模式&…

HITOS_LAB5 进程运行轨迹的跟踪与统计

5. 进程运行轨迹的跟踪与统计 5.1. 实验目的 掌握 Linux 下的多进程编程技术&#xff1b;通过对进程运行轨迹的跟踪来形象化进程的概念&#xff1b;在进程运行轨迹跟踪的基础上进行相应的数据统计&#xff0c;从而能对进程调度算法进行实际的量化评价&#xff0c; 更进一步加…

基于Transformer的U型医学图像分割网络综述

基于Transformer的U型医学图像分割网络综述 论文来自 计算机应用 2023 摘 要&#xff1a;目前&#xff0c;医学图像分割模型广泛采用基于全卷积网络&#xff08;FCN&#xff09;的U型网络&#xff08;U-Net&#xff09;作为骨干网&#xff0c;但卷积神经网络&#xff08;CNN&am…