使用C# Undetected Chrome Driver遭遇Cloudflare验证码拦截求助
解决方案:绕过Cloudflare拦截并修改isAutomatedWithCDP值
核心问题定位
你提到的isAutomatedWithCDP为true是Chrome DevTools Protocol(CDP)暴露的自动化标识,这是Cloudflare检测机器人的关键特征之一,即便使用UndetectedChromeDriver,部分CDP相关标识仍可能残留。
具体修复步骤
1. 通过CDP命令直接修改标识
初始化UndetectedChromeDriver后,执行CDP命令强制将isAutomatedWithCDP设为false,同时隐藏webdriver标识:
var driver = new UndetectedChromeDriver(options); // 执行CDP脚本覆盖自动化标识 driver.ExecuteCdpCommand("Runtime.evaluate", new Dictionary<string, object> { {"expression", @" Object.defineProperty(navigator, 'webdriver', {get: () => undefined}); Object.defineProperty(window, 'isAutomatedWithCDP', {get: () => false}); "} });
2. 优化ChromeOptions配置
补充以下关键参数,进一步消除自动化特征:
var options = new ChromeOptions(); // 禁用自动化控制特征 options.AddArgument("--disable-blink-features=AutomationControlled"); // 禁用扩展与信息栏 options.AddArgument("--disable-extensions"); options.AddArgument("--disable-infobars"); // 模拟真实用户代理(替换为你常用浏览器的UA) options.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"); // 启用隐身模式并禁用日志 options.AddArgument("--incognito"); options.AddArgument("--log-level=3"); options.AddArgument("--disable-logging");
3. 模拟人类交互行为
Cloudflare会检测页面交互的自然度,添加随机延迟和简单操作:
// 页面加载后随机延迟2-5秒 Thread.Sleep(new Random().Next(2000, 5000)); // 模拟鼠标随机移动与点击 var actions = new Actions(driver); actions.MoveByOffset(new Random().Next(0, 100), new Random().Next(0, 100)).Perform(); actions.Click().Perform();
4. 验证修复效果
运行脚本后重新访问检测站点,确认isAutomatedWithCDP已变为false,再测试目标网站的Cloudflare验证是否通过。
内容的提问来源于stack exchange,提问作者Anıl
相关产品推荐
相关产品推荐

