在提问之前...
描述你的问题
游戏停在登录界面时,启动任意非 Restart 任务(如 RyouToppa),脚本在 ui_goto 中死循环,
反复检测到 page_login 却无法登录,直至 60s 超时。日志如下:
script.py:0473 | INFO | module_path: .../tasks/RyouToppa/script_task.py
game_ui.py:0102 | INFO | UI get current page
logger.py:0320 | INFO | [UI] page_login
logger.py:0312 | INFO | <<< UI GOTO PAGE_KEKKAI_TOPPA >>>
game_ui.py:0102 | INFO | UI get current page
logger.py:0320 | INFO | [UI] page_login
game_ui.py:0102 | INFO | UI get current page
logger.py:0320 | INFO | [UI] page_login
... (一直循环到超时)
如何复现
- 启动游戏,停在登录界面。
- 运行非 Restart 任务(例如寮突破 RyouToppa)。
- 观察日志:出现
<<< UI GOTO ... >>> 后,UI get current page / [UI] page_login 反复循环,无法登录。
预期行为
No response
相关 Logs
报错时游戏的截图/别的截图
No response
还有别的吗?
claude原因分析
page_login 在 tasks/GameUi/page.py 中定义为 page_login = Page(G.I_CHECK_LOGIN_FORM),没有任何 .link(),在页面跳转图中是一个孤立节点。
ui_goto 通过 build_reverse_path_dict(destination) 反向 BFS 构建路径,page_login 没有出边,不会被加入路径字典,因此 path_dict.get(page_login) 永远返回 None。
- 于是
ui_goto 走入 if not path: self.ui_get_current_page() 分支反复重检测,形成死循环。
- 而真正负责点"进入游戏"的
LoginHandler.app_handle_login()(tasks/Restart/login.py)只被 Restart 任务和 SwitchAccount 调用,通用导航 ui_goto/ui_get_current_page 从不调用它。
- 结果:任何非 Restart 任务若在登录页启动(例如调度器首个 Restart 被
is_first_task 跳过、或运行中游戏掉线回到登录页),都会卡死。
claude建议修复(claude已帮助我在本机完成修复)
在 ui_goto 中遇到 page_login 时,先调用 Restart 的登录流程回到 page_main,再继续导航。
(放在 ui_goto 而非 ui_get_current_page,因为 SwitchAccount 依赖 ui_get_current_page 原样返回 page_login 以自行处理登录。)
--- a/tasks/GameUi/game_ui.py
+++ b/tasks/GameUi/game_ui.py
@@ from tasks.GameUi.page import
-from tasks.GameUi.page import Page, PageRegistry, page_main, random_click
+from tasks.GameUi.page import Page, PageRegistry, page_login, page_main, random_click
@@ class GameUi:
found = False
while not timeout_timer.reached():
if found:
confirm_timer.wait()
return True
+ # 登录界面在页面跳转图中是孤立节点(无link), 无法通过路径规划导航,
+ # 需先执行登录流程回到主页(page_main)再继续导航
+ if self.ui_current == page_login:
+ self._ensure_login()
+ timeout_timer.reset() # 登录耗时较长, 重置导航超时
+ continue
confirm_timer.reset()
path = path_dict.get(self.ui_current, None)
...
+ def _ensure_login(self):
+ """遇到 page_login 时调用 Restart 登录流程, 完成后回到 page_main。"""
+ from tasks.Restart.login import LoginHandler
+ logger.info('At login page, run app login before navigation')
+ login_handler = LoginHandler(config=self.config, device=self.device)
+ login_handler.app_handle_login()
+ self.ui_current = page_main
在提问之前...
描述你的问题
游戏停在登录界面时,启动任意非 Restart 任务(如 RyouToppa),脚本在
ui_goto中死循环,反复检测到
page_login却无法登录,直至 60s 超时。日志如下:如何复现
<<< UI GOTO ... >>>后,UI get current page/[UI] page_login反复循环,无法登录。预期行为
No response
相关 Logs
报错时游戏的截图/别的截图
No response
还有别的吗?
claude原因分析
page_login在tasks/GameUi/page.py中定义为page_login = Page(G.I_CHECK_LOGIN_FORM),没有任何.link(),在页面跳转图中是一个孤立节点。ui_goto通过build_reverse_path_dict(destination)反向 BFS 构建路径,page_login没有出边,不会被加入路径字典,因此path_dict.get(page_login)永远返回None。ui_goto走入if not path: self.ui_get_current_page()分支反复重检测,形成死循环。LoginHandler.app_handle_login()(tasks/Restart/login.py)只被 Restart 任务和 SwitchAccount 调用,通用导航ui_goto/ui_get_current_page从不调用它。is_first_task跳过、或运行中游戏掉线回到登录页),都会卡死。claude建议修复(claude已帮助我在本机完成修复)
在
ui_goto中遇到page_login时,先调用 Restart 的登录流程回到page_main,再继续导航。(放在
ui_goto而非ui_get_current_page,因为 SwitchAccount 依赖ui_get_current_page原样返回page_login以自行处理登录。)