使用2captcha绕过Cloudflare失败,报ERROR_CAPTCHA_UNSOLVABLE求排查
问题排查与解决方案
1. 核心问题:错误的Site Key
你用的0x4AAAAAAADnPIDROrmt1Wwj是Cloudflare Turnstile的官方测试Site Key,仅适用于Cloudflare提供的演示页面,完全无法用于真实网站的验证,这是导致ERROR_CAPTCHA_UNSOLVABLE的主要原因。
解决方法:
- 打开目标网站
https://nowsecure.nl,右键→检查→控制台,输入命令document.querySelector('[data-sitekey]'),获取页面真实的Site Key; - 或者直接查看页面源代码,搜索
data-sitekey或sitekey字段,提取对应的值替换到代码中。
2. 无效的请求参数
代码中硬编码的action='challenge'、data='foo'、pagedata='bar'是无效值,Cloudflare Turnstile会验证这些参数与页面实际请求参数的一致性,不匹配会直接触发验证失败。
解决方法:
- 打开浏览器网络面板(F12→Network),刷新目标页面,找到包含
turnstile/v0/siteverify的请求; - 查看请求的Form Data,复制真实的
action、data、pagedata值(如果页面存在这些参数),替换到代码中; - 若目标网站没有这些参数,直接移除代码中对应的参数即可。
3. UserAgent 不一致问题
调用solver.turnstile()时每次生成随机UA,后续访问目标网站时如果使用不同UA,Cloudflare会检测到UA不匹配,导致验证失效。
解决方法:
- 提前生成固定UA,在验证码求解和后续网站请求中全程复用:
ua = UserAgent() fixed_ua = ua.random # 提前生成,全程使用同一个UA - 将代码中的
useragent=f'{ua.random}'改为useragent=fixed_ua。
修正后的示例代码
from twocaptcha import TwoCaptcha from fake_useragent import UserAgent from config import API_KEY solver = TwoCaptcha(API_KEY) url = 'https://nowsecure.nl' # 替换为目标网站真实的Site Key sitekey = '真实的Site Key' ua = UserAgent() fixed_ua = ua.random # 固定UA,全程复用 def solve(url, sitekey): try: result = solver.turnstile( sitekey=sitekey, url=url, useragent=fixed_ua # 仅当目标网站有对应参数时添加,否则移除 # action='真实的action值', # data='真实的data值', # pagedata='真实的pagedata值' ) except Exception as e: print(f'Failed to solve Captcha: {str(e)}') exit() return result print(solve(url, sitekey))
其他Cloudflare绕过方法
除了第三方验证码服务,还有以下几种可行思路:
- 无头浏览器+反检测插件:使用Playwright或Puppeteer,搭配反检测插件模拟真实浏览器行为,绕过Cloudflare的人机检测;
- 代理IP池搭配真实UA:使用高匿代理IP,配合固定的真实浏览器UA,避免IP被标记为恶意;
- 自建AI识别服务:训练模型识别Cloudflare各类验证码(Turnstile、hCaptcha等),适合大规模需求场景;
- 优先使用官方API:如果目标网站提供官方接口,直接调用接口绕过Cloudflare验证。
内容的提问来源于stack exchange,提问作者ZemiSSan
相关产品推荐
相关产品推荐

