MihoyoBBSTools项目中的验证码识别问题分析与解决方案

MihoyoBBSTools项目中的验证码识别问题分析与解决方案

【免费下载链接】MihoyoBBSTools Womsxd/AutoMihoyoBBS,米游社相关脚本 【免费下载链接】MihoyoBBSTools 项目地址: https://gitcode.com/gh_mirrors/mi/MihoyoBBSTools

背景介绍

MihoyoBBSTools是一个用于米哈游社区自动签到的开源工具,在实现自动化功能时需要处理各种验证码识别问题。近期项目中出现了关于验证码识别接口失效的问题,特别是针对极验(GeeTest)验证码的识别方案。

验证码识别接口问题

项目原本使用的是人人打码(rrocr)的验证码识别服务,但该服务已经停止运营。开发者尝试了以下解决方案:

  1. 对原有代码进行了优化,增加了超时(timeout)参数设置,避免因网络问题导致的长时间等待:
def game_captcha(gt: str, challenge: str):
    rep = http.post(
        url= "http://api.rrocr.com/api/recognize.html",
        data={
            "appkey": "你的key",
            "gt": gt,
            "challenge": challenge,
            "referer": "https://bbs-api.miyoushe.com/apihub/app/api/signIn"
        }, timeout=180).json()
    return rep["data"]["validate"]
  1. 由于人人打码服务关闭,开发者转向了其他验证码识别平台,如套套图像打码(ttocr),实现了新的验证码识别逻辑。

验证码识别实现方案

对于新的验证码识别服务,开发者采用了轮询机制来获取识别结果,主要实现思路如下:

  1. 首先提交验证码识别请求,获取任务ID
  2. 然后定期查询识别结果,直到获取有效结果或超时
  3. 设置了最大等待时间和轮询间隔,优化了用户体验

核心代码逻辑:

max_wait_time = 60  # 最大等待时间
interval = 5  # 轮询间隔时间

start_time = time.time()
while time.time() - start_time < max_wait_time:
    try:
        rep2 = http.post(
            url="http://api.ttocr.com/api/results",
            data={
                "appkey": "",
                "resultid": str(rep["resultid"]),
            },
            timeout=(60, 60)
        ).json()

        if rep2.get("status") == 2:
            print("等待识别结果...")
            time.sleep(interval)
        else:
            return rep2["data"]["validate"]
    except Exception as e:
        print(f"请求发生错误: {e}")
        return None

常见问题与解决方案

  1. 验证码识别失败:可能是由于接口不稳定或配置错误导致。解决方案包括:

    • 检查API密钥是否正确
    • 确认接口URL是否有效
    • 验证请求参数是否完整
  2. NoneType错误:当验证码识别服务返回空值时会出现。可以通过添加错误处理逻辑来避免程序崩溃:

if data is None:
    print("验证码识别服务返回空值")
    return None
  1. 超时问题:网络不稳定可能导致请求超时。建议:
    • 适当增加超时时间
    • 添加重试机制
    • 记录错误日志便于排查

最佳实践建议

  1. 对于验证码识别服务,建议使用可靠的商业API,虽然可能需要付费,但稳定性更高
  2. 实现备用识别方案,当主服务不可用时自动切换到备用方案
  3. 添加详细的日志记录,便于问题排查
  4. 对于开源项目,建议将API密钥等敏感信息通过配置文件管理,而不是硬编码在代码中
  5. 定期检查依赖服务的状态,及时更新接口实现

总结

验证码识别是自动化工具中的关键环节,随着第三方服务的变动,开发者需要不断调整实现方案。通过合理的错误处理、超时设置和备用方案,可以大大提高工具的稳定性和可靠性。对于MihoyoBBSTools项目,建议持续关注验证码识别服务的变化,及时更新代码实现。

【免费下载链接】MihoyoBBSTools Womsxd/AutoMihoyoBBS,米游社相关脚本 【免费下载链接】MihoyoBBSTools 项目地址: https://gitcode.com/gh_mirrors/mi/MihoyoBBSTools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值