Selenium访问Cloudflare站点受阻,undetected_chromedriver运行报错如何解决
问题根因
这个AttributeError: 'ChromeOptions' object has no attribute 'add'报错完全是导入路径和安装的undetected-chromedriver版本不匹配导致的:
- 你代码里写的
import undetected_chromedriver.v2 as uc是2.x版本时代的旧导入路径,如果你本地装的是3.x以上的新版本,这个v2路径下的ChromeOptions只是个残缺的兼容壳,根本没继承Selenium Options类的完整方法,自然找不到add_argument相关的属性(报错里提到的add属性就是调用add_argument时触发的内部查找错误)。 - 你之前碰到的RuntimeError、卡Cloudflare验证的问题,大半也和版本不兼容、导入方式错误有关系。
解决步骤
按顺序操作即可:
- 先把当前安装的存在兼容问题的undetected-chromedriver卸载干净,终端执行命令:
pip uninstall -y undetected-chromedriver - 安装兼容性最好的稳定版,3.5.5版本对Selenium 4.x、新版Chrome的适配最稳定,反Cloudflare检测的逻辑也没有已知问题,执行命令:
pip install undetected-chromedriver==3.5.5 - 删除代码里的旧v2导入路径,直接从主模块导入uc即可,修正后的可运行代码如下:
import undetected_chromedriver as uc import time options = uc.ChromeOptions() # 注意代理要替换为可用的高匿代理,免费公网代理大概率连接失败或者被Cloudflare标记拦截 proxy_addr = "24.172.82.94:53281" options.add_argument(f'--proxy-server=http://{proxy_addr}') # 初始化时不需要手动指定chromedriver路径,uc会自动匹配本地Chrome版本 # version_main填写你本地Chrome的大版本号即可,比如安装的Chrome 124就填124,避免自动匹配版本失败 driver = uc.Chrome( options=options, version_main=124 ) driver.get("https://ifconfig.me/") time.sleep(10) driver.quit()
避坑提示
- 不要手动添加
--disable-blink-features=AutomationControlled、--headless=new这类参数,uc已经内置了全套反检测逻辑,乱加参数反而会暴露自动化特征被Cloudflare拦截,默认有头模式的绕过成功率最高。 - 如果使用代理一定要选高匿住宅代理,免费透明代理本身就在Cloudflare的黑名单里,更换任何脚本都无法通过验证。
- 后续Chrome大版本更新后如果启动报错,只需要把
version_main参数修改为当前Chrome的大版本号即可,不需要手动下载对应版本的chromedriver。
内容的提问来源于stack exchange,提问作者Ussama Renegad
相关产品推荐
相关产品推荐

