Selenium遭Cloudflare拦截无法访问页面,寻求技术解决方案
解决Cloudflare拦截自动化工具的实操方案
针对Selenium系列工具失效的调整
- 放弃无头模式,改用带界面的浏览器运行,Cloudflare对无头浏览器的特征检测极严,带界面能大幅降低拦截概率
- 复用本地真实浏览器的用户数据:导入常用浏览器的
User Data目录,让驱动直接使用你日常上网的Cookie、缓存和指纹,比如Chrome的用户数据路径在Windows是C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data,Linux是~/.config/google-chrome/ - 模拟真实操作节奏:点击人机验证按钮前,先移动鼠标到按钮上停留1-3秒再点击,不要瞬间完成操作,避免触发行为检测
Playwright的针对性配置
- 关闭自动化特征+启用隐身模式,同时注入真实用户指纹:
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 关闭自动化控制特征,用带界面模式启动 browser = p.chromium.launch(headless=False, args=["--disable-blink-features=AutomationControlled"]) # 配置真实用户环境参数 context = browser.new_context( 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", locale="zh-CN", timezone_id="Asia/Shanghai", viewport={"width": 1920, "height": 1080} ) page = context.new_page() page.goto("目标站点") # 模拟真实点击流程 verify_btn = page.locator("xpath=//*[contains(text(),'我是人类')]") verify_btn.hover() page.wait_for_timeout(1500) verify_btn.click() page.wait_for_load_state("networkidle") - 优先使用住宅代理IP:数据中心IP几乎会被Cloudflare直接拦截,换成住宅IP能提升通过率
- 若仍触发循环验证,尝试在上下文添加
geolocation、permissions等真实用户权限,进一步模拟正常上网环境
极端情况下的绕过方案
- 用远程调试模式连接手动浏览器:先手动打开浏览器并添加启动参数
--remote-debugging-port=9222,再用自动化工具连接这个已启动的浏览器,完全复用手动操作的环境 - 直接调用API接口:如果能抓包到目标站点的后端API,跳过前端页面直接请求接口,避免触发Cloudflare的前端验证
内容的提问来源于stack exchange,提问作者Daniel Bailo
相关产品推荐
相关产品推荐

