Selenium防检测实战指南:如何防止Selenium被浏览器检测?
在进行网络爬虫、自动化测试或数据采集时,Selenium 是最常用的工具之一。然而,随着网站反爬虫机制的日益升级(如 Cloudflare、Akamai、Geetest 等),许多开发者发现自己编写的 Selenium 脚本刚运行没多久,就会频繁触发验证码、被要求滑块验证,甚至直接遭到 IP 封禁。
“Selenium 被检测”已经是自动化领域不可避免的难题。本文将深度解析 Selenium 被网站识别的深层原因,揭秘网站反爬系统的检测途径,并提供一套从基础到进阶的绕过检测全攻略。
为什么Selenium容易被检测?网站是如何发现的?
网站之所以能精准识别出你使用的是 Selenium 而不是真实用户,主要是因为 Selenium 在启动浏览器时,会在运行时环境和浏览器特征中留下大量的自动化痕迹。
网站的反爬虫系统主要通过以下几个途径来检测 Selenium:
1、WebDriver 特征
WebDriver 是 Selenium 控制浏览器所使用的标准协议,也是网站检测自动化浏览器最常见的方式之一。浏览器在被 WebDriver 控制时,会暴露一些自动化相关特征,其中最典型的就是 window.navigator.webdriver 属性。
该属性通常有以下三种返回结果:
-
true:表示当前浏览器正在被自动化工具控制。 -
false:表示当前浏览器没有被自动化工具控制。 -
undefined:表示没有可用信息表明浏览器是否被自动化工具控制,通常意味着浏览器未暴露该属性或进行了特殊处理。
正常人类用户访问时,该属性值为 false 或 undefined;而当 Selenium 启动浏览器时,该值会被默认设为 true。因此早期许多网站只需在页面加载时检测这一项即可识别 Selenium 自动化程序。
2、浏览器指纹
浏览器指纹是利用浏览器运行时的硬件与软件特性生成的一串“数字身份证”。网站会收集浏览器的大量环境信息,例如 User-Agent、操作系统、浏览器版本、屏幕分辨率、时区、语言、Canvas、WebGL、AudioContext、字体列表、GPU 信息、CPU 核心数等。这些信息组合后能够形成一个相对稳定且具有唯一性的浏览器指纹。
Selenium 启动的默认浏览器环境会与真实用户的环境存在差异。真实用户的浏览器通常会随着设备、系统、安装的软件和使用习惯形成各不相同的浏览器环境,因此浏览器指纹具有较高的真实性和差异性。而 Selenium 脚本往往运行在无头模式(Headless)或默认配置下,其生成的硬件指纹往往呈现出高同质化或异常组合。这些相似或异常的指纹特征,很容易与反爬系统已经积累的自动化工具指纹模式相匹配,从而增加被识别为自动化访问的风险。
因此,当浏览器指纹存在较多异常时,即使 navigator.webdriver 已被隐藏,也仍然可能被识别为自动化浏览器。
3、用户行为分析
用户行为分析是从动态交互模式的维度来检测 Selenium。人类在使用浏览器时,其操作充满随机性与物理特性:鼠标移动轨迹是带有加速度和轻微抖动的弧线,键盘打字有毫秒级的随机停顿,页面滚动也是连续且不规则的。
相比之下,Selenium 的默认指令则是高度“机械化”的——点击元素时直接触发目标中心点的坐标,文本输入是瞬间完成的 0 毫秒打字,鼠标移动是毫无物理规律的直线跳跃,且在页面加载完毕后会毫秒不停地发起下一次请求。近年来,越来越多的反爬平台已经开始利用机器学习模型分析用户行为,而不是依赖固定规则进行判断。
4、网络/IP
浏览器环境正常并不意味着一定能够通过检测,网络环境同样是网站重点关注的对象。反爬系统通常会分析访问请求的来源 IP,包括 IP 是否来自数据中心、云服务器、代理网络以及 IP 的历史信誉、ASN、地理位置等信息。
如果大量请求来自同一个 IP,或者 IP 在短时间内频繁访问不同账号、不同页面,都可能触发风控策略。此外,网站还会综合 Cookie、Session、登录状态等信息,对同一 IP 下的访问行为进行关联分析,从网络层面对异常访问进行识别。
如何查看Selenium环境暴露了哪些特征?
如果想知道当前 Selenium 浏览器环境有哪些自动化特征已经暴露,可以使用 SannySoft Bot Detector 进行检测。它是一款免费的浏览器环境检测工具,能够迅速列出当前浏览器中的 WebDriver 痕迹。
编写代码:
在你的 Selenium 脚本中,将请求目标地址设置为 https://bot.sannysoft.com/。
from selenium import webdriver
import time
driver = webdriver.Chrome() # 启动你当前配置的 driver
driver.get("https://bot.sannysoft.com/")
time.sleep(5) # 留出时间查看页面检测结果
等待页面加载完成后,检测结果会自动生成。
重点观察 WebDriver (New) 项,如果是被标为红色的,说明很可能会被识别为机器人。

页面还会按照多个维度展示当前浏览器环境的检测结果,通常会显示下面这两种结果:
-
OK:表示该项特征正常,符合真实人类浏览器的表现。
-
FAIL:表示该项特征已严重暴露,会被反爬系统拦截。
如何防止Selenium被检测?
方法1:使用Undetectable Chromedriver库
Undetectable Chromedriver 是一个基于 Selenium 的开源 Python 库,它对 ChromeDriver 的启动过程进行了封装,并针对部分已知的自动化特征进行了兼容性处理,目的是减少浏览器因默认 WebDriver 配置而暴露的一些自动化痕迹。
示例代码:
import undetected_chromedriver as uc
if __name__ == '__main__':
driver = uc.Chrome()
driver.get('https://www.example.com') # 应修改为你的目标网址
方法2:使用selenium-stealth插件
selenium-stealth是 Python 生态中一个专门用来给 Selenium 做“隐身伪装”的辅助插件。它的核心作用是:在 Selenium 启动 Chrome 浏览器时,通过自动注入精心编写的 JavaScript 脚本,重写和伪装各种暴露自动化的浏览器属性。
安装selenium-stealth:
pip install selenium-stealth
示例代码:
from selenium import webdriver
from selenium_stealth import stealth
import time
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
# options.add_argument("--headless")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r"C:\Users\DIPRAJ\Programming\adclick_bot\chromedriver.exe")
stealth(driver,
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
url = "https://bot.sannysoft.com/"
driver.get(url)
time.sleep(5)
driver.quit()
使用selenium-stealth后的检测结果显示正常。

方法 1 和方法 2 有什么局限性?
虽然上述方法能够在一定程度上抹去自动化痕迹,但它们本质上都属于“打补丁”式的表层伪装。就像是戴上面具伪装,一旦防爬系统探测得更深(例如检测底层 Canvas 渲染或硬件 API),伪装就会被识破。
比“打补丁”更彻底的解决思路,是不再进行表面的修修补补,而是直接为一个或多个自动化任务提供完全真实、指纹独立的浏览器环境,这正是指纹浏览器的核心价值所在。
方法3:使用指纹浏览器
指纹浏览器从底层改变了绕过检测的逻辑:它直接从内核层面提供完整、真实的浏览器指纹,而不是在 JS 层面打补丁。
-
纯净的独立环境:在指纹浏览器中,每个浏览器环境都拥有完全独立的指纹、独立的 Cookie 和缓存文件,从底层做到了物理隔离。
-
自定义与真实性:你可以任意配置操作系统类型、浏览器版本、Canvas、WebGL、AudioContext、WebRTC 以及字体列表等数百个指纹参数。
-
完美融合独立 IP:每个环境都可以各自配置独立的代理 IP(如住宅代理)。
在该方案下,每一个配置好的环境都拥有独立的指纹特征与 Cookie 缓存,并且可以各自绑定独立的代理 IP。对于网站的反爬系统而言,每一次的访问请求都来自于一个完全纯净、独立的真实用户浏览器。
以 AdsPower 为例,它提供了本地 API 接口(Local API)。你只需要在 AdsPower 中创建好配置完美的各个独立环境,然后编写 Selenium 脚本,通过 API 获取端口并直接驱动指纹浏览器。这样既保留了 Selenium 强大的自动化编排能力,又拥有了指纹浏览器的反检测外壳。

先通过 AdsPower 的本地接口启动一个浏览器环境:
import requests
# AdsPower 本地 API,profile_id 是你在 AdsPower 里创建的环境 ID
resp = requests.get(
"http://local.adspower.net:50325/api/v1/browser/start",
params={"user_id": "你的_profile_id"},
)
data = resp.json()["data"]
# 拿到 selenium 连接地址和 webdriver 路径
selenium_address = data["ws"]["selenium"]
webdriver_path = data["webdriver"]
在脚本中,先调用 API 启动指定环境并获取调试端口,随后由 Selenium 接管驱动:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option("debuggerAddress", selenium_address)
service = Service(executable_path=webdriver_path)
driver = webdriver.Chrome(service=service, options=options)
# 接下来就是你熟悉的 Selenium 代码
driver.get("https://bot.sannysoft.com/")
driver.save_screenshot("adspower.png")
关闭环境:
requests.get(
"http://local.adspower.net:50325/api/v1/browser/stop",
params={"user_id": "你的_profile_id"},
)
当使用 Selenium 接管 AdsPower 驱动的环境后,打开 bot.sannysoft.com 进行检测,你会发现所有的自动化检测项(包括 navigator.webdriver、Chromedriver 变量、Plugins 数量等)都会自然呈绿色通过。

如果你需要同时管理多个店铺或账号,又怕被平台封号,指纹浏览器是更好的反检测方案。
它的核心逻辑很简单:
-
隔离环境:为每个账号创建独立的“虚拟电脑”,拥有唯一的设备指纹和 IP 地址。
-
批量操作:用代码自动启动这些环境,并通过 Selenium 进行控制。
这样一来,平台会认为每个账号都来自不同的真实用户和设备,从而避免因为特征相同而被关联封禁。相比之下,普通插件只能帮你伪装成“真人”,却无法解决“多账号同源”的问题——它没法让多个账号看起来像是由不同的人操作的。
FAQs
为什么 Selenium 会被检测?
Selenium 默认会暴露自动化浏览器特征,例如 navigator.webdriver、浏览器指纹以及异常的用户行为。现代网站通常会结合 JavaScript 检测、浏览器指纹和行为分析等多种方式识别自动化访问,因此未经优化的 Selenium 更容易被检测。
Selenium 被检测后会发生什么?
当 Selenium 被识别为自动化工具时,网站可能会要求验证码验证、返回 403 错误、限制页面访问、触发 Cloudflare Challenge,或者直接封禁 IP 和账号。不同网站的风控策略有所不同,但通常都会限制自动化请求。
网站如何检测 Selenium?
网站通常不会只依赖单一检测方式,而是综合分析浏览器指纹、JavaScript 环境、HTTP 请求特征、IP 信誉以及用户操作行为。当多个异常信号同时出现时,系统就可能判定浏览器属于自动化程序。
Headless Selenium 更容易被检测吗?
默认情况下,Headless 模式比普通浏览器更容易暴露自动化特征,因此检测风险相对较高。虽然新版 Chrome Headless 已经提升了与真实浏览器的一致性,但在高风控网站上仍然可能被识别。

人们还读过
- 谷歌广告投放指南:如何稳定运营多个 Google Ads 账户?

谷歌广告投放指南:如何稳定运营多个 Google Ads 账户?
Google Ads多账户运营如何避免账号关联?本文结合广告代理、跨境电商等实际场景,解析 Chrome 多开、代理 IP 与浏览器环境的区别,并介绍如何通过独立浏览器环境、团队协作和自动化工具,实现更稳定、高效的 Google Ads多账户管理。
- 2026 Gmail / 谷歌账号注册教程,五个方案教会你

2026 Gmail / 谷歌账号注册教程,五个方案教会你
2026 Gmail 注册教程,详解谷歌邮箱注册与注册谷歌账号的5种方法,涵盖手机号验证、Google Workspace、自定义域名等方案,新手也能快速完成注册。
- 海外问卷调查多账号防关联指南:Dynata、Decipher、InnovateMR 平台应对策略

海外问卷调查多账号防关联指南:Dynata、Decipher、InnovateMR 平台应对策略
做海外问卷时频繁跳转、遭遇Security Check后更换IP仍无法通过?本文将解析海外问卷调查生态、多账号运营逻辑及平台识别账号关联方式,详细介绍如何通过独立浏览器环境有效降低多账号关联风险。
- 【iOS APP开发必看】苹果开发者账号防关联指南

【iOS APP开发必看】苹果开发者账号防关联指南
从iOS开发到苹果App上线,越来越多团队需要管理多个苹果开发者账号。本文详细介绍Apple风控机制、多账号关联风险、防关联技巧以及安全管理多个Apple Developer账号的方法,帮助iOS开发者提升账号管理效率,降低运营风险。
- TikTok矩阵运营全攻略:从账号规划到规模化运营

TikTok矩阵运营全攻略:从账号规划到规模化运营
布局多账号矩阵已成为跨境出海新趋势,但如何避免操作混乱与关联风险?本文将详细介绍TikTok账号的定位规划、矩阵风控,并分享如何借助指纹浏览器实现环境隔离、团队协作与RPA自动化。无论您是跨境电商卖家还是品牌出海团队,这里都有您需要的稳定增长方案。


