在 Selenium 中更改 User-Agent | 步骤与最佳实践
在 Selenium 中更改 User Agent 是许多网页抓取任务中的关键步骤。它有助于将自动化脚本伪装成常规浏览器,从而避免被网站检测到。本指南将带您了解如何在 Selenium 中更改 Google Chrome 的 User Agent,并提供最佳实践以确保您的网页抓取任务顺利进行。
目录
- 了解 Selenium User-Agent
- Selenium 中的默认 User-Agent
- 为什么要更改 User-Agent?
a. 在 Google Chrome Selenium 中更改 User-Agent
b. 在 Firefox Selenium 中更改 User-Agent- 更顺畅访问网站的最佳实践
- 结论
了解 Selenium User-Agent
User-Agent 字符串是 HTTP 头信息的重要组成部分,在浏览器和 Web 服务器之间的通信中起着重要作用。它提供有关发送请求的浏览器、操作系统和设备的具体信息。以下是一个典型的 User-Agent 字符串示例:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
这个字符串表明请求来自运行在 Windows 操作系统上的 Chrome 浏览器。
然而,当使用 Selenium 进行 Web 自动化时,默认的 User-Agent 字符串可以揭示请求是由自动化脚本发出的。配备反机器人措施的网站可以轻松检测到这一点并阻止访问,以防止自动化抓取或测试。这使得在 Selenium 中自定义 User-Agent 字符串变得至关重要,以使请求看起来像是来自真实的浏览器,从而降低被检测和阻止的风险。
为此,您可以在 Selenium 中修改 User-Agent 字符串,使其与标准浏览器的字符串匹配,从而提高自动化脚本的隐蔽性和有效性。
Selenium 中的默认 User-Agent
是的,Selenium 在发出 HTTP 请求时使用 User-Agent 字符串。默认情况下,Selenium 将使用与其自动化的浏览器相关联的 User-Agent 字符串。这意味着当您使用 Chrome WebDriver 运行 Selenium 脚本时,User-Agent 字符串将反映 Chrome 的默认 User-Agent。
然而,这个默认的 User-Agent 有时会向 Web 服务器发出信号,表明请求来自自动化脚本,使基于 Selenium 的操作容易被反机器人系统检测和阻止。自定义 User-Agent 字符串可以帮助减轻这个问题,使您的脚本更无缝地融入常规浏览器流量。
是否在反复失败中挣扎,无法完全解决恼人的验证码问题?
发现无缝自动解决验证码的 Capsolver AI 驱动自动网页解锁技术!
领取您的 优惠码 以获得顶级验证码解决方案;CapSolver: WEBS。兑换后,每次充值将额外获得 5% 奖励,无限次。
为什么要更改 User-Agent?
如前所述,User-Agent 字段包含有关发出请求的浏览器类型、版本、引擎和操作系统的信息。如果目标网站在短时间内收到来自同一 User-Agent 的多个请求,它有理由怀疑这些请求来自同一个用户或单个机器人。然后,网站管理员可以暂时阻止来自该特定 User-Agent 的请求,以防止进一步访问。特别是在需要抓取大量数据的情况下,能够更改 User-Agent 以模拟不同用户是至关重要的。这可以显著提高您的抓取成功率。
在 Google Chrome Selenium 中更改 User-Agent
如果您尚未在本地安装 selenium 库,可以使用以下命令进行安装:
pip install selenium
导入库:
from selenium import webdriver
然后初始化一个 Chrome Options 对象并设置自定义 User-Agent:
custom_user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--user-agent={custom_user_agent}')
接下来,创建一个新的 ChromeDriver 实例并向目标网站发出请求:
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://httpbin.org/user-agent")
HTTPBin 是一个 Web 请求调试服务,它显示请求的 User-Agent。如果代码正确,您应该会看到我们自定义的 User-Agent,如下图所示:
在上述代码中,custom_user_agent
值是静态的。如果您希望每次打开浏览器时使用不同的 User-Agent,可以手动收集各种 User-Agent 字符串并将它们编译成一个列表。然后,每次随机选择列表中的一个值。或者,您可以使用 fake-useragent
库,该库提供了一种简单的方法来动态生成随机 User-Agent 字符串。使用以下命令安装该库:
pip install fake-useragent
使用 fake-useragent
非常简单:
from fake_useragent import UserAgent
ua = UserAgent()# 获取一个随机的浏览器 User-Agent 字符串
print(ua.random)# 或者获取特定浏览器的 User-Agent 字符串
print(ua.chrome)
# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
print(ua.firefox)
# Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
print(ua.safari)
# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Safari/605.1.15
结合 Selenium,完整代码如下:
import time
from selenium import webdriver
from fake_useragent import UserAgentua = UserAgent()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--user-agent={ua.random}')driver = webdriver.Chrome(options=chrome_options)
driver.get("https://httpbin.org/user-agent")time.sleep(10)
driver.quit()
这种设置允许我们在 Selenium 驱动的 Google Chrome 中随机化使用的 User-Agent。
在 Firefox Selenium 中更改 User-Agent
Selenium 不仅可以驱动 Google Chrome,还可以驱动 Firefox。唯一的区别是将 webdriver.ChromeOptions()
切换为 webdriver.FirefoxOptions()
。以下是完整代码:
import time
from selenium import webdriver
from fake_useragent import UserAgentua = UserAgent()
firefox_options = webdriver.FirefoxOptions()
firefox_options.add_argument(f'--user-agent={ua.random}')driver = webdriver.Firefox(options=firefox_options)
driver.get("https://httpbin.org/user-agent")time.sleep(10)
driver.quit()
您可以看到网页上成功更改了 User-Agent:
更顺畅访问网站的最佳实践
更改 User-Agent 的目的是防止目标网站阻止我们的访问。基于 User-Agent 的阻止只是许多反抓取和反机器人措施中的一种。更常见的是,网站会设置诸如 CAPTCHA(如 recaptcha、hcaptcha、funcaptcha、datadome 等)等挑战来过滤出机器人。这些挑战通常非常复杂,极大地阻碍了网站的访问。
使用 Capsolver 服务可以帮助您解决 CAPTCHA 挑战。如果您在向目标网站发出 API 请求时遇到 CAPTCHA 挑战,可以使用 Capsolver 的 任务 API,它会解决各种挑战并返回正确的令牌给您。
如果您使用的是 Selenium 等自动化工具,可以将 Capsolver 的扩展无缝集成到 Chrome 和 Firefox 等浏览器中。这种集成增强了您的能力,提供了更顺畅的访问体验。
结论
通过本文,您可以很好地掌握在 Selenium 中自定义 User-Agent 的方法。这不仅可以提高您的网页抓取工作的隐蔽性和可靠性,还能确保与不同网站的交互更加顺畅。无论是通过 CAPTCHA 挑战还是模拟用户行为,战略性地调整 User-Agent 都可能成为游戏规则的改变者。记住,使用像 CapSolver 这样的工具,克服网页数据访问的障碍不仅是可行的,而且是高效的。在当今动态的数字环境中,采用这些实践往往可以提高您的自动化项目的效率,并最大化网页抓取的收益!
CapsolverCN官 方代理交流扣 群:497493756
相关文章:

在 Selenium 中更改 User-Agent | 步骤与最佳实践
在 Selenium 中更改 User Agent 是许多网页抓取任务中的关键步骤。它有助于将自动化脚本伪装成常规浏览器,从而避免被网站检测到。本指南将带您了解如何在 Selenium 中更改 Google Chrome 的 User Agent,并提供最佳实践以确保您的网页抓取任务顺利进行。…...

2024酒店IPTV云桌面系统建设方案
Hello大家好,我是点量小芹,这一年多的时间一直在分享实时云渲染像素流相关的内容,今天和大家聊聊酒店IPTV云桌面电视系统解决方案,或者有的朋友也会称之为IPTV服务器。熟悉小芹的朋友知道,IPTV软件系统是我们一直在推的…...
java Thrift TThreadPoolServer 多个processor 的实现
当我们使用Thrift 通信的时候,服务端有时候需要注册多个类,去实现通信,这时候我们就不能再使用单一Processor的方式,就要使用多个Processor,那么如何去实现呢? 多个Process 服务端 public static void m…...

失眠焦虑的解脱之道:找回内心的平静
🍃 在这个快节奏的时代,失眠与焦虑似乎成了许多人的隐形敌人。每当夜幕降临,它们便悄悄潜入心底,扰乱我们的思绪,让宁静的夜晚变得无比漫长。然而,生活总有办法让我们找回内心的平静,只需稍作调…...

OLED柔性屏的显示效果如何
OLED柔性屏的显示效果非常出色,具有多方面的优势。以下是关于OLED柔性屏显示效果的详细分析: 色彩表现:OLED柔性屏的每个像素都可以独立发光,因此色彩准确性极高。黑色呈现得非常深邃,而亮部则展现出鲜明而生动的细节。…...
百货商城优选 伊利牛奶推出全国首款减甲烷环保学生奶
近日,伊利集团受邀参加在全国首个“国际首脑峰会零碳场馆”召开的“降碳增产科技助力奶业绿色高质量发展”首款低碳饲料创新大会。会上,伊利宣布将推出全国首款减甲烷环保学生牛奶——伊利QQ星学生纯牛奶,进一步将可持续发展落到实处…...

Fluid 1.0 版发布,打通云原生高效数据使用的“最后一公里”
作者:顾荣 前言 得益于云原生技术在资源成本集约、部署运维便捷、算力弹性灵活方面的优势,越来越多企业和开发者将数据密集型应用,特别是 AI 和大数据领域应用,运行于云原生环境中。然而,云原生计算与存储分离架构虽…...
软件测试--第十一章 设计和维护测试用例
1.单选题 (2分) 下面有关测试设计的叙述,说法不正确的是( )。 A 测试用例的设计是一项技术性强.智力密集型的活动 B 在开展测试用例设计前,必须将测试需求进行详细展开 C 在一般的测试组织内,测试用例的评审可能不是正式的评审会 D 在测试用例设计时,只设计覆盖正常流程和操…...
前端只允许一次函数调用
如果你正在进行前端开发,并且只想允许一次函数调用,你可以使用JavaScript的闭包结构创建一个只能被调用一次的函数。这样的函数有时被称为单次调用函数(“one-time call” functions)或一次性函数(“once” functions&…...

visdom使用时所遇的问题及解决方法
最近在用visdom进行可视化的过程中,虽然可有效的避免主机拒绝访问(该问题的解决方法,请参考深度学习可视化工具visdom使用-CSDN博客)即在终端输入python -m visom.server 1.训练过程中visdom出现ValueError: too many file descr…...
密封类(sealed class)
在 Kotlin 中,密封类(sealed class)是一种受限的类层次结构,允许您定义一个封闭的类层次结构,其中类的所有可能子类都已知并且位于同一文件中。密封类的主要作用是提供类型安全的受限层次结构,使得 when 表…...

私域引流宝PHP源码 以及搭建教程
私域引流宝PHP源码 以及搭建教程...

磁盘管理 以及磁盘的分区 详细版
磁盘管理 track:磁道,就是磁盘上同心圆,从外向里,依次1号、2号磁道sector:扇区,将磁盘分成一个一个扇形区域,每个扇区大小是512字节,从外向里,依次是1号扇区、2号扇区cylinder&…...

加码多肤色影像技术 这是传音找到的“出海利器“?
全球化时代,市场竞争愈演愈烈,产品差异化已然成为了企业脱颖而出的关键。在黄、白肤色长期占据人像摄影主赛道的背景下,传音就凭借独一无二的多肤色影像技术走出非洲,走向了更广阔的新兴市场。 聚焦深肤色人群拍照痛点,…...
C++方法封装成dll及C#调用示例
1,编译生成dll时可能出现错误,解决办法:pch.h文件头部,添加声明 #define _CRT_SECURE_NO_WARNINGS 2, c头文件声明 extern "C" __declspec(dllexport) char* getvalue(const char * param1, const char * param2); 3, c方法实现…...
定时清理Linux服务器缓存shell脚本
服务器内存占用过高,如何定时清理一下服务器内存呢?写一个清理缓存脚本,加入到定时任务中。 一、编写脚本 clear_cache.sh 脚本,放到home目录下。 #!/bin/bash# 清除页面缓存、目录项和 inode 缓存 sudo sync echo 3 | sudo tee /proc/sys/vm/drop_caches# 记录执行时间到日…...
Guava常用方法
目录 一、数学和数值操作 二、并发库 三、缓存 四、集合 五、I/O 与文件操作 六、网络 七、时间处理 八、事件总线 九、反射 十、范围和集合操作 十一、随机数和测试 十二、注解处理 十三、比较器和排序 十四、哈希和散列 Guava 是 Google 开源的一个 Java 工具库ÿ…...

干货分享:宏集物联网HMI通过S7 MPI协议采集西门子400PLC数据
前言 为了实现和西门子PLC的数据交互,宏集物联网HMI集成了S7 PPI、S7 MPI、S7 Optimized、S7 ETH等多个驱动来适配西门子200、300、400、1200、1500、LOGO等系列PLC。 本文主要介绍宏集HMI通过S7 MPI协议采集西门子400PLC数据的操作步骤,其他协议的操作…...

【Web API DOM11】节点操作
目录 一:DOM节点 1 什么是DOM节点 2 DOM节点分类 二:节点查找(元素节点) 1 节点关系 父节点 子节点 兄弟节点 三:增加节点 1 创建节点 2 追加节点 2 案例:渲染数据 案例中核心代码块 样式 四…...

Unity 设置窗口置顶超级详解版
目录 前言 一、user32.dll 1.什么是user32.dll 2.如何使用user32.dll 二、句柄Handle 1.句柄 2.句柄的功能 3.拿句柄的方法 三、窗口置顶 1.窗口置顶的方法 2.参数说明 3.使用方法 四、作者的碎碎念 前言 up依旧挑战全网讲解最详细版本~~ 本篇文章讲解的是unity…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...