解决selenium爬虫被浏览器检测问题
文章目录
- 专栏导读
- 1.问题解析
- 2.代码解析(Edge/Chrome通用)
- 2.1 设置Edge浏览器选项:
- 2.2 尝试启用后台模式
- 2.3 排除启用自动化模式的标志
- 2.4 禁用自动化扩展
- 2.5 设置用户代理
- 2.6 实例化浏览器驱动对象并应用配置
- 2.7 在页面加载时执行JavaScript代码
- 3.完整代码(可直接复制使用)
专栏导读
✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。
✍ 其他专栏:《数据分析案例》 ,《机器学习案例》😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍
1.问题解析
对于selenium模拟网页登录被检测到的原因,很多博主大佬对此都有其解释。这里就不再阐述。
但是为了让本博主和小伙伴们方便并快速找到原因,以下是AI给出的答案:
使用Selenium爬虫被检测到的原因主要有以下几点:
- 请求头信息差异
默认请求头差异:Selenium在默认情况下发送的请求头信息与真实浏览器略有不同,这可能导致服务器识别出非人类访问。例如,Selenium的WebDriver在发送请求时,可能会包含特定的标识(如window.navigator.webdriver),这些标识可以被网站用来检测是否使用了自动化工具。
可定制性不足:虽然Selenium允许自定义请求头,但相比真实浏览器,其请求头可能缺乏足够的“人性化”信息,如referer字段、用户代理(User-Agent)字符串的多样性等。- 访问模式异常
访问频率过高:Selenium爬虫通常具有较高的访问频率,这与人类用户的访问行为存在显著差异。如果爬虫在短时间内对同一网站进行大量请求,很容易被服务器识别为异常行为。
行为模式固定:由于Selenium爬虫是程序化操作,其行为模式相对固定,如固定的点击顺序、输入速度等,这与人类用户的随机性操作形成对比,增加了被检测的风险。- 浏览器指纹差异
浏览器指纹:每个浏览器都有其独特的指纹信息,包括操作系统、浏览器版本、插件列表等。Selenium爬虫通常使用单一的浏览器配置进行大量请求,这可能导致其浏览器指纹与大多数真实用户不同,从而被网站识别。- 其他反爬虫机制
IP地址限制:如果Selenium爬虫频繁使用同一IP地址进行访问,该IP地址可能会被网站加入黑名单,从而限制或封禁其访问。
Cookie验证:部分网站在登录后会在每个请求中要求携带相关的Cookie信息,如果Selenium爬虫无法正确处理这些Cookie,也可能导致被检测。- 应对措施
为了减少Selenium爬虫被检测的风险,可以采取以下措施:
自定义请求头:尽可能模拟真实浏览器的请求头信息,包括User-Agent、referer等字段。
设置合理的访问间隔:在请求之间设置随机间隔时间,模拟人类的自然访问规律。
使用代理IP:通过代理IP进行访问,隐藏真实的IP地址,避免被服务器封禁。
修改WebDriver属性:通过修改Selenium WebDriver的默认属性,如禁用window.navigator.webdriver标识,减少被检测的风险。
模拟用户行为:在爬虫中加入模拟用户行为的元素,如随机点击、滚动页面等,使爬虫行为更接近真实用户。
2.代码解析(Edge/Chrome通用)
2.1 设置Edge浏览器选项:
option = webdriver.EdgeOptions()
这行代码创建了一个EdgeOptions对象,该对象用于配置Microsoft Edge浏览器的启动选项。这是在使用Selenium与Edge浏览器交互时的第一步。
2.2 尝试启用后台模式
option.add_experimental_option("detach", True)
这行代码尝试通过添加实验性选项"detach"并设置为True来让浏览器在后台运行。然而,需要注意的是,"detach"并不是Selenium官方支持的Edge浏览器选项,且其效果可能因Selenium版本和浏览器实现而异。在某些情况下,这个选项可能不起作用或不被识别。
2.3 排除启用自动化模式的标志
option.add_experimental_option("excludeSwitches", ["enable-automation"])
这行代码通过添加实验性选项"excludeSwitches"并传入一个包含"enable-automation"的列表来尝试隐藏自动化痕迹。"enable-automation"是一个Chrome(及可能也适用于Edge,因为它们共享很多相同的命令行选项)的标志,用于启用自动化模式,该模式可能会改变浏览器的行为或允许网站检测到自动化。
2.4 禁用自动化扩展
option.add_experimental_option("useAutomationExtension", False)
这行代码通过设置"useAutomationExtension"为False来禁用Selenium的自动化扩展。这个扩展可能会暴露Selenium的存在,从而被网站检测到。
2.5 设置用户代理
option.add_argument( "User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46")
这行代码通过add_argument方法添加一个命令行参数来设置浏览器的用户代理(User-Agent)。用户代理是一个在HTTP请求中发送的头部,用于告诉服务器客户端的操作系统、浏览器版本等信息。这里设置为一个模拟Chrome浏览器的用户代理,以尝试绕过一些基于用户代理的检测。
2.6 实例化浏览器驱动对象并应用配置
driver = webdriver.Edge(options=option)
这行代码使用之前配置的EdgeOptions对象(option)来实例化一个Edge浏览器的WebDriver对象。这个WebDriver对象将用于控制Edge浏览器进行自动化测试或爬虫操作。
2.7 在页面加载时执行JavaScript代码
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """
})
这行代码使用Chrome DevTools Protocol(CDP)的Page.addScriptToEvaluateOnNewDocument命令来在页面加载时自动执行一段JavaScript代码。这段代码通过Object.defineProperty方法重写了navigator.webdriver属性,使其getter函数返回undefined。这样做可以隐藏Selenium的存在,因为一些网站可能会通过检查navigator.webdriver属性来判断是否在使用自动化工具。这是绕过网站自动化检测的一种常用方法。
3.完整代码(可直接复制使用)
option = webdriver.EdgeOptions()
option.add_experimental_option("detach", True)
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option("useAutomationExtension", False)
option.add_argument("User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46")
# 实例化浏览器驱动对象,并将配置浏览器选项
driver = webdriver.Edge(options=option)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""
})
📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗
相关文章:

解决selenium爬虫被浏览器检测问题
文章目录 专栏导读1.问题解析2.代码解析(Edge/Chrome通用)2.1 设置Edge浏览器选项:2.2 尝试启用后台模式2.3 排除启用自动化模式的标志2.4 禁用自动化扩展2.5 设置用户代理2.6 实例化浏览器驱动对象并应用配置2.7 在页面加载时执行JavaScript代码 3.完整代码(可直接…...

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-17
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-17 1. Large Language Models in Biomedical and Health Informatics: A Review with Bibliometric Analysis H Yu, L Fan, L Li, J Zhou, Z Ma, L Xian, W Hua, S He… - Journal of Healthcare …, 2024 生物…...

LLM - 理解 多模态大语言模型(MLLM) 的 幻觉(Hallucination) 与相关技术 (七)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142463789 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 多模态…...

如何在C++中实现RDP协议的屏幕更新功能?
在C++中实现RDP协议的屏幕更新功能涉及多个步骤,包括接收RDP服务器发送的屏幕更新PDU(协议数据单元)、解析这些PDU以获取图像数据,以及将这些图像数据渲染到本地显示设备上。以下是一个简化的流程,指导你如何在C++中处理这一功能: 1. 监听和接收屏幕更新PDU 首先,你的…...

Tornado 是一个 Python 异步网络库和 web 框架
Tornado 是一个 Python 异步网络库和 web 框架,它最初由 FriendFeed 开发,后来被 Facebook 收购并开源。Tornado 因其非阻塞的 I/O 操作和优秀的性能而广受欢迎,特别是在需要处理大量并发连接的应用中。Tornado 的底层实现主要依赖于 Python …...

鹏哥C语言49---第5次作业:选择语句 if 和 switch
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //---------------------------------------------------------------------------------第 5 次作业:选择语句 if 和 switch //-----------------------------------------------------------------1.输…...

通过 Flink 的火焰图定位反压
在 Apache Flink 中,Web UI 提供了丰富的监控工具来帮助用户分析和解决作业性能问题,其中火焰图(Flame Graph)是用于分析反压问题的一个强有力的工具。反压可能是由于作业中某些算子处理速度过慢,或者资源耗尽导致的。…...

初识爬虫8
1.selenium的作用和工作原理 2. 使用selenium,完成web浏览器调用 # -*- coding: utf-8 -*- # 自动化测试工具,降低难度,性能也降低 from selenium import webdriverdriver webdriver.Edge()driver.get("https://www.itcast.cn/")…...

Unity SRP 可编程渲染管线的基本用法
可编程渲染管线使用教程 SRP 可以处理Canvas为Screen Space - Overlay的渲染 安装插件 首先进入package manager,下载Core RP Lib组件 创建渲染管线 编写渲染管线逻辑脚本 新建脚本取名为MPipeLine,该脚本用于实现渲染管线的处理逻辑 using Unity…...

AutoX.js向后端传输二进制数据
android的JavaScript自动化软件用过Hamibot和AutoX.js 不过在向后端传输二进制数据时都有些限制,不如浏览器前端那么自由。Hamibot的http按文档应该时能支持传字节数组,但是实际上应该还没有支持。AutoX.js的http也是这样,但是AutoX.js还支持…...

lvgl学习笔记--基础对象1
【LVGL学习笔记】(三)控件使用_学习_煜个头头-GitCode 开源社区 LVGL 基础对象|极客笔记 #include "../../../lv_examples.h"void lv_ex_obj_1(void) {lv_obj_t * obj1;obj1 lv_obj_create(lv_scr_act(), NULL);lv_obj_set_size(obj1, 100, …...

TDengine 在业务落地与架构改造中的应用实践!
前言 在物联网和大数据时代,时序数据的管理和分析变得至关重要。TDengine,作为一款专为时序数据设计的开源数据库,以其卓越的存储和查询效率,成为众多企业优化数据架构的优选。本文将分享我将TDengine成功应用于实际业务的经验&am…...

Python3爬虫教程-HTTP基本原理
HTTP基本原理 1,URL组成部分详解2,HTTP和HTTPS3,HTTP请求过程4,请求(Request)请求方法(Request Method)请求的网址(Request URL)请求头(Request H…...

竹云赋能“中国·贵州”全省统一移动应用平台建设,打造政务服务“新引擎”
近日,2024中国国际大数据产业博览会在贵州贵阳圆满落幕。会上,由贵州省政府办公厅牵头建设的“中国贵州”全省统一移动应用平台正式发布,聚焦民生办事、政务公开、政民互动、扁平高效、数据赋能五大模块,旨在打造公平普惠的服务平…...

【MySQL 04】数据类型
目录 1.数据类型分类 2.数值类型 2.1 tinyint 类型 2.2 bit类型 2.3 float类型 2.4decimal 3.字符串类型 3.1 char类型 3.2 varchar类型 4.日期和时间类型 6. enum和set类型 6.1.enum和set类型简介: 6.2.enum和set的一般使用方法 6.3.用数字的方式…...

夹耳式蓝牙耳机哪个牌子最好,教你如何不踩雷
近年来,夹耳式耳机备受众人喜爱。主要原因在于其不入耳的特性,既能保护听力健康,又能让人享受到极致的音乐体验。久而久之,人们对入耳式耳机反而感到不习惯了。然而,一些想要入手夹耳式耳机的小伙伴却犯了难࿰…...

亿发零售云解析:新零售破局与年轻群体消费趋势变化
近年来,随着数字化、智能化的快速发展,“新零售”概念逐渐成为商业领域的热门话题。相比传统零售,新零售通过线上与线下的深度融合,利用大数据、人工智能等技术,赋能消费者与品牌之间的互动。尤其在年轻消费群体中&…...

zabbix“专家坐诊”第257期问答
问题一 Q:zabbix5.0监控项里的键值,怎么设置变量值?{#ABC} {$ABC} 都识别不到变量。 A:可以参考一下这个。 问题二 Q:我想问一下用odbc创建监控项,生成了json格式,如何创建一个触发器去判断里面…...

【代码笔记】
1级 第一课——cout /* C01.L01.程序的基本结构、cout语句 杨彦彬 2024.9.23日作业 (2024.9.23做) */ //调用头文件 #include<bits/stdc.h> //使用标准名字空间 using namespace std; //代码主体 int main(){//输出数字cout<<25;cout<&…...

CentOS上使用Mosquitto实现Mqtt主题消息发布和订阅mqtt主题消息连同时间戳记录到文件
场景 CentOS上使用rpm离线安装Mosquitto(Linux上Mqtt协议调试工具)附资源下载: CentOS上使用rpm离线安装Mosquitto(Linux上Mqtt协议调试工具)附资源下载-CSDN博客 上面介绍了mosquitto的离线安装。 如果业务场景中需要订阅某mqtt主题的消息并将收到消息的时间以…...

COMTRADE 录波文件 | 可视化工具 | 电能质量查看软件
COMTRADE 录波文件 | 可视化工具 | 电能质量查看软件 主要功能介绍 支持 IEEE Std C37.111-1991/1999/2013 规范。读取 ASCII 或二进制 COMTRADE 文件。查看来自 COMTRADE 配置文件的模拟和数字通道列表。将图表导出为 SVG、BMP、JPEG 和 PNG 图形格式。将显示的观察结果以 C…...

【面试宝典】面试基础指导
目录 🍔 简历怎么写 🍔 ⾯试前针对项⽬撰写完成项⽬⽂档 🍔 ⾯试前 🍔 ⾯试中 4.1 投递简历当天没有收到⾯试邀约 4.2 讲解项⽬ 4.3 讲解知识 4.4 ⾯试中关于技术选型的演变 🍔 ⾯试后 🍔 小结 &…...

Linux·权限与工具-git与gdb
1. git工具 git是一款软件,发明它的人同时发明了Linux操作系统,也就是大名鼎鼎的Linus Torvalds 林纳斯托瓦兹。后来人们把git软件包装,产生了github、gitee等平台。 git产生的初衷就是便于进行多人协同管理,同时它还可以用来将本…...

unity 如何 团队协作避免文件冲突?
在Unity团队协作中,避免文件冲突的关键在于版本控制、场景和Prefab的管理、以及沟通。以下是具体方法: 1. 使用版本控制系统 (VCS) Unity支持多个版本控制系统,如Git和Perforce。通过版本控制,每位团队成员可以独立工作&…...

VOC2007 的ImageSets/Main目录下通常有四个文件test.txt val.txt train.txt trainval.txt
在 VOC2007 的ImageSets/Main目录下通常有四个文件: test.txt:这个文件列出了用于测试的图像文件名。这些图像将在评估模型性能等测试阶段被使用。train.txt:此文件包含用于训练的图像文件名。在模型的训练过程中,程序会读取这些图…...

JavaScript中的parseInt(), Number(),+有啥区别?
文章目录 parseInt()Number()一元加号 处理 NaN 的常见方法1. 使用 isNaN() 函数检查值2. 使用 Number.isNaN() 方法3. 提供默认值4. 使用 try...catch 结构5. 使用类型守卫 在JavaScript中,parseInt(), Number(), 和一元加号 都可以用来转换值到数字类型ÿ…...

java核心基础
文章目录 1. Java开发基础1.1 DOS常用命令:(以MAC常用命令比较)1.2 JVM、JRE、JDK之间的关系1.3 Java开发环境的搭建1.4 Java的注释,标识符、标识符的命名规范1.5 变量和常量的定义及初始化1.6 Java的运算符1.7 三大语句1.8 常用的类1.8.1 ja…...

java 字符串如何通过占位符替换字符串
在Java中,可以使用String.format()方法或者MessageFormat.format()方法来通过占位符替换字符串。 例子1:使用String.format()方法 String str "Hello, %s! Today is %s."; String result String.format(str, "Alice", "Sun…...

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【LMS调测】
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 LMS全称为Lite Memory Sanitizer,是一种实时…...

2024.9.24 数据分析
资料 111个Python数据分析实战项目,代码已跑通,数据可下载_python数据分析项目案例-CSDN博客 【数据挖掘六大项目实战】敢说这是全B站讲的最详细最通俗易懂的数据挖掘教程!整整60集!学不会来找我!-数据挖掘、数据挖掘…...