1. 为什么需要规避Selenium检测?
在自动化测试和爬虫开发中,Selenium是最常用的浏览器自动化工具之一。但近年来,越来越多的网站开始部署反爬虫机制,能够识别并拦截Selenium驱动的浏览器访问。这种检测主要基于以下几个特征:
- navigator.webdriver属性:Selenium控制的浏览器会暴露这个属性为true
- 浏览器指纹异常:包括插件列表、字体列表、WebGL渲染等与常规浏览器的差异
- 行为模式识别:如鼠标移动轨迹、点击间隔时间等过于规律化
- 驱动文件特征:ChromeDriver等驱动文件会被检测到特定签名
我曾在电商价格监控项目中,就因为Selenium被识别导致IP被封。后来通过一系列调试和逆向工程,总结出以下有效的规避方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础规避方案实现
2.1 隐藏webdriver属性
最直接的方案是修改navigator.webdriver属性。在ChromeDriver 79及以上版本可以通过CDP协议实现:
python复制from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
# 通过CDP覆盖属性
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
注意:不同浏览器版本可能需要调整CDP命令,建议先在浏览器控制台测试脚本有效性
2.2 修改常规检测点
除了webdriver属性,还需要处理其他常见检测指标:
python复制# 修改user-agent
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
# 禁用自动化控制特征
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# 随机化窗口大小
import random
width = random.randint(1024, 1920)
height = random.randint(768, 1080
