Selenium Webdriver遇Cloudflare DDoS防护无法手动验证该如何解决
解决Selenium+undetected_chromedriver访问Cloudflare防护站点反复刷新Ray ID问题
核心原因
你当前的配置存在两处典型错误:
- 混用原生Selenium的Options与undetected_chromedriver(以下简称uc)的初始化逻辑,且冗余调用了ChromeDriverManager,uc本身会自动适配对应版本的Chrome驱动,手动指定反而会触发Cloudflare的特征检测
- 未配置持久化用户数据目录,每次启动都是全新的无痕浏览上下文,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
相关产品推荐
相关产品推荐

