在 Selenium 中更改 User-Agent | 步骤与最佳实践

news2024/12/26 23:10:35

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

目录

  1. 了解 Selenium User-Agent
  2. Selenium 中的默认 User-Agent
  3. 为什么要更改 User-Agent?
    a. 在 Google Chrome Selenium 中更改 User-Agent
    b. 在 Firefox Selenium 中更改 User-Agent
  4. 更顺畅访问网站的最佳实践
  5. 结论

了解 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 UserAgent

ua = 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 UserAgent

ua = 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

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

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

相关文章

Pikachu靶场--RCE

exec"ping" 输入IP地址查看页面反应 可以在IP地址的后面拼接我们想要执行的命令 127.0.0.1 & ipconfig 127.0.0.1 && type C:\Windows\win.ini 127.0.0.1 | systeminfo 127.0.0.1 && net user 命令连接符 &命令1和命令2正…

Windows环境部署MySQL_8.4.0 LTS的部署安装、验证连接以及卸载全过程实操手册

前言: 什么是 MySQL MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle 公司。MySQL 是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内&am…

DS1339C串行实时时钟-国产兼容RS4C1339

RS4C1339串行实时时钟是一种低功耗的时钟/日期设备,具有两个可编程的一天时间报警器和一个可编程方波输出。地址和数据通过2线双向总线串行传输。时钟/日期提供秒、分钟、小时、天、日期、月份和年份信息。对于少于31天的月份,月末的日期会自动调整&…

药品光照稳定性试验箱如何进行光强度的校准和验证?

药品光照稳定性试验箱是一种用于模拟不同光照条件下药品贮存和稳定性评价的设备,其精准的光强度控制和稳定性对药物质量的保证至关重要。为了确保光照稳定性试验箱的光强度控制精准可靠,以下将介绍光照稳定性试验箱如何进行光强度的校准和验证。 1、设备…

2024年最佳插电式混合动力电动汽车

对电动汽车充满好奇和环保意识的司机们还没有准备好跨入纯电动汽车,他们可以找到一个折衷方案,即插电式混合动力车。 在过去的16年里,我一直在把握汽车行业的脉搏。试驾数百辆汽车、电动汽车、插电式混合动力车,跟踪汽车行业的新闻…

从11个视角看全球Rust程序员1/4:深度解读JetBrains最新报告

讲动人的故事,写懂人的代码 五个月前,编程界的大佬JetBrains发布了他们的全球开发者年度报告。 小吾从这份报告中找出了下面11个关于全球程序员如何使用Rust的有趣的趋势,让你学习和使用Rust更轻松。 1 这两年有多少程序员在工作中使用了Rust? 2 全球程序员使用Rust有多…

示例:WPF中DataGrid设置多级分组样式

一、目的&#xff1a;应用CollectionViewSource和GroupStyle设置DataGrid多级分组样式 二、实现 一级分组效果如下 二级分组效果如下 三、环境 VS2022 四、示例 具体实现代码如下 <TabItem Header"DataGrid - 多级分组"><TabItem.Resources><Colle…

09-Spark架构

相比MapReduce僵化的Map与Reduce分阶段计算&#xff0c;Spark计算框架更有弹性和灵活性&#xff0c;运行性能更佳。 1 Spark的计算阶段 MapReduce一个应用一次只运行一个map和一个reduceSpark可根据应用复杂度&#xff0c;分割成更多的计算阶段&#xff08;stage&#xff09;…

电影《加菲猫家族》观后感

上周看了电影《加菲猫家族》&#xff0c;本片其中有很多明亮的画面&#xff0c;相关艳丽的色彩&#xff0c;充满温馨的场景&#xff0c;很符合加菲猫的一贯画风&#xff0c;即使反派出场时&#xff0c;带有阴暗的感觉&#xff0c;看起也不是特别吓人&#xff0c;比较欢乐气氛&a…

umijs脚手架

node 16.9.1 注意node版本的问题 node 18.20.0 这个问题其实是node与中端连接出错&#xff0c;无法初始化TTY&#xff08;终端设备&#xff09;&#xff0c;可以用cmd命令行来创建umi项目 nvm管理node https://github.com/coreybutler/nvm-windows/releases 这是nvm-window…

减肥药实质利好服装业:身材好了,更时尚了 1-5月份,新建商品房销售面积同比下降20.3%

减肥药实质利好服装业&#xff1a;身材好了&#xff0c;更时尚了 减肥成功的顾客纷纷瞄准性感look&#xff0c;不但促进了销售&#xff0c;还给服装品牌节省了成本&#xff0c;因为小尺寸的衣服使用的面料更少。大码女装&#xff0c;可能是下一个被 GLP-1减肥神药杀死的行业。…

无需配置MySQL,Navicat也有在线版了?

前言 随着互联网技术的飞速发展&#xff0c;远程办公和在线协作成为了新的趋势。为了满足这一需求&#xff0c;TitanIDE模板市场近日上线了Navicat模板&#xff0c;使得数据库管理变得更加便捷、高效。现在&#xff0c;用户只需在浏览器打开TitanIDE&#xff0c;即可轻松使用N…

柯桥外语学校考级英语-如何估算四六级的分数

四六级的题型分值占比&#xff0c;如果按照满分100分算&#xff0c;各部分分值如下&#xff1a; 写作部分为15分&#xff1b; 基本切题&#xff0c;文字勉强连贯&#xff0c;有相当多的语言错误&#xff0c;建议估8分。 如果思想没表达清楚&#xff0c;连贯性差&#xff0c;那…

软件安全测试和渗透测试的区别是什么?

在现今数字化时代&#xff0c;软件安全测试和渗透测试变得越来越重要。那么&#xff0c;软件安全测试和渗透测试到底是什么?它们之间有什么区别?又有什么作用呢?让我们一起来详细探究。 软件安全测试是一种专门用于评估软件系统在面对各种安全威胁时的强度和抵抗能力的测试…

【会议征稿】第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024,7月19-21)

由浙江工业大学主办&#xff0c;第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024) 将于2024年7月19-21日在浙江杭州召开。 会议旨在为从事物联网、人工智能与机械自动化的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学…

经纬恒润助力微宏动力荣获ISO/SAE 21434网络安全流程认证证书

近日&#xff0c;经纬恒润与微宏动力合作的网络安全开发及认证项目顺利完成了阶段性里程碑。作为一家全球化的新能源及储电技术产品及解决方案供应商&#xff0c;微宏动力成功获得了由国际独立第三方检测、检验和认证机构UL Solutions授予的ISO/SAE 21434网络安全流程认证证书。…

免费 逼真:快手“可灵”后又一Sora级选手登场

就在今日&#xff0c;英伟达投资的旧金山初创公司 Luma AI 打出一手王牌&#xff0c;推出新一代 AI 视频生成模型 Dream Machine&#xff0c;可以文生视频&#xff0c;图生视频&#xff0c;人人免费可用。同时&#xff0c;Luma AI 称 Dream Machine 可以从文本和图像生成“高质…

bit band

位带(bit band) 简介: 在嵌入式系统和微控制器中,位带是一种特殊的内存映射技术. 它允许程序员像访问普通内存一样直接访问和修改特定寄存器的单个位. 使用bit band技术,可以通过内存映射的方式,将特定的位操作转换位对整个字的操作,从而实现对单个位的读写. 作用: 提高位操…

git 如何撤销已经 push 的 merge

今天在合并代码时, 发现自己失误把另外一个分支 B 的代码合并到了自己分支 C, 于是想到要撤销这次 merge 一般地, 如果我们想要撤销某次 commit 可以 git revert <commit-id>. 然而, 对于 merge 类型的 commit 不能直接 git revert <commit-id> 这里举个例子: 我…

Pytorch构建vgg16模型

VGG-16 1. 导入工具包 import torch.optim as optim import torch import torch.nn as nn import torch.utils.data import torchvision.transforms as transforms import torchvision.datasets as datasets from torch.utils.data import DataLoader import torch.optim.lr_…