如何解决SeleniumBase下Cloudflare的I'm not a robot复选框验证问题
解决SeleniumBase中Cloudflare reCAPTCHA验证问题的思路
问题核心
目标站点有两层Cloudflare防护:
- 入口防护已通过SeleniumBase成功绕过(stealth/纯uc-chromedriver无效)
- 功能触发的“I'm not a robot”复选框验证无法通过
- 关键异常:SeleniumBase实例中手动开新标签页可过验证,但只要执行过标签页打开/关闭/列表获取操作,哪怕手动访问也会触发reCAPTCHA错误
可行解决方案
1. 规避标签页操作特征
Cloudflare会追踪浏览器行为指纹,标签页操作属于典型自动化特征:
- 全程复用单个标签页完成所有操作,避免切换、打开或关闭标签页
- 若需切换内容,优先使用
driver.switch_to.frame()处理内嵌框架,或直接在当前标签页导航
2. 优化SeleniumBase初始化配置
强化浏览器指纹的伪装程度:
from seleniumbase import SB with SB(uc=True, incognito=True, disable_extensions=True, user_data_dir=None) as sb: sb.open("目标站点URL") # 后续操作全程避免标签页相关动作
uc=True启用undetected-chromedriver模式- 无痕模式+禁用扩展+清空用户数据目录,减少可被检测的特征
3. 手动接管验证(临时应急方案)
触发验证时暂停自动化,等待手动完成:
from seleniumbase import SB with SB(uc=True) as sb: sb.open("目标站点URL") # 触发需要验证的功能 sb.click("触发验证的元素选择器") # 等待手动完成reCAPTCHA input("完成页面reCAPTCHA验证后按回车继续...") # 恢复自动化流程
4. 模拟真实用户行为时序
通过随机延迟和交互动作降低自动化判定概率:
from seleniumbase import SB import random with SB(uc=True) as sb: sb.open("目标站点URL") # 模拟随机鼠标移动 sb.move_to_element("页面任意元素选择器", offset_x=random.randint(0,50), offset_y=random.randint(0,50)) sb.sleep(random.uniform(1,3)) # 触发操作前滚动页面 sb.execute_script("window.scrollTo(0, document.body.scrollHeight);") sb.sleep(random.uniform(0.5,1.5)) # 执行目标操作 sb.click("触发验证的元素选择器")
重要提示
不要在同一浏览器实例中混合自动化操作与手动标签页操作,标签页动作会污染浏览器指纹,导致Cloudflare持续判定为自动化工具;若必须使用多标签页,每次操作都重新初始化全新的SeleniumBase实例。
内容的提问来源于stack exchange,提问作者Artik gnom
相关产品推荐
相关产品推荐

