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

Selenium Webdriver遇Cloudflare DDoS防护无法手动验证该如何解决

解决Selenium+undetected_chromedriver访问Cloudflare防护站点反复刷新Ray ID问题

核心原因

你当前的配置存在两处典型错误:

  1. 混用原生Selenium的Options与undetected_chromedriver(以下简称uc)的初始化逻辑,且冗余调用了ChromeDriverManager,uc本身会自动适配对应版本的Chrome驱动,手动指定反而会触发Cloudflare的特征检测
  2. 未配置持久化用户数据目录,每次启动都是全新的无痕浏览上下文,Cloudflare会判定为异常客户端,反复刷新验证流程

可行解决方案

  • 修正uc初始化配置,移除冗余参数,新增持久化用户目录配置,避免每次启动生成全新的浏览器指纹
  • 关闭无头模式,Cloudflare对无头浏览器的特征检测非常严格,可视化运行时手动过验证的通过率更高
  • 新增自动验证等待逻辑,无需手动输入回车触发后续流程

修正后的代码示例

import time
import undetected_chromedriver as uc

options = uc.ChromeOptions()
options.add_argument("--ignore-certificate-errors")
options.add_argument("--no-sandbox")
# 配置持久化用户数据目录,替换为本地任意有效路径即可
options.add_argument("--user-data-dir=./chrome_profile")
# 禁用自动化特征标记
options.add_argument("--disable-blink-features=AutomationControlled")
# 配置真实的User-Agent,可替换为你本地浏览器的实际UA
options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")

# uc会自动适配对应版本的Chrome驱动,无需手动指定executable_path
browser = uc.Chrome(options=options)
browser.get(BASE_URL + '/our-selection/')

# 等待Cloudflare验证完成,也可替换为等待目标页面的特定元素加载
while "Cloudflare" in browser.title or "正在检查您的浏览器" in browser.page_source:
    time.sleep(1)

# 验证通过后执行后续业务逻辑
print("Cloudflare验证已通过")

补充注意事项

  • 如果首次启动仍然弹出验证码,手动完成一次验证后,后续启动时因为用户目录已经保存了验证通过的Cookie和指纹,就不会再反复刷新Ray ID
  • 不要修改浏览器的窗口大小、时区等参数和正常用户差异过大,否则仍然会被Cloudflare判定为异常
  • 不要短时间内频繁发起请求,避免触发IP层面的速率限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:48:00