You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium绕过Cloudflare?C# ChromeDriver反复弹验证码怎么解决

针对C# Selenium ChromeDriver反复触发Cloudflare验证码的解决方案

根本原因

Cloudflare Bot Management 会采集浏览器全量指纹判定访问身份,ChromeDriver 及 Selenium 默认启动的 Chrome 实例会暴露大量独有的自动化特征(包括但不限于navigator.webdriver属性、专属启动参数、请求头标记等),这些特征不会随单次手动验证码验证消失,因此系统会持续判定为自动化访问,触发重复验证。

可落地修复方案

1. 调整Chrome启动参数抹除基础自动化标记

修改ChromeOptions配置,排除Chrome默认的自动化提示和扩展:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

var chromeOptions = new ChromeOptions();
// 移除"Chrome正受到自动测试软件的控制"提示及相关检测标记
chromeOptions.AddExcludedArgument("enable-automation");
chromeOptions.AddAdditionalOption("useAutomationExtension", false);
// 禁用 blink 层的自动化控制特征
chromeOptions.AddArgument("--disable-blink-features=AutomationControlled");
// 模拟正常用户的浏览器标识,版本号需要和你实际使用的Chrome版本对齐
chromeOptions.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");
chromeOptions.AddArgument("--start-maximized");
// 可选:复用本地Chrome的用户配置,使用日常浏览的环境指纹,大幅降低被识别概率
// *注意:使用前需要完全关闭所有正在运行的Chrome进程,否则会启动冲突*
// chromeOptions.AddArgument(@"--user-data-dir=C:\Users\你的系统用户名\AppData\Local\Google\Chrome\User Data");
// chromeOptions.AddArgument("--profile-directory=Default");

var driver = new ChromeDriver(chromeOptions);

2. 注入脚本覆盖浏览器特征属性

启动Driver后,执行CDP命令在所有新页面加载前覆盖Selenium留下的特征字段:

// 注入特征修正脚本
driver.ExecuteCdpCommand("Page.addScriptToEvaluateOnNewDocument", new Dictionary<string, object>
{
    {
        "source", @"
            // 覆盖webdriver标识
            Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
            // 模拟正常的插件列表
            Object.defineProperty(navigator, 'plugins', { get: () => Array.from({length: 5}, (_, i) => ({name: `Plugin ${i+1}`})) });
            // 模拟正常的语言配置
            Object.defineProperty(navigator, 'languages', { get: () => ['zh-CN', 'zh', 'en-US', 'en'] });
            // 移除ChromeDriver专属的全局变量
            if (window.cdc_adoQpoasnfa76pfcZLmcfl_) delete window.cdc_adoQpoasnfa76pfcZLmcfl_;
        "
    }
});

// 脚本注入完成后再导航到目标站点
driver.Navigate().GoToUrl("https://你的目标站点地址");

3. 调整操作行为模拟真实用户

避免固定间隔的机械操作,所有点击、输入、滚动操作前添加随机延迟,不要在页面刚加载完成就立刻操作:

// 示例:生成2~5秒的随机等待
var random = new Random();
await Task.Delay(random.Next(2000, 5000));

如果以上方案仍无法解决,可尝试使用经过指纹修改的ChromeDriver定制版本,或者先通过其他方式获取Cloudflare验证通过后的cf_clearance cookie,再将cookie注入到Selenium会话中直接跳过验证环节。

内容的提问来源于stack exchange,提问作者codezoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:24:01