undetected-chromedriver 使用教程,指定浏览器驱动和浏览器版本
前言
浏览器自动化测试,测试过一些网站检测
目录
- 前言
- 1. 安装 `undetected-chromedriver`
- 2. 基本使用
- 示例代码:
- 代码解析:
- 3. 反自动化检测绕过
- 自定义浏览器设置
- 示例:使用自定义 `User-Agent`
- 示例:启用无头模式(Headless)
- 示例:禁用 GPU 加速
- 4. 使用代理
- 示例:配置代理
- 5. 常见问题及解决方案
- 1. 无法绕过反自动化检测
- 2. 驱动无法启动
- 6. 总结
undetected-chromedriver
是一个用于绕过浏览器自动化检测的 Python 库。它可以帮助开发者通过 Selenium 启动 Chrome 浏览器时避免被检测为自动化脚本,特别是在需要避免反自动化机制的场景下非常有用。
介绍如何安装、配置并使用 undetected-chromedriver
,以及如何避免常见的自动化检测。
1. 安装 undetected-chromedriver
首先,确保你的环境中已安装 undetected-chromedriver
。使用以下命令安装:
pip install undetected-chromedriver
undetected-chromedriver
会自动处理一些反自动化的机制,允许你通过 Selenium 启动浏览器并避免被网站检测为自动化浏览器。
2. 基本使用
以下是一个简单的例子,展示了如何使用 undetected-chromedriver
启动浏览器并访问一个网页。
示例代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import undetected_chromedriver as uc
import timechrome_options = uc.ChromeOptions()driver = uc.Chrome(options=chrome_options,driver_executable_path="D:\chromedriver_win\chromedriver.exe",browser_executable_path="C:\Program Files\Google\Chrome\Application\chrome.exe",
)
driver.get("https://nowsecure.nl")
#打印标题
print(driver.title)
#保存网页截图
driver.save_screenshot("nowsecure.png")
time.sleep(10)
driver.quit()
代码解析:
uc.ChromeOptions()
:创建浏览器选项对象,可以在其中设置各种浏览器参数(例如无头模式、代理等)。uc.Chrome(options=options)
:启动 Chrome 浏览器,并传入配置选项。- driver_executable_path 指定浏览器驱动路径,如果默认运行没问题,可以不指定
- browser_executable_path 指定浏览器路径,如果默认运行没问题,可以不指定
driver.get()
:打开指定的网页。time.sleep(5)
:等待页面加载完成,实际使用中你可以使用显式等待(WebDriverWait
)来代替sleep
。driver.title
:获取页面的标题。driver.quit()
:关闭浏览器,释放资源。
3. 反自动化检测绕过
undetected-chromedriver
的核心功能是绕过反自动化检测。它会自动处理一些常见的自动化检测机制,例如修改 navigator.webdriver
属性和 User-Agent
,从而避免被检测为自动化脚本。
自定义浏览器设置
你可以进一步自定义浏览器的行为,例如修改 User-Agent
、启用无头模式等。
示例:使用自定义 User-Agent
options.add_argument('--user-agent=YourCustomUserAgent')
示例:启用无头模式(Headless)
无头模式可以让浏览器在没有界面的情况下运行,适用于不需要查看浏览器界面的自动化任务。
options.add_argument('--headless')
示例:禁用 GPU 加速
options.add_argument('--disable-gpu')
4. 使用代理
在一些情况下,网站会根据 IP 地址或地理位置进行反自动化检测,使用代理服务器可以帮助隐藏真实 IP。
示例:配置代理
options.add_argument('--proxy-server=http://your.proxy.server:port')
将 your.proxy.server:port
替换为你自己的代理地址。
5. 常见问题及解决方案
1. 无法绕过反自动化检测
有些网站可能会使用更高级的检测技术,undetected-chromedriver
可能无法绕过所有的检测。在这种情况下,你可以尝试以下方法:
- 更换代理。
- 随机化
User-Agent
和其他浏览器特征。 - 使用显式等待代替
sleep
,模拟更自然的浏览器行为。
2. 驱动无法启动
如果你遇到启动 Chrome 驱动失败的情况,可能是因为版本不匹配。确保你的 Chrome 浏览器版本和 chromedriver
版本匹配。
如果你使用的是 undetected-chromedriver
,它通常会自动处理驱动版本问题,但仍然建议保持 Chrome
和 chromedriver
的版本一致。
可以在网上搜索对应的浏览器版本驱动,先查看浏览器版本,在浏览器地址栏输入
chrome://version/
6. 总结
undetected-chromedriver
是一个非常实用的库,它通过绕过自动化检测机制,帮助开发者使用 Selenium 实现更稳定的网页自动化。你可以通过修改浏览器选项、使用代理或自定义 User-Agent
来进一步优化绕过策略。
希望本教程能够帮助顺利使用 undetected-chromedriver
进行浏览器自动化。如果遇到问题,可以查看官方文档或在评论区留言,我们一起讨论解决方法!
相关文章:
undetected-chromedriver 使用教程,指定浏览器驱动和浏览器版本
前言 浏览器自动化测试,测试过一些网站检测 目录 前言1. 安装 undetected-chromedriver2. 基本使用示例代码:代码解析: 3. 反自动化检测绕过自定义浏览器设置示例:使用自定义 User-Agent示例:启用无头模式(…...
cmake
一. 是什么 cmake是一个跨平台的构建工具。 跨平台:可以在linux,windows,macos中使用。 构建工具:cmake不直接参与编译,而是生成平台相应的构建工具。比如:linux下的makefile,windows下的.sln(解…...
Linux高并发服务器开发 第十七天(管道缓存区查询大小 管道的优劣 命名管道mkfifo 建立释放映射区mmap/munmap 匿名映射 进程间的通信)
目录 1.pipe管道读写行为 1.1例题:实现父子进程 ls | wc -l 1.2兄弟进程 ls | wc -l 2.管道缓存区 2.1命令查询 2.2函数查询 3.pipe管道的优劣 4.命名管道 fifo 5.mmap 5.1文件进程间通信 5.2建立、释放映射区 5.3匿名映射 6.进程间通信 6.1父子进间通…...
windows系统远程桌面连接ubuntu18.04
记录一下自己在配置过程中遇到的问题,记录遇到的两大坑: windows系统通过xrdp远程桌面连接ubuntu18.04的蓝屏问题。参考以下第一章解决。 同一局域网内网段不同的连接问题。参考以下第三章解决,前提是SSH可连。 1. 在ubuntu上安装xrdp 参考&…...
SQLMesh系列教程-2:SQLMesh入门项目实战(下篇)
上篇我介绍了环境搭建、duckdb数据准备、sqlmesh数据模型、plan命令运行。本文继续介绍审计、测试、生成血缘关系以及python模型等。 有两种方法可以在SQLMesh中创建宏。一种方法是使用Python,另一种方法是使用Jinja。这里我们创建Python宏。让我们构建简单的Python…...
ThinkPHP8视图赋值与渲染
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 在控制器操作中,使用view函数可以传入视图…...
tkinter-TinUI-xml实战(12)应用组启动器
tkinter-TinUI-xml实战(12)应用组启动器 引言主界面单独条目 编辑框命令行指令子任务指令 演示题外话 引言 应用快捷启动器有很多现成软件,但是大多都是将常用软件分类,或者建立一个个包含一套工作、学习环境的软件类区ÿ…...
MySQL隐式转换介绍、常见场景和导致问题、示例代码
概述 MySQL 中的 隐式类型转换 是指在某些操作中,MySQL 会自动将数据的类型转换为另一种类型,以便完成操作。虽然这种特性在某些情况下很方便,但也可能导致性能问题、数据丢失或意外的查询结果。 1. 什么是隐式类型转换? 隐式类…...
Quartz定时任务
官网:http://www.quartz-scheduler.org/ OpenSymphony 开源组织在Job scheduling领域的一个开源项目,基于java实现的任务调度框架 设计模式:Builder模式、Factory模式、组件模式、链式编程 核心概念: 任务Job 想要实现的任务…...
【C++八股】静态局部变量/全局变量/局部变量的区别和使用场景
1. 静态局部变量 (Static Local Variable) 作用域:静态局部变量的作用域仅限于函数或代码块内部,就像普通局部变量一样,但其生命周期不同。生命周期:静态局部变量的生命周期是整个程序的运行期间,它只会在第一次调用时…...
飞算 JavaAI:加速 AI + 行业趋势的智能化进程
在数字化浪潮奔涌的当下,“AI 行业” 已然成为不可逆的发展趋势,各行业都在积极探索 AI 技术与自身业务的融合,期望借此实现创新突破与转型升级。在这一进程中,飞算 JavaAI凭借其卓越的技术实力和独特的功能优势,为加…...
【Elasticsearch入门到落地】7、文档操作
接上篇《6、索引库的操作》 上一篇我们学习了ElasticSearch的索引库的操作,以及mapping映射属性以及CRUD操作。本篇我们来学习文档的薪资、查询、删除和修改操作。 上一篇我们建立了索引库,库有了我们就可以往里面添加数据了,然后对文档进行…...
【算法】【双指针】acwing算法基础 2816. 判断子序列
题目 给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。 请你判断 a 序列是否为 b 序列的子序列。 子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5} 的一个子序列。 输入格式 第一…...
【Unity3D】Jenkins Pipeline流水线自动构建Apk
目录 一、准备阶段 二、创建Pipeline流水线项目 三、注意事项 一、准备阶段 1、安装tomcat 10.0.5 Index of apache-local/tomcat/tomcat-10 2、安装jdk 17 Java Archive Downloads - Java SE 17.0.13 and later 3、下载Jenkins 2.492.1 (.war)包 War Jenkins Packa…...
Openssl的使用,CA证书,中间证书,服务器证书的生成与使用
证书教程 1、Openssl相关文档2、生成证书命令初步解释3、准备openssl的配置文件 openssl.cnf4、证书生成4.1、生成根证书、CA根证书、自签名证书4.2、生成服务器证书4.3、生成中间证书4.3、使用中间证书生成服务器证书5、使用openssl操作证书5.1 查看证书内容5.2 进行证书测试5…...
HCIA项目实践--静态路由的综合实验
八 静态路由综合实验 (1)划分网段 # 192.168.1.0 24#分析:每个路由器存在两个环回接口,可以把两个环回接口分配一个环回地址,所以是四个环回,一个骨干,这样分配,不会出现路由黑洞#19…...
VSCode中出现“#include错误,请更新includePath“问题,解决方法
1、出现的问题 在编写C程序时,想引用头文件但是出现如下提示: (1)首先检查要引用的头文件是否存在,位于哪里。 (2)如果头文件存在,在编译时提醒VSCode终端中"#include错误&am…...
鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)
文章目录 一、概述二、原理介绍三、使用规则四、复用类型详解1、标准型2、有限变化型2.1、类型1和类型2布局不同,业务逻辑不同2.2、类型1和类型2布局不同,但是很多业务逻辑公用 3、组合型4、全局型5、嵌套型 一、概述 组件复用是优化用户界面性能&#…...
如何使用deepseek等AI工具辅助web后端工作的开发
使用DeepSeek等AI工具辅助Web后端开发可以显著提升效率,以下是具体应用场景和操作指南: 一、核心开发场景 代码生成与补全示例场景:快速生成CRUD接口 操作:输入提示词 用Node.js Express框架编写用户管理模块,要求: - RESTful API设计 - 包含创建/查询/更新/删除接口 - …...
嵌入式音视频开发(一)ffmpeg框架及内核解析
系列文章目录 嵌入式音视频开发(零)移植ffmpeg及推流测试 嵌入式音视频开发(一)ffmpeg框架及内核解析 文章目录 系列文章目录前言一、ffmpeg的内核1.1 框架解析1.2 内核解析1.3 FFmpeg内部数据流1.3.1 典型的解码流程1.3.2 典型的…...
MFC线程安全案例
作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、项目解析 二…...
spring cloud和spring boot的区别
Spring Cloud和Spring Boot在Java开发领域中都是非常重要的框架,但它们在目标、用途和实现方式上存在明显的区别。以下是对两者区别的详细解析: 1. 含义与定位 Spring Boot: 是一个快速开发框架,它简化了Spring应用的初始搭建以…...
探索后端开发中的异步API:基于Resilience4j与Reactive Programming的高性能设计
引言 随着微服务架构的普及,后端系统面临的挑战愈发严峻,尤其是在高并发和高可用性方面。传统的同步调用模式虽然简单,但在处理大量并发请求时可能会成为瓶颈。为了应对这一问题,异步编程逐渐成为后端开发的热门话题。 在本文中…...
JDK 17 和 JDK 21 在垃圾回收器(GC)上有什么优化?如何调整 GC 算法以提升应用性能?
JDK 17 和 JDK 21 在垃圾回收器(GC)上有什么优化?如何调整 GC 算法以提升应用性能? 本文将从 JDK 17 与 JDK 21 的垃圾回收改进出发,结合代码示例解析优化方案,并提供实际项目中的调优策略,帮助…...
两个角度理解「交叉熵损失函数」
目录 前言一、交叉熵 角度1、计算机基础(1)编码(2)数据分布 2、熵 相关2.1 信息量2.2 信息熵2.3 相对熵2.4 最小化「相对熵」还是「交叉熵」 3、公式推导3.1 信息量3.2 信息熵3.3 相对熵 二、极大似然估计 角度1、似然函数1.1 二次…...
深挖vue3基本原理之一 —— 响应式系统(Reactivity System)
响应式系统(Reactivity System) 1.1 基于 Proxy 的响应式代理 在 Vue 3 中,响应式系统的核心是使用 ES6 的 Proxy 来替代 Vue 2 里的 Object.defineProperty 方法,以此实现更加全面和强大的响应式追踪功能。下面我们来详细剖析这…...
解锁Rust:融合多语言特性的编程利器
如果你曾为理解Rust的特性或它们之间的协同工作原理而苦恼,那么这篇文章正是为你准备的。 Rust拥有许多令人惊叹的特性,但这些特性并非Rust所独有。实际上,Rust巧妙地借鉴了众多其他语言的优秀特性,并将它们融合成了一个完美的整体。深入了解Rust这些重要特性的来源以及它是…...
AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI
前言: 做过全栈的工程师知道,如果一个APP的项目分别是前端/后端两个团队开发的话,那么原型设计之后,通过接口文档进行开发对接是非常必要的。 传统的方法是,大家一起定义一个接口文档,然后,前端和后端的工程师进行为何,现在AI的时代,是不是通过AI能协助呢,显然可以…...
[AUTOSAR通信] - PDUR模块解读
点击订阅专栏不迷路 文章目录 一、 PDUR模块概述二、功能描述2.1 发送路由功能2.2 接收路由功能2.3 网关路由功能2.4 路由控制功能 三、配置項介紹3.1. PduRBswModules3.2. PduRGeneral3.3. PduRRoutingTables3.4. PduRRoutingPath3.5. PduRSrcPdu3.6. PduRDestPdu 四、总结 &g…...
伺服报警的含义
前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#的运动控制程序的时候,一个必要的步骤就是设置伺服报警信号的…...
物联网(IoT)如何与人工智能(AI)的结合
物联网(IoT)与人工智能(AI)的结合是当前技术发展的重要趋势,通常被称为 AIoT(人工智能物联网)。这种结合通过将AI的计算能力和数据分析能力与物联网的海量设备连接能力相结合,实现了…...
有哪些PHP开源框架属于是“高开疯走”的?
“高开疯走”是一个网络流行语或者谐音梗。可能是指一开始起点很高(高开),然后发展迅速或者变得非常牛(疯走)。 在PHP生态中,一些框架面对市场的风起云涌,能持续保持高质量发展,切实…...
本地部署DeepSeek摆脱服务器繁忙
由于图片和格式解析问题,可前往 阅读原文 最近DeepSeek简直太火了,频频霸榜热搜打破春节的平静,大模型直接开源让全球科技圈都为之震撼!再次证明了中国AI的换道超车与崛起 DeepSeek已经成了全民ai,使用量也迅速上去了…...
Miniforge —— 轻量化的 conda 解决方案
引言 在日常使用中,我们常常使用 Anaconda 或 Miniconda 来管理 Python 环境和包。但由于 Anaconda/Miniconda 属于商业产品,当企业规模超过一定人数时就会涉及付费问题。相比之下,Miniforge 是由社区主导维护的一个完全免费的替代方案&…...
GO语言基础知识
一、引言 在当今快速发展的软件开发领域,Go语言(又称Golang)凭借其简洁的语法、强大的并发支持和高效的性能,逐渐成为许多开发者的首选编程语言之一。Go语言由Google团队开发,自2009年发布以来,已经在云原…...
Electron 全面解析:跨平台桌面应用开发指南
引言 在当今多平台并存的数字时代,如何高效开发跨平台桌面应用成为开发者面临的重要挑战。Electron作为GitHub开源的跨平台框架,凭借其独特的Web技术融合能力,已成为构建桌面应用的热门选择。本文将深入探讨Electron的核心原理、开发实践及未…...
git 克隆指定 tag 的项目
git 克隆指定 tag 的项目 一、克隆指定tag的项目二、验证克隆结果 一、克隆指定tag的项目 以 tinyxml2项目 为例说明: git clone --branch V10.0.0 https://github.com/leethomason/tinyxml2.git解释: git clone:这是克隆一个远程仓库的命…...
pytorch笔记:mm VS bmm
1 bmm (batch matrix multiplication) 批量矩阵乘法,用于同时处理多个矩阵的乘法bmm 的输入是两个 3D 张量(batch of matrices),形状分别为 (batch_size, n, m) 和 (batch_size, m, p)bmm 输出的形状是 (batch_size, n, p) 2 mm…...
《qt open3d中添加最远点采样》
qt open3d中添加最远点采样 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterFarthestDownSample_triggered();void MainWindow::on_...
自然语言处理NLP入门 -- 第二节预处理文本数据
在自然语言处理(NLP)中,数据的质量直接影响模型的表现。文本预处理的目标是清理和标准化文本数据,使其适合机器学习或深度学习模型处理。本章介绍几种常见的文本预处理方法,并通过 Python 代码进行示例。 2.1 文本清理…...
depcheck检查node.js项目中未使用和缺失依赖的工具
depcheck检查node.js项目中未使用和缺失依赖的工具 一、安装二、使用方法 depcheck 是一个用于检查 Node.js 项目中未使用依赖项和缺失依赖项的工具。以下为你详细介绍它的相关信息、使用方法和作用。 主要作用: 1.发现未使用的依赖 在项目开发过程中,我们可能会安…...
正则表达式(竞赛篇)
为了更深入了解正则表达式,我们需要首先学习与正则表达式有关的类以及方法。如Pattern和Matcher类,以及部分字符串方法。 我们这里先将简单的字符串方法(String类)进行讲解 在Java中,String类提供了许多用于字符串操作的方法,其中…...
国科大 2024-2025秋 大数据分析课程期末复习重点
教师:靳小龙、刘盛华 博主在做期末复习时,发现这门课的资料少之又少,搜遍全网只能找到几份作业答案。特此将本学期老师画的重点分享给学弟学妹们,希望对大家的复习有所帮助。 靳小龙老师部分: 大数据与大数据分析简…...
使用Python爬虫获取淘宝Custom API接口数据
一、引言 淘宝作为中国最大的电商平台之一,其提供的API接口为开发者提供了丰富的数据访问能力。通过淘宝的Custom API接口,开发者可以获取商品详情、店铺信息、订单数据等多种资源。这些数据对于电商运营、市场分析、竞品监控等场景具有极高的价值。本文…...
人生的转折点反而迷失了方向
就像我老婆说的,我是抽空结了一个婚。今天是上班的第三天,不知道是出于何种原因,自己反而陷入了深深的困境,没有了斗志,原因也找不出来,白天在公司没有很大量的产出,晚上回去是想学一学…...
Web应用项目开发 ——Spring Boot邮件发送
一.邮件发送介绍 邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。在现代的Web应用程序中,邮件发送功能是非常常见且重要的一部分,Spring Boot框架提供了简单且强大的方式来实现邮件发送功能。Spring中提供…...
mit6.824-lab1
1.任务及要求 https://pdos.csail.mit.edu/6.824/labs/lab-mr.html 2 Coordinator 与 Worker 的设计分析 2.1 Coordinator(协调器)的核心职责 协调器是 MapReduce 系统的核心控制节点,负责全局任务调度与状态管理,具体功能如下…...
Vision Transformer:打破CNN垄断,全局注意力机制重塑计算机视觉范式
目录 引言 一、ViT模型的起源和历史 二、什么是ViT? 图像处理流程 图像切分 展平与线性映射 位置编码 Transformer编码器 分类头(Classification Head) 自注意力机制 注意力图 三、Coovally AI模型训练与应用平台 四、ViT与图像…...
linux查看所有程序占用的本地端口
sudo ss -tulwnp ss是Socket Statistics的缩写,用来替代旧的netstat工具,功能更强大,执行更快。它用于查看系统的网络连接情况,包括TCP、UDP等协议的信息。 查阅ss的帮助文档(man ss),发现选项…...
java后端开发day15--字符串(一)
(以下内容全部来自上述课程) 1.API (Application Programming Interface 应用程序编程接口) 1.简单理解 简单理解:API就是别人已经写好的东西,我们不需要自己编写,直接使用即可。 Java API&…...