Selenium反检测实战:从基础配置到高级绕过技巧全解析

张开发
2026/4/5 11:23:04 15 分钟阅读

分享文章

Selenium反检测实战:从基础配置到高级绕过技巧全解析
1. Selenium反检测的核心挑战当你第一次用Selenium打开目标网站时可能会遇到这种情况明明代码完全正确但网站就是拒绝你的访问。这种情况我遇到过太多次了特别是在处理电商平台和社交媒体网站时。这些网站会通过多种方式检测自动化工具而我们需要做的就是见招拆招。最常见的检测点包括WebDriver标识navigator.webdriver属性会暴露自动化工具身份浏览器指纹插件列表、语言设置、屏幕分辨率等异常行为特征鼠标移动轨迹、点击速度等不符合人类操作隐藏标记ChromeDriver特有的$cdc_变量最近还出现了更高级的检测手段比如F5shape这种控制流加密技术。我去年在做某电商平台数据采集时就碰到了这个难题常规方法完全失效。后来发现与其花时间逆向加密算法不如专注完善Selenium的伪装。2. 基础伪装配置实战2.1 浏览器参数调优先来看最基本的ChromeOptions配置这是第一道防线。经过多次测试我发现这些参数组合效果最好options webdriver.ChromeOptions() options.add_argument(--disable-blink-featuresAutomationControlled) options.add_argument(--incognito) # 无痕模式减少指纹 options.add_argument(--disable-extensions) # 禁用扩展 options.add_argument(--disable-infobars) # 隐藏信息栏 options.add_experimental_option(excludeSwitches, [enable-automation]) options.add_experimental_option(useAutomationExtension, False)特别提醒很多人喜欢启用--headless无头模式但这反而会增加被检测的风险。我在实际测试中发现无头模式的指纹特征非常明显。2.2 移动设备模拟模拟移动端是个不错的策略因为移动端的检测通常相对宽松mobile_emulation { deviceMetrics: {width: 375, height: 812, pixelRatio: 3.0}, userAgent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 } options.add_experimental_option(mobileEmulation, mobile_emulation)这里有个细节要注意设备尺寸和User-Agent必须匹配。我曾经犯过错误用iPhone的UA配了iPad的分辨率结果立刻被识别。3. 高级绕过技巧3.1 CDP命令注入Chrome DevTools Protocol (CDP) 是我们最强大的武器。通过它可以直接修改浏览器环境driver.execute_cdp_cmd(Page.addScriptToEvaluateOnNewDocument, { source: Object.defineProperty(navigator, webdriver, { get: () false }); Object.defineProperty(navigator, plugins, { get: () [1, 2, 3, 4, 5] }); Object.defineProperty(navigator, languages, { get: () [en-US, en] }); })这个技巧的关键在于执行时机——必须在页面加载前注入。我建议把这些脚本放在浏览器启动参数里确保万无一失。3.2 使用stealth.min.js更全面的解决方案是使用现成的反检测库with open(stealth.min.js) as f: js f.read() driver.execute_cdp_cmd(Page.addScriptToEvaluateOnNewDocument, { source: js })获取这个文件很简单安装Node.js环境运行命令npx extract-stealth-evasions生成的stealth.min.js会自动保存在项目根目录4. 驱动级修改方案4.1 修改ChromeDriver二进制最彻底的解决方案是直接修改驱动文件。用文本编辑器或十六进制工具查找替换cdc_字符串perl -pi -e s/cdc_/dcd_/g chromedriver.exe这个方法的原理是Selenium会在DOM中留下$cdc_开头的变量这是很多检测脚本的重点目标。修改后这个标记就失效了。4.2 使用undetected-chromedriverGitHub上有个很受欢迎的项目可以自动处理这些问题import undetected_chromedriver as uc driver uc.Chrome()这个驱动会自动处理大部分检测点包括随机化WebSocket握手头禁用自动化控制标志自动匹配浏览器版本不过要注意它仍然需要配合前面的CDP命令使用效果才最好。我在实际项目中发现综合使用多种技术才能达到最佳效果。

更多文章