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

使用undetected_chromedriver无法绕过Cloudflare/Datadome,求解决方法

解决undetected_chromedriver绕过Cloudflare/Datadome验证码拦截的优化方案

针对你遇到的Cloudflare/Datadome验证码拦截问题,结合你的代码,给你几个切实可行的优化方向:

1. 修正脚本注入逻辑,覆盖更多浏览器特征

你当前只处理了navigator.webdriver,但Cloudflare还会检测其他自动化痕迹。而且undetected_chromedriver更推荐通过ChromeOptions提前注入脚本,确保页面加载前就覆盖所有可疑特征:

script = """
Object.defineProperty(navigator, 'webdriver', {get: () => undefined});
Object.defineProperty(navigator, 'plugins', {get: () => [1,2,3,4,5]});
Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});
Object.defineProperty(window, 'chrome', {get: () => {return {runtime: {}}}});
"""
# 手动指定真实Chrome UA,避免默认UA被识别
chrome_options.add_argument(f'--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')
# 统一语言设置,模拟真实用户
chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'en-US,en'})

2. 清理可疑配置,添加真实浏览器参数

--blink-settings=imagesEnabled=false会触发网站的异常检测,正常用户不会禁用图片,直接删除这个参数。同时补充以下模拟真实浏览器的配置:

chrome_options.add_argument('--start-maximized')
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--disable-popup-blocking')
chrome_options.add_argument('--disable-default-apps')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-features=VizDisplayCompositor')

注意:无需重复设置--disable-blink-features=AutomationControlled,undetected_chromedriver已经自动处理了这个特征。

3. 优化代理配置,减少特征暴露

如果使用seleniumwire,务必用住宅代理(数据中心代理极易被检测),同时添加exclude_hosts避免代理拦截验证相关请求:

proxy_options = {
    'proxy': {
        'http': 'http://your-residential-proxy:port',
        'https': 'https://your-residential-proxy:port',
        'no_proxy': 'localhost,127.0.0.1'
    },
    'exclude_hosts': ['*.cloudflare.com', '*.datadome.co']
}

如果不需要抓包,更建议用Chrome原生代理参数,避免seleniumwire带来的额外特征:

chrome_options.add_argument('--proxy-server=http://your-residential-proxy:port')

4. 确保版本匹配,优化初始化逻辑

undetected_chromedriver需要和本地Chrome版本严格对应,初始化时指定版本号能避免兼容性问题导致的特征泄露:

import undetected_chromedriver as uc
import time

# 初始化配置项
chrome_options = uc.ChromeOptions()
# 加入上述所有优化配置

# 获取本地Chrome主版本号
chrome_version = uc.find_chrome_version()
version_main = int(chrome_version.split('.')[0])

driver = uc.Chrome(
    options=chrome_options,
    seleniumwire_options=proxy_options,  # 不需要抓包就删除该行
    version_main=version_main
)

# 访问页面后模拟人类等待,避免快速操作被检测
driver.get('https://www.dischem.co.za/')
time.sleep(3)

5. 额外避坑提示

  • 控制请求频率,不要频繁刷新或连续访问,模拟真实用户的操作节奏
  • 如果仍被拦截,立即切换代理IP,避免IP被网站拉黑
  • 可尝试手动访问网站获取正常Cookie,再通过driver.add_cookie()注入到自动化浏览器中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:42:35