Files
cmshoppe/docs/tasks/T-560.md
T

60 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-560
title: ① 采集前批量确保账号 Chrome 就绪 + 登录预检(自动开、不自动登录)
phase: 2
deps: [T-203, T-205, T-105b, T-103b, T-523]
status: DONE
created: 2026-07-08
---
## 问题 / 背景
需求(客户要求):① 导入采集点「采集」后,让程序**自动**把本批**匹配到账号的**各店铺 Chrome 一个个确保就绪、逐账号检查蝦皮登录态,未登录的账号标记并跳过其任务、最后弹窗汇总要补登录的账号;避免运营在几百个任务前**逐个手动开 Chrome、逐个肉眼确认登录**。用户机器日常已能并发开 ~10 个店铺 Chrome,资源可承受。
**这与现有明文规则冲突**:当前 ①③ 预检**"不自动启动 Chrome、不无提示批量启动所有账号"**(T-205/T-402),未就绪就中止并引导去④手动处理。本任务是**有意在①采集侧推翻该规则**(③更新侧不改,形成有意的不对称)。
**架构选择(已定)**:方案 A——预检期把本批需要的账号 Chrome 都**开着保留**(不关),采集复用;不做逐账号懒开懒关。**预检 ≠ 保证**:几百任务可能跑数小时,登录会中途失效,采集期必须逐任务/逐账号处理掉登录。
## 方案(settled 一句话)
点采集 → 对本批**匹配到的每个账号**:确保其 Chrome 在跑(已开则复用、没开才启动;开失败则中止+弹窗)→ 就地查蝦皮登录 → 未登录账号标记、其任务整组跳过 → **全部保持开着** → 挨个采集(复用这些 Chrome)→ 中途掉登录 = 该账号剩余任务 skip 记因 → 结束弹窗汇总(哪些账号要补登录)+ 提示用户自行关闭 Chrome。
## 验收要点(7 条约束)
1. **确保就绪=幂等**:先 `chrome.is_running(debug_port)`,已响应则**复用**现有 Chrome(沿用 T-105b),没开才 `launch`;绝不为已开账号重复开窗/撞端口。
2. **中途掉登录=账号级跳过**:采集期某账号被判掉登录,**把该账号剩余任务整组标 `skipped`、记原因("采集中途掉登录")**,不逐任务撞死刷一屏失败。
3. **两类跳过合并汇总**:预检未登录的账号 + 中途掉登录的账号,在结束弹窗里一起列出,提示"这些账号要补登录"。
4. **开 Chrome 失败=中止+弹窗**:端口冲突、Chrome 路径错、OOM、CDP 未就绪等任一开失败 → 中止本轮采集并弹窗说明(沿用/扩展现有端口冲突阻断口径)。
5. **不自动关**:采集结束**不关 Chrome**,弹窗提示用户自行关闭;不得关闭用户日常开着的窗口。
6. **只为匹配账号开 Chrome**:未匹配账号的别名照旧逐行 `skipped` 记原因,不为其开浏览器。
7. **不自动登录/不绕过风控**:全程只**检测**登录、不自动填密码、不绕验证码;未登录只标记引导人工去④补登录。
## 文档同步(推翻 T-205 规则,必须一起改)
- 更新 `AGENTS.md`、`docs/current-state.md`、`docs/routes.md`、`docs/04-architecture.md` 里"①③预检不自动启动 Chrome"的表述:**①采集改为自动确保就绪**;否则代码与文档打架、后续 agent 会照旧文档把本功能当 bug 改回去。
- **明确 ①③ 不对称**:① 采集自动开 Chrome、③ 更新仍需手动就绪(T-402 不改)——写清这是有意设计,不是遗漏。
- 归档任务 T-205 状态不改(历史),但在上述现状文档里注明"① 采集就绪策略已由 T-560 改为自动"。
## 单测点(`tests/test_gui.py` + 相关)
- 预检:某账号 Chrome 已在跑 → 复用、不调用 `launch`;没跑 → 调用 `launch`。
- 预检开 Chrome 失败(端口冲突/启动异常)→ 中止、不进入采集、弹窗提示。
- 某账号预检未登录 → 其任务整组 `skipped` 记因、其余账号照常采集。
- 采集中途某账号掉登录 → 该账号剩余任务 `skipped` 记因、不逐任务重复失败、其余账号继续。
- 结束汇总:未登录 + 中途掉登录的账号都出现在汇总提示里。
- 未匹配别名仍逐行 `skipped`、不为其开 Chrome。
- 不自动登录/不填密码(沿用现有断言口径)。
## 边界(不改什么)
只改 ① 采集就绪/登录预检链路(`CollectWorker` + `accounts`/`chrome` 就绪、`editor` 登录检测复用)、① 结束汇总弹窗、相关现状文档、单测;不改 ③ 更新侧就绪规则(T-402 保持手动)、不改 CDP 选择器/采集读取逻辑本身、DB schema、AI、Excel、Shopee 交互事实。
## 执行记录
- 2026-07-08:同步 `AGENTS.md`、`docs/04-architecture.md`、`docs/routes.md`、`docs/current-state.md`,明确 T-560 后 ①采集会自动确保匹配账号 Chrome 就绪,③更新仍保持只检测不自动启动的高风险边界。
- 2026-07-08:`CollectWorker` 采集预检从“Chrome 未启动即 blocked”改为“先幂等确保 Chrome 就绪”:已运行账号复用,未运行账号调用 `accounts.launch_for_login()` 启动;启动失败才 blocked 并弹窗中止。
- 2026-07-08:预检未登录账号不再 blocked,改为把该账号任务整组 `skipped` 并记原因;采集过程中若二次登录检测发现掉登录,则把该账号当前和剩余任务整组 `skipped` 为“采集中途掉登录”,不逐条重复失败。
- 2026-07-08:①采集完成后新增账号汇总弹窗:列出自动启动账号、需要补登录账号,并提示采集结束不会自动关闭账号 Chrome;未匹配别名仍逐行略过且不启动 Chrome。
- 2026-07-08:更新 GUI 单测,覆盖 Chrome 未运行时自动启动、启动失败阻断、预检未登录账号级略过、中途掉登录账号级略过、结束汇总弹窗;③更新侧不自动启动 Chrome 的测试保持不变。
- 验证通过:`python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`。