selenium实战指南:如何防止被浏览器检测?-程序员宅基地

技术标签: python  selenium  chrome  测试工具  大数据  

目录

一、简介

1、浏览器指纹识别

2、行为分析

3、为什么会被浏览器检测呢?

二、如何知道自己已经被检测到

1、使用window.navigator.webdriver属性

2、使用在线网站测试工具查看

2.1、手动打开该网页返回

2.2、使用自动化测试工具打开

三、规避检测解决方案

1、使用无头浏览器

1.1、--headless

1.2、--disable-gpu

1.3、--no-sandbox

2、模拟用户行为

2.1、模拟鼠标和键盘操作

2.2、随机化操作

3、设置浏览器的用户代理(User-Agent)

4、undetected_chromedriver库(推荐)

四、结尾


一、简介

在网络技术飞速发展的今天,自动化测试作为软件质量保证的重要手段,已经越来越受到开发者和运维人员的重视。其中,Selenium以其强大的功能和灵活的跨平台特性,成为了许多开发者进行Web应用自动化测试的首选工具。然而,随着浏览器安全策略的不断完善,如何有效地防止Selenium在自动化测试过程中被浏览器检测到,成为了开发者们面临的一个新的挑战。本文将详细探讨Selenium在防止被浏览器检测方面的技巧,帮助开发者更好地应对这一问题。

1、浏览器指纹识别

浏览器指纹识别技术(Browser Fingerprinting)是一种通过分析用户的浏览器行为、配置和功能来识别用户的在线身份和行为的技术。它利用浏览器中的一些特性,如操作系统、浏览器版本、设备类型、插件和用户活动等,构建一个唯一的“指纹”信息。这些信息可以被网站和服务器用来追踪、定位和分析用户的访问行为,从而实现广告定向、个性化推荐、用户细分等目的。

浏览器指纹识别技术具有以下特点:

  • 用户隐私性较低:由于浏览器指纹识别技术可以通过分析用户的浏览器行为来获取用户信息,因此用户的隐私性较低。
  • 难以防范:由于浏览器指纹识别技术依赖于浏览器特性,很难完全防范。部分浏览器已经针对这种技术提供了保护措施,但并不能完全消除风险。
  • 用户体验影响较小:虽然浏览器指纹识别技术可能会影响用户的隐私和体验,但通常情况下,它不会对用户造成显著的影响。

2、行为分析

浏览行为分析(Behavioral Analysis,BA):这是一种分析用户在浏览器中的行为模式的方法,包括用户的浏览历史、访问的网站类型、停留时间等。通过对这些信息的分析,可以判断操作者是否为真人。

在使用自动化过程中尽量避免快速操作,在进行每个步骤的操作中最好停留一下,最好使用模拟鼠标和键盘来操作

3、为什么会被浏览器检测呢?

  • 安全性原因:浏览器通常会对一些恶意行为进行监控和防范,Selenium 模拟浏览器操作的行为可能会被认为是恶意行为。
  • 用户体验原因:浏览器的目的是为用户提供一个良好的用户体验,而 Selenium 模拟浏览器操作可能会影响用户的正常使用体验。
  • 性能问题:Selenium 模拟浏览器操作可能会导致浏览器性能下降,影响其他用户的正常使用。
  • 竞争问题:浏览器厂商通常会限制第三方工具的使用,以避免用户过度依赖这些工具,影响浏览器的稳定性和性能。

二、如何知道自己已经被检测到

1、使用window.navigator.webdriver属性

`window.navigator.webdriver` 是一个属性,它返回一个布尔值,表示当前浏览器是否支持 WebDriver 技术。WebDriver 是一种自动化测试技术,允许开发人员使用类似于操作浏览器的 API 来测试网页应用程序。

打开浏览器,按F12打开控制台,在控制台中输入window.navigator.webdriver

可以看到返回结果是一个false

window.navigator.webdriver属性返回参数
描述
true 表示当前浏览器支持 WebDriver
false 表示当前浏览器不支持 WebDriver
undefined 表示当前浏览器没有提供关于是否支持 WebDriver 的信息

这个属性的值对于使用 WebDriver 进行自动化测试非常重要,因为它可以帮助开发人员确定是否能够在浏览器中使用 WebDriver 进行测试。

当手动打开网站的时候返回结果正常都是false or undefined 因为我们是真人进行操作,但是当使用selenium等其他自动化工具打开网站的时候,很有可能会被浏览器检测到是测试机器人在操作,返回true

通俗来讲就是手动操作打开浏览器会返回false 或者 undefined,使用自动化机器人打开浏览器很大几率会出现true,部分高级网站当识别到你的返回值是true就会返回给你一些错误的网站信息来阻止你的自动化行为

2、使用在线网站测试工具查看

在线网站测试指纹检测

这个网站提供了一个在线工具,可以用于测试你的浏览器指纹。具体来说,它可以收集你的浏览器信息,并生成一个独特的浏览器指纹,用于识别你的浏览器。

一些网站和服务利用浏览器指纹识别技术来跟踪用户、进行用户分析、识别欺诈行为等。通过检测你的浏览器指纹,它们可以识别你的设备和浏览器,即使你更换了IP地址或删除了Cookie也能追踪你的活动。

这个在线工具可以帮助用户了解他们的浏览器指纹是什么样的,以及它可能暴露了什么样的信息。对于普通用户来说,这有助于增强对个人隐私的认识,促使他们采取一些措施来降低被跟踪的风险。对于开发者和安全专家来说,这个工具也可以用于测试网站的防御措施,以及评估不同浏览器或代理工具对浏览器指纹的影响。

2.1、手动打开该网页返回

2.2、使用自动化测试工具打开

使用selenium打开

from selenium import webdriver
import time
#打开谷歌浏览器
driver = webdriver.Chrome()
#页面最大化
driver.maximize_window()
#打开网页
driver.get('https://bot.sannysoft.com/')
time.sleep(10)
driver.save_screenshot('ceshi.png')
#关闭浏览器
driver.quit()

返回结果

当网站上的WebDriver(New)部分显示为红色时,通常表示该网站正在检测到你正在使用的浏览器是通过WebDriver控制的,而不是一个真实的人类用户在操作。WebDriver是一种自动化测试工具,通常被用于自动化测试和网页爬取等任务。然而,一些网站会检测到WebDriver的存在,并将其视为不受欢迎的自动化行为,可能会采取一些措施来阻止这种访问,比如弹出验证码、重定向到其他页面,或者直接拒绝服务。

这个时候就需要我们采取一些措施来规避这种检测

三、规避检测解决方案

现在各个浏览器和网站的反爬机制都在不断升级改造,以下方法不一定完全有效,希望对大家的当前困境有所帮助

1、使用无头浏览器

使用无头浏览器是一种常见的方法来规避网站的检测。下面是一个使用Selenium和无头浏览器的Python示例代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 创建ChromeOptions对象,配置无头模式
chrome_options = Options()
chrome_options.add_argument('--headless')  # 启用无头模式

# 可选:为了进一步模拟真实用户行为,可以添加一些其他的配置
chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速
chrome_options.add_argument('--no-sandbox')  # 在Linux系统上使用时可能需要添加此选项

# 创建WebDriver对象,指定Chrome浏览器和ChromeOptions
driver = webdriver.Chrome(options=chrome_options)

# 访问网页
driver.get("www.baidu.com")

# 执行其他操作,例如查找元素、点击按钮等

# 关闭浏览器
driver.quit()

这段代码使用了Chrome浏览器的无头模式,在创建WebDriver对象时传递了chrome_options参数,这样就可以在无头模式下启动Chrome浏览器。通过这种方式,Selenium脚本在后台运行,不会弹出浏览器窗口,从而减少被检测的风险。

请注意,在某些情况下,网站可能会检测到无头浏览器的使用。

1.1、--headless

  • 这个选项告诉Chrome浏览器在无头模式下运行,即不显示图形用户界面(GUI),而是在后台执行。无头模式的浏览器会在没有显示的情况下执行JavaScript、渲染页面等操作,通常用于自动化测试和数据爬取等任务。
  • 使用无头浏览器可以提高运行效率、节省资源,并且不会打扰用户。

1.2、--disable-gpu

  • 这个选项禁用了Chrome浏览器的GPU加速功能。GPU加速可以加快页面渲染速度,但在一些情况下可能会导致问题,尤其是在无头模式下运行时。
  • 禁用GPU加速通常用于解决一些在无头模式下出现的渲染问题或性能问题。

1.3、--no-sandbox

  • 这个选项禁用了Chrome浏览器的沙箱模式。沙箱模式是Chrome浏览器的一个安全特性,用于隔离浏览器进程和系统,以防止恶意软件对系统的攻击。
  • 在一些特殊的情况下,比如在Linux环境下以root权限运行Chrome浏览器时,沙箱模式可能会导致一些问题,例如启动失败或权限错误。因此,禁用沙箱模式可以解决这些问题。

2、模拟用户行为

在实际操作中,如果操作过快也很容易别检测到是非真人操作,所以我们在自动化操作过程中应当尽量模仿出人为操作痕迹

2.1、模拟鼠标和键盘操作

如移动到元素、点击元素、双击元素等,需要输入时通过使用模拟键盘来进行数据最好不使用send_keys()直接输入,可以采用pyautogui库来进行模拟鼠标键盘的操作

2.2、随机化操作

在进行每次操作的过程中可以适当随机停顿一下,这样可以尽量接近真实用户的操作习惯,避免出现规律性的行为被网站检测到

#随机等待1-15秒
time.sleep(random.randint(1,15))

.....还有很多,待补充

总的来说,通过模拟用户行为并尽量模仿真实用户的操作,可以降低被网站检测到的风险。但需要注意的是,即使采取了以上措施,仍然无法保证完全不被检测到,因此在使用Selenium进行自动化任务时,始终需要保持警惕并做好应对各种情况的准备。

3、设置浏览器的用户代理(User-Agent)

设置浏览器的用户代理(User-Agent)字符串为指定的值。用户代理字符串是浏览器发送给网站的一段文本,用于告诉网站它所使用的浏览器类型和版本等信息,从而进行伪装成真实用户操作

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 设置用户代理字符串为指定的值
user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
chrome_options.add_argument(f'user-agent={user_agent}')
# 创建WebDriver对象,指定Chrome浏览器和ChromeOptions
driver = webdriver.Chrome(options=chrome_options)

# 访问网页
driver.get("https://bot.sannysoft.com/")

# 执行其他操作,例如查找元素、点击按钮等
driver.save_screenshot('ceshi.png')
# 关闭浏览器
driver.quit()

这段代码的关键是使用add_argument()方法将指定的用户代理字符串作为参数传递给ChromeOptions对象的user-agent选项。然后,将ChromeOptions对象传递给webdriver.Chrome()方法来启动Chrome浏览器,并且在浏览器中设置了指定的用户代理字符串。这样就可以模拟特定浏览器和操作系统的访问行为,以达到模拟用户行为的目的。

4、undetected_chromedriver库(推荐)

undetected_chromedriver 旨在通过使用未被检测到的ChromeDriver来提高Selenium自动化脚本的稳定性和可靠性。当你使用普通的ChromeDriver时,有些网站可能会检测到你的脚本正在使用自动化工具,从而采取一些防御措施,比如弹出验证码、拒绝服务等。

undetected_chromedriver库的作用在于通过一些技巧和方法,使得你的Selenium脚本更难被网站检测到。它的主要特点和作用包括:

  1. 随机化配置: undetected_chromedriver会随机化一些配置,比如窗口大小、Chrome版本、ChromeDriver版本等,使得每次启动的浏览器都有些微的差异,从而减少被检测到的风险。

  2. 隐藏WebDriver特征: undetected_chromedriver会尝试隐藏WebDriver特征,比如修改一些JavaScript变量、删除一些WebDriver的特有标志等,以模拟真实用户的行为。

  3. 定期更新: undetected_chromedriver库会定期更新其代码,以适应网站对自动化工具的新检测和防御措施。

  4. 易于使用: 使用undetected_chromedriver库只需要简单地替换你原来的ChromeDriver,无需对现有的Selenium代码做任何修改。

总的来说,undetected_chromedriver库的作用是帮助你编写更稳定、更可靠的Selenium自动化脚本,减少被网站检测到的风险,从而提高自动化任务的成功率。

import undetected_chromedriver as uc
#创建谷歌浏览器
browser = uc.Chrome()
#打开网页
browser.get(url="https://bot.sannysoft.com/")

# 执行其他操作,例如查找元素、点击按钮等

browser.save_screenshot('ceshi.png')
# 关闭浏览器
browser.quit()

得到的结果就是已经避开了网站的检测

5、excludeSwitches参数关闭自动化检测

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
#关闭自动化检测
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 创建WebDriver对象,指定Chrome浏览器和ChromeOptions
driver = webdriver.Chrome(options=chrome_options)

# 访问网页
driver.get("https://bot.sannysoft.com/")

# 执行其他操作,例如查找元素、点击按钮等
driver.save_screenshot('ceshi.png')
# 关闭浏览器
driver.quit()

options.add_experimental_option("excludeSwitches", ["enable-automation"]) 这行代码的功能和作用是为ChromeOptions对象添加一个实验性选项,该选项用于排除特定的开关,其中 "enable-automation" 是要排除的开关名称。

具体来说,这行代码的作用是将 Chrome 浏览器的自动化标志 "enable-automation" 从请求头中排除掉。在正常情况下,Chrome 浏览器会将 "enable-automation" 添加到请求头中,以标识浏览器正在被自动化控制,通常是由Selenium等工具控制。这可能会导致一些网站检测到自动化行为并采取相应的防御措施,比如弹出验证码或拒绝服务。

通过排除 "enable-automation" 这个开关,我们可以让浏览器在请求头中不再显示自动化标志,从而使得自动化行为更难被网站检测到。这有助于提高自动化测试、数据采集等任务的成功率和稳定性。

总之,这行代码的作用是为了规避网站对浏览器自动化的检测,提高自动化脚本的稳定性和可靠性。

...待补充

四、结尾

通过这篇文章给大家分享我在学习过程中的一些经验和心得,希望能够对大家有所帮助,同时也接受大家的建议和意见,共同进步、共同学习。

如果你觉得我的文章对你有所帮助,我诚挚地邀请你关注、点赞和分享。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_51431069/article/details/137957646

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文