优化主窗口寻找
This commit is contained in:
parent
1468b26436
commit
1f3cbaa0f9
@ -42,6 +42,7 @@ wechat_clicker/
|
||||
- 可见性检查基于元素**中心点**是否在消息列表可见区域内(30px margin)
|
||||
- 状态检测基于窗口计数 + **AXMinimized 属性**:区分窗口存在但最小化 vs 真正可见
|
||||
- **窗口恢复策略**:NSRunningApplication.unhide(隐藏)→ AX API 设置 AXMinimized=False(最小化)→ activate(前台);AppleScript 不可靠(微信不支持 miniaturized 属性)
|
||||
- **UNKNOWN 状态恢复**:先 Escape + Cmd+W 关闭可能的弹窗/多余窗口,再 activate + 点击侧边栏;外层循环连续恢复失败时指数退避(10s → 20s → 40s → ... → 120s 封顶),避免无效高频重试
|
||||
|
||||
## 使用方法
|
||||
|
||||
|
||||
@ -97,6 +97,11 @@
|
||||
- [x] **新增: 每聊天图片处理上限** — `MAX_IMAGES_PER_CHAT = 30`,防止单个高活跃群聊垄断处理时间(30张×10s = 5分钟/聊天)
|
||||
- [x] **简化: `_process_media_with_scroll`** — 不再负责滚动和锚点查找(移入 `_process_images_with_arrow` 内部),代码更清晰
|
||||
|
||||
### v0.9.2 UNKNOWN 状态恢复加固 (2026/04/24)
|
||||
|
||||
- [x] **修复: UNKNOWN 状态长时间无法恢复** — 原恢复逻辑只做 activate + 点侧边栏,遇到弹窗/多余窗口无法清理。改为先 Escape + Cmd+W 关闭可能的弹窗,再 activate + 点侧边栏
|
||||
- [x] **改进: 恢复失败指数退避** — 外层循环连续恢复失败时退避等待:10s → 20s → 40s → 80s → 120s(封顶),避免每 13 秒重复无效尝试。恢复成功后计数器归零
|
||||
|
||||
### 待验证
|
||||
|
||||
- [x] ~~验证最小化窗口自动恢复功能(需手动最小化微信窗口测试)~~
|
||||
|
||||
@ -39,6 +39,7 @@ class WeChatAutomator:
|
||||
self._scan_count = 0
|
||||
self._total_chats_processed = 0
|
||||
self._total_media_clicked = 0
|
||||
self._consecutive_recover_failures = 0
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
# 启动检查
|
||||
@ -114,10 +115,17 @@ class WeChatAutomator:
|
||||
time.sleep(0.5)
|
||||
|
||||
if not self.state.recover_to_chat_list():
|
||||
logger.warning("无法恢复到聊天列表,跳过本次循环")
|
||||
time.sleep(10)
|
||||
self._consecutive_recover_failures += 1
|
||||
backoff = min(10 * (2 ** (self._consecutive_recover_failures - 1)), 120)
|
||||
logger.warning(
|
||||
f"无法恢复到聊天列表 (连续失败 {self._consecutive_recover_failures}), "
|
||||
f"等待 {backoff}s"
|
||||
)
|
||||
time.sleep(backoff)
|
||||
return
|
||||
|
||||
self._consecutive_recover_failures = 0
|
||||
|
||||
self._scan_count += 1
|
||||
|
||||
global_unread = self.ui.get_global_unread_count()
|
||||
|
||||
@ -154,7 +154,12 @@ class StateMachine:
|
||||
time.sleep(0.5)
|
||||
|
||||
if state == UIState.UNKNOWN:
|
||||
# 尝试激活微信并点击侧边栏聊天按钮
|
||||
# 先尝试关闭可能的弹窗/多余窗口
|
||||
self.ax.send_escape_key()
|
||||
time.sleep(0.3)
|
||||
self.ax.send_cmd_w()
|
||||
time.sleep(0.3)
|
||||
# 重新激活微信并点击侧边栏聊天按钮
|
||||
self.ui.ensure_wechat_frontmost()
|
||||
time.sleep(0.5)
|
||||
self.ui.click_sidebar_chat_tab()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user