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

在 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IO多路复用简介和代码实例(select函数)

接上篇 阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介-CSDN博客文章浏览阅读95次。阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介https://blog.csdn.net/CSDN_DU666666/article/details/139598410?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%2…

【Linux】易错点——/etc/passwd ; /etc/shadow;ifconfig;route;chmod;ps;mv

/etc/passwd ; /etc/shadow /etc/passwd: 用户账户的详细信息在此文件中更新。 用户名:密码:用户 ID:群组 ID:用户 ID 信息:用户的家目录: Shell /etc/shadow: 用户账户密码在此文…

ssm160基于Java技术的会员制度管理的商品营销系统的设计与实现+vue

商品营销系统计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本商品营销系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理…

【C++取经之路】继承

目录 继承的概念及定义 单继承的格式 继承方式和访问限定符 继承后子类访问基类成员的权限 基类和派生类对象赋值转换 切片 继承中的作用域 引申:重载和隐藏的区别 派生类的默认成员函数 继承与友元 继承与静态成员 如何实现一个不能被继承的类 复杂的…

【SkiaSharp绘图03】SKPaint详解(一)BlendMode混合模式、ColorFilter颜色滤镜

文章目录 SKPaintSKPaint属性BlendMode获取或设置混合模式SKBlendMode 枚举成员效果预览 Color/ColorF获取或设置前景色ColorFilter 颜色滤镜CreateBlendMode 混合模式CreateColorMatrix 颜色转换CreateCompose 组合滤镜CreateHighContrast 高对比度滤镜CreateLighting 照明滤镜…

Java最新面试题(全网最全、最细、附答案)

一、Java基础 1、基础概念与常识Java 语言有哪些特点? 简单易学(语法简单,上手容易);面向对象(封装,继承,多态);平台无关性( Java 虚拟机实现平台无关性&a…

千万级流量冲击下,如何保证极致性能

1 简要介绍 随着互联网的快速发展,网络应用的流量规模不断攀升,特别是在电商大促、明星直播、重大赛事、头条热搜等热点事件中,秒级100w请求成为了常态。在这样的流量冲击下,如何确保系统稳定、高效地处理每一个请求,为…

抖某音号解封释放实名

##抖音账号封禁后如何解封呢 我相信,做过抖音,或者正在做抖音的朋友,都曾面临一种尴尬至极的局面,辛辛苦苦做起来的账号,或者刚刚准备好的账号,在一时之间,竟然被抖音官方封禁了! 实…

ubuntu下使用cmake编译opencv4.8.0+ffmpeg4.2.2+cuda11.1

1.源码下载 (1)下载ffmpeg4.2.2、opencv4.8.0源码,这里提供一个百度网盘地址: 链接:https://pan.baidu.com/s/1pBksr0_RtKL0cM6Gsf2MGA?pwdcyai 提取码:cyai (2)解压所有文件 例…

小而美的算法技巧:前缀和数组

小而美的算法技巧&#xff1a;前缀和数组 类似动态规划。 class NumArray {private int[] preSum;public NumArray(int[] nums) {preSumnew int[nums.length1];//preSum[0]的前缀和为0for(int i1;i<preSum.length;i){preSum[i]nums[i-1]preSum[i-1];//先计算累加和}}publi…

Git进阶使用(图文详解)

文章目录 Git概述Git基础指令Git进阶使用一、Git分支1.主干分支2.其他分支2.1创建分支2.2查看分支1. 查看本地分支2. 查看远程分支3. 查看本地和远程分支4. 显示分支的详细信息5. 查看已合并和未合并的分支 2.3切换分支1. 切换到已有的本地分支2. 创建并切换到新分支3. 切换到远…

毕业年薪20w起!25届最近5年南京信息工程大学自动化考研院校分析

南京信息工程大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近4年考研分数情况 四、近4年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、…

掌握WhoisAPI,提升域名管理的效率

在互联网时代&#xff0c;域名管理是网站运营中非常重要的一环。通过域名&#xff0c;我们能够轻松访问和识别不同的网站。然而&#xff0c;域名的注册和管理也是一项复杂的任务&#xff0c;特别是对于大规模拥有许多域名的企业来说。为了提升域名管理的效率&#xff0c;我们可…

边缘计算网关在智慧厕所远程监测与管理的应用

随着智慧城市建设的不断深入&#xff0c;城市公共设施的智慧化管理成为了提升城市品质和居民生活质量的关键建设。公厕作为城市基础设施的重要组成部分&#xff0c;其管理效率和卫生状况直接影响着市民的日常生活体验。在公厕设施建设背景下&#xff0c;边缘计算网关技术的应用…

ansible离线安装docker

docker简介&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中。这个容器可以在任何支持Docker的机器上运行&#xff0c;确保了应用在不同环境中的一致性。 网上有很多在线ansible安装docker的&…

Base64编码方式的介绍及其编码解码

一、Base64是什么 Base64是一种用于将二进制数据编码为ASCII字符的编码方式&#xff0c;主要目的是为了能够在文本环境中传输和存储二进制数据。这种编码方式广泛应用于电子邮件、HTTP协议和其他需要传输或存储二进制数据的地方。 二、发明Base64编码的原因 Base64编码的发明解…

猫狗识别(超详细版)(py代码)

猫狗识别&#xff08;一&#xff09; 二、视频识别 用OpenCV和Tkinter构建的视频识别猫狗的应用程序。它允许用户从文件对话框中选择一个视频文件&#xff0c;然后在Tkinter窗口中播放视频&#xff0c;并使用Haar级联分类器实时检测视频中的猫和狗。 1.导入所需的库&#xff…

QT--DAY1

不使用图形化界面实现一个登陆界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//设置窗口标题this->setWindowTitle("登录界面");//设置窗口大小this->resize(535,410);//固定窗口大小this->setFixedSize(535,410)…

北京多商入驻app开发项目的主要优势及功能

多商入驻app开发项目的定义 随着电子支付技术的不断成熟&#xff0c;全国各地的消费者通过网络在线上购物的频率越来越高&#xff0c;为此&#xff0c;多商入驻app开发项目应用而生。各商家也纷纷开始申请入驻商城平台&#xff0c;开设自己的店铺。 图片来源&#xff1a;unspl…

MAVEN-SNAPSHOT和RELEASE

一、快照版本SNAPSHOT和发布版本RELEASE区别 快照版本SNAPSHOT和发布版本RELEASE区别-CSDN博客 在使⽤maven过程中&#xff0c;我们在开发阶段经常性的会有很多公共库处于不稳定状态&#xff0c;随时需要修改并发布&#xff0c;可能⼀天就要发布⼀次&#xff0c;遇到bug时&am…