Troubleshooting

验证码解决率下降:性能回归诊断

您的验证码解决率一夜之间从 95% 下降到 60%。在联系支持人员之前,本指南将进行结构化诊断以查明根本原因 - 无论是您的代码、代理、目标站点还是 CaptchaAI 服务。

诊断决策树

Solve rate dropped
├── Is the API returning errors? → Check error codes
│   ├── ERROR_WRONG_USER_KEY → API key issue
│   ├── ERROR_ZERO_BALANCE → Balance depleted
│   ├── ERROR_NO_SLOT_AVAILABLE → Rate limiting
│   └── ERROR_CAPTCHA_UNSOLVABLE → CAPTCHA changed
├── Are tokens returned but rejected by the target site?
│   ├── Token expired before submission → Speed up injection
│   ├── Sitekey changed → Re-extract from page
│   └── Domain mismatch → Check pageurl parameter
├── Are proxies failing?
│   ├── Proxy banned by target → Rotate proxies
│   └── Proxy timeout → Check proxy health
└── Did the target site change?
    ├── New CAPTCHA type → Update method parameter
    ├── JavaScript changes → Re-analyze page
    └── Rate limiting by site → Reduce frequency

步骤1:检查CaptchaAI错误代码

运行快速诊断脚本:

# diagnose_solve_rate.py
import os
import requests
from collections import Counter

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")

def check_balance():
    """Verify API key and balance."""
    resp = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "getbalance", "json": "1",
    })
    result = resp.json()
    print(f"Balance: {result}")
    return result

def test_solve(sitekey, pageurl, runs=5):
    """Run test solves and collect error statistics."""
    errors = Counter()
    successes = 0

    for i in range(runs):
        # Submit
        resp = requests.get("https://ocr.captchaai.com/in.php", params={
            "key": API_KEY,
            "method": "userrecaptcha",
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": "1",
        })
        result = resp.json()

        if result.get("status") != 1:
            errors[result.get("request", "UNKNOWN")] += 1
            print(f"  Run {i+1}: Submit error: {result.get('request')}")
            continue

        task_id = result["request"]
        import time
        time.sleep(15)

        # Poll
        for _ in range(25):
            poll = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": API_KEY, "action": "get",
                "id": task_id, "json": "1",
            })
            poll_result = poll.json()

            if poll_result.get("status") == 1:
                successes += 1
                print(f"  Run {i+1}: Solved")
                break
            if poll_result.get("request") != "CAPCHA_NOT_READY":
                errors[poll_result.get("request", "UNKNOWN")] += 1
                print(f"  Run {i+1}: Error: {poll_result.get('request')}")
                break
            time.sleep(5)
        else:
            errors["TIMEOUT"] += 1
            print(f"  Run {i+1}: Timeout")

    print(f"\nResults: {successes}/{runs} solved")
    if errors:
        print(f"Errors: {dict(errors)}")

# Run diagnostics
print("=== Balance Check ===")
check_balance()

print("\n=== Test Solves ===")
test_solve("YOUR_SITEKEY", "https://your-staging.example.com", runs=5)

步骤 2:验证目标站点参数

解决率下降的最常见原因是站点密钥或页面结构的更改。

检查sitekey是否改变

访问目标页面,打开DevTools(F12),搜索:

  • reCAPTCHA:data-sitekeygrecaptcha.render 调用
  • Cloudflare Turnstile:旋转门小部件中的 data-sitekey
  • GeeTest:GeeTest初始化中的gt参数

与代码中的 sitekey 进行比较。一个角色的改变就会导致100%的失败。

检查验证码类型是否发生变化

一些站点在验证码提供商之间迁移:

  • reCAPTCHA v2 → reCAPTCHA v3(不可见)
  • 验证码 → Cloudflare Turnstile
  • 图像验证码 → reCAPTCHA Enterprise

如果类型更改,请相应更新您的 method 参数。

第 3 步:评估代理运行状况

代理质量直接影响解决率,特别是对于 CaptchaAI 使用代理的基于令牌的验证码。

代理问题 症状 处理方式
代理被目标禁止 令牌已解决但被拒绝 轮换到新的自有服务器基础设施
代理返回错误 ERROR_PROXY_NOT_FOUND 验证代理是否有效且可访问
检测到数据中心代理 较低的解决率 切换到自有服务器基础设施
代理地理位置不匹配 结果不一致 将代理国家/地区与目标网站相匹配

首先在没有代理的情况下进行测试(如果验证码类型支持无代理解决),以确定代理是否是问题所在。

第 4 步:检查令牌时间

CAPTCHA 令牌的有效性有限:

验证码类型 令牌生命周期
reCAPTCHA v2 约 120 秒
reCAPTCHA v3 约 120 秒
Cloudflare Turnstile 〜300秒
GeeTest v3 〜60秒

如果您的管道在接收令牌和将其注入表单之间花费的时间太长,则令牌会过期并且站点会拒绝它。

修复: 测量 getTaskResult 和表单提交之间的时间。如果 > 60 秒,请优化您的管道。

第 5 步:分析误差分布

按频率对错误进行排序以查找根本原因:

错误 意义 行动
ERROR_CAPTCHA_UNSOLVABLE 验证码太复杂或已更改 向CaptchaAI举报;检查sitekey是否正确
ERROR_WRONG_CAPTCHA_ID 轮询错误的任务 ID 修复代码中的任务 ID 跟踪
ERROR_ZERO_BALANCE 积分用完 充值余额
ERROR_NO_SLOT_AVAILABLE 速率有限 减少并发或增加延迟
CAPCHA_NOT_READY(超时) 解决耗时过长的问题 增加轮询超时;检查 sitekey 是否有效

第 6 步:与基线进行比较

如果您之前运行过基准测试,请将当前指标与基准进行比较:

公制 基线 当前的 三角洲 忧虑?
解决率 95% > 5% 下降 = 调查
中值解决时间 15秒 > 50% 增加 = 调查
错误率 2% > 5% = 调查
代币接受率 98% > 3% 下降 = 网站已更改

何时联系支持人员

如果出现以下情况,请联系 CaptchaAI 支持人员:

  • 所有诊断步骤均通过,但解决率仍然很低
  • ERROR_CAPTCHA_UNSOLVABLE 率在之前工作的站点密钥上超过 20%
  • 平衡显示正确,但求解仍然失败
  • 问题持续2个多小时

在您的报告中包括:

  1. 验证码类型和站点密钥
  2. 目标站点网址
  3. 错误分布(来自诊断脚本)
  4. 问题何时开始
  5. 您对代码所做的任何更改

故障排除快速参考

设想 最可能的原因 第一个行动
100%失败,全部ERROR_WRONG_USER_KEY API 密钥无效 重新检查 API 密钥
数天内逐渐下降 代理降级 QA 测试会话
突然跌至0% 站点密钥或页面已更改 重新提取验证码参数
已解决,但令牌被网站拒绝 令牌过期或域不匹配 检查时序和 pageurl
在测试站点上工作,但在目标上失败 特定于站点的限制 比较站点之间的参数

常问问题

CaptchaAI 能否解决特定网站的费率变化问题?

是的。如果站点升级其验证码配置(例如,更难的挑战、企业功能),解决率可能会暂时降低,直到 CaptchaAI 的求解器适应。

我应该报告每个 ERROR_CAPTCHA_UNSOLVABLE 吗?

不会。对于复杂的验证码,2-5% 的无法解决率是正常的。仅当比率持续超过 15-20% 时才报告。

我预计解决率要多快才能恢复?

如果问题出在 CaptchaAI 这边,通常会在数小时内恢复。如果目标站点发生更改,您可能需要更新集成参数。

相关文章

  • 验证码解决率 Sli Slo 监控
  • 时间序列验证码解决性能趋势
  • 验证码解决成功率下降诊断

下一步

保持您的验证码管道健康 —获取您的 CaptchaAI API 密钥

相关指南:

该文章已禁用评论。

相关文章

DevOps & Scaling 自动缩放验证码解决工作人员
自动扩展验证码解决工作人员的 Dev Ops 指南,包括生产中 Captcha AI 工作流程的架构决策、操作注意事项和自动化模式。

自动扩展验证码解决工作人员的 Dev Ops 指南,包括生产中 Captcha AI 工作流程的架构决策、操作注意事项和自动化模式...

Apr 20, 2026
Tutorials 验证码解决吞吐量:如何每小时处理 10,000 个任务
验证码解决货物分步教程:如何处理 10,000 个任务,具有可直接重用的示例和清晰的 Captcha AI 工作流程。

验证码解决货物分步教程:如何处理 10,000 个任务,具有可直接重用的示例和清晰的 Captcha AI 工作流程。

May 07, 2026
DevOps & Scaling 用于 CaptchaAI Worker 部署的 Ansible Playbook
使用 Captcha AI Worker 部署 Ansible Playbook 的 Dev Ops 指南,包括生产中 Captcha AI 工作流程的架构决策、操作注意事项和自动化模式。

使用 Captcha AI Worker 部署 Ansible Playbook 的 Dev Ops 指南,包括生产中 Captcha AI 工作流程的架构决策、操作注...

Apr 19, 2026