Skip to content

演习对手状态识别误判:单像素颜色检测将已挑战对手识别为可挑战,导致导航超时卡死 #424

@syokounya

Description

@syokounya

在提交您的问题反馈之前

  • 我已经阅读了 用户文档 并尝试自己解决问题,同时在社群中进行了讨论
  • 我无法找到任何 open issue 反馈了相同的问题

相关环境信息

  • AutoWSGR 版本:
  • 操作系统: Windows 10
  • 模拟器: MuMu 模拟器(1920×1080)
  • Python 版本: 3.13

问题描述

在演习面板中,_check_challenge_at() 仅通过单个像素点的颜色匹配来判断对手是否可挑战。当该探测点恰好落在背景中的蓝色杂色像素上时,会把已挑战过的对手误判为可挑战(Y)。
随后脚本点击该对手,期望进入「对手信息页」再跳转到出征准备页,但由于该对手实际上已不可挑战,页面没有任何响应,导致 click_and_wait_for_page 在 演习-对手信息 -> BATTLE_PREP 处导航超时,整个演习流程卡死,最终保存 NavError 截图后任务异常结束。

autowsgr_2026-04-12.debug.log

Image

复现方法

  1. 确保演习列表中至少有一个对手已经挑战过(按钮变为灰色)。
  2. 前端添加并运行舰队演习任务。
  3. 如果该已挑战对手的按钮区域在单像素探测点处恰好出现蓝色背景像素,即可复现误判与后续导航超时。

Log输出

13:40:18.094 | DEBUG    | ui/utils/navigation.py:116 | [UI] 已到达: 地图-出征 -> 地图-演习 (第 4 次截图)
13:40:19.117 | DEBUG    | emulator/controller/scrcpy.py:442 | [Emulator] swipe(0.833,0.370→0.833,0.741) → pixel(1600,400→1600,800) 500ms  ui/map/panels/exercise.py:114 in _exercise_swipe_to_top
13:40:20.483 | DEBUG    | ui/map/panels/exercise.py:169 | [UI] 演习对手 1-4 状态: ['N', 'Y', 'Y', 'Y']
13:40:20.486 | DEBUG    | emulator/controller/scrcpy.py:442 | [Emulator] swipe(0.833,0.741→0.833,0.370) → pixel(1600,800→1600,400) 500ms  ui/map/panels/exercise.py:119 in _exercise_swipe_to_bottom
13:40:21.867 | INFO     | ui/map/panels/exercise.py:181 | [UI] 演习对手状态: ExerciseRivalStatus([N, Y, Y, Y, Y])
13:40:21.868 | INFO     | ops/exercise.py:61 | [OPS] 当前可挑战对手: ExerciseRivalStatus([N, Y, Y, Y, Y])
13:40:21.868 | INFO     | ops/exercise.py:64 | [OPS] 正在挑战对手 2
13:40:21.872 | DEBUG    | ui/page.py:62 | [UI] 当前页面: 地图页面
13:40:21.872 | INFO     | ops/navigate.py:96 | [OPS] 已在目标页面: PageName.MAP
13:40:21.873 | INFO     | ui/map/base.py:187 | [UI] 地图页面: 演习 → 演习
13:40:21.876 | DEBUG    | emulator/controller/scrcpy.py:417 | [Emulator] click(0.316, 0.050) → pixel(605, 54)  res=1920x1080  ui/utils/navigation.py:216 in click_and_wait_for_page
13:40:21.941 | DEBUG    | ui/utils/navigation.py:109 | [UI] 等待到达: 地图-演习 -> 地图-演习 (超时 5.0s)
13:40:21.944 | DEBUG    | ui/utils/navigation.py:116 | [UI] 已到达: 地图-演习 -> 地图-演习 (第 1 次截图)
13:40:22.944 | INFO     | ops/exercise.py:85 | [OPS] 选择对手 2
13:40:22.945 | INFO     | ui/map/panels/exercise.py:210 | [UI] 演习 → 选择第 2 个对手
13:40:22.951 | DEBUG    | emulator/controller/scrcpy.py:442 | [Emulator] swipe(0.833,0.370→0.833,0.741) → pixel(1600,400→1600,800) 500ms  ui/map/panels/exercise.py:114 in _exercise_swipe_to_top
13:40:24.334 | DEBUG    | emulator/controller/scrcpy.py:417 | [Emulator] click(0.802, 0.389) → pixel(1540, 420)  res=1920x1080  ui/map/panels/exercise.py:220 in select_exercise_rival
13:40:24.901 | INFO     | ui/map/panels/exercise.py:248 | [UI] 演习 → 开始战斗 (对手信息页 → 出征准备)
13:40:24.906 | DEBUG    | emulator/controller/scrcpy.py:417 | [Emulator] click(0.838, 0.722) → pixel(1608, 780)  res=1920x1080  ui/utils/navigation.py:216 in click_and_wait_for_page
13:40:24.969 | DEBUG    | ui/utils/navigation.py:109 | [UI] 等待到达: 演习-对手信息 -> PageName.BATTLE_PREP (超时 5.0s)
13:40:24.973 | DEBUG    | ui/page.py:62 | [UI] 当前页面: 地图页面
13:40:24.974 | DEBUG    | ui/utils/navigation.py:122 | [UI] 等待 #1: 演习-对手信息 -> PageName.BATTLE_PREP, 当前=地图页面
...
13:40:30.124 | ERROR    | ui/utils/navigation.py:135 | [UI] 等待超时: 演习-对手信息 -> PageName.BATTLE_PREP, 11 次截图后仍未到达, 当前: 未知
13:40:30.266 | DEBUG    | infra/logger.py:399 | 截图已保存: logs\images\NavError_134030_254.png

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions