Skip to content

skip_dialogs 兜底分支在加载帧误点右上角,网络波动时导致推图 WaitFailedException #59

Description

@Ranch007

问题描述

推图(ClearMapTask)战斗结束后,结算界面加载转场期间(资源加载中、进度百分比、空帧),
skip_dialogs 的 else 分支(has_dialog=True)反复点右上角 (0.95, 0.04),
干扰了界面过渡。网络正常时转场快无影响,网络波动时持续误点 → 结算界面卡住 →
auto_battle 收尾 wait_ocr 超时 → 抛 WaitFailedException。

复现步骤

  1. 运行推图任务(ClearMapTask)
  2. 进入战斗并完成
  3. 模拟或等待网络波动,使结算界面加载时间延长(日志显示加载帧停留超过 3 秒即可触发)
  4. 观察到「继续前进」按钮无法正常出现,最终超时报错

日志证据(logs/ok-script.log)

正常网络下(~6s 结算,无问题):

09:44:22 战斗结束「任务完成」 
09:44:25 left_click 任务完成 09:44:28 found result: [继续前进_1.00] ← 正常出现
09:44:28 left_click 继续前进 → 进入下一轮

慢网络下(加载帧反复误点右上角):

09:19:57 OCR: 资源加载中 87% 
09:19:57 click 1824, 43 ← 误点右上角 
09:19:59 OCR: 资源加载中 99% 
09:19:59 click 1824, 43 ← 再次误点 
09:20:02 OCR: 一物品详情 / 坍塌晶条 ↑ 多次误点后界面状态被破坏,物品详情弹窗出现

click 1824, 43(即 click_relative(0.95, 0.04))共出现 46 次,全部位于加载帧/空帧。

根因分析

BaseGfTask.py:100-103,skip_dialogs 的兜底逻辑是"每帧 OCR 无命中 → 点右上角":

python
else:
    if has_dialog:
        self.click_relative(0.95, 0.04)   # ← 加载帧上也在点
    self.sleep(2)

加载帧上的「资源加载中」「99%」「空帧」不属于关键词(跳过/pop_ups/end_match), 每次都走兜底。网络慢时加载帧持续多秒,右上角被反复点击,干扰结算界面过渡。

修复方案

改动1:兜底分支加加载帧判断(BaseGfTask.py:100-103)

# 改前
else:
    if has_dialog:
        self.click_relative(0.95, 0.04)
    self.sleep(2)

# 改后
else:
    if has_dialog and not self._is_loading_frame(boxes):
        self.click_relative(0.95, 0.04)
    self.sleep(2)

改动2:新增加载帧检测方法(紧跟 skip_dialogs)

def _is_loading_frame(self, boxes):
    """检测当前帧是否为网络加载/转场帧——此时不应点右上角,只应等待网络恢复。"""
    if not boxes:  # 空帧 = 转场过渡
        return True
    for box in boxes:
        name = box.name
        if not name:
            continue
        if '资源加载中' in name:
            return True
        if re.search(r'\d{1,3}%', name):  # "99%", "87%"
            return True
    return False

影响范围

场景 改前 改后
加载帧「资源加载中 99%」 click 1824,43 + sleep 2 只 sleep 2,不点击
空帧(转场过渡) click 1824,43 + sleep 2 只 sleep 2,不点击
剧情「跳过」 正常点击 不变
结算「继续前进」 正常返回 不变
战斗中「回合/击杀」 click 1824,43 + sleep 2 不变(非加载帧)

只影响 has_dialog=True 场景下的加载帧行为,消除无用点击。

验证方法

  1. python -m py_compile src/tasks/BaseGfTask.py 确认无语法错误
  2. python main_debug.py 跑推图,观察日志中加载帧不再出现 click 1824,43
  3. 回归跑 DailyTask 确认自动战斗/剧情跳过不受影响

环境

  • 项目版本:dev
  • Python:3.12
  • 系统:Windows 10

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions