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

5.9 KiB
Raw Blame History

id, title, phase, deps, status, created
id title phase deps status created
T-560 ① 采集前批量确保账号 Chrome 就绪 + 登录预检(自动开、不自动登录) 2
T-203
T-205
T-105b
T-103b
T-523
DONE 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。