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

3.6 KiB
Raw Blame History

id, title, phase, deps, status, created
id title phase deps status created
T-587 AI工场商品项目入口与 CDP 只读拉取蝦皮原主图 URL 7
T-586
T-563
DONE 2026-07-11

问题 / 背景

AI工场以“账号 + 商品 ID”建立项目,并从该账号 Chrome 的商品详情页只读取得全部主图 URL。该流程必须复用已验证 CDP、登录检测、商品失效 toast 和 tab 清理纪律,不能另写页面选择器或修改蝦皮商品。

方案

  • 新增项目入口服务:校验账号、商品 ID 和重复项目;重复时打开已有项目。
  • 抽取/复用 app.editor 图片列表读取能力,返回有序 {src, index},不要求上传 input,不下载图片、不改标题/图片。
  • 按①采集的只读边界确保账号 Chrome 就绪:已打开复用,未打开才启动;只检测登录,不自动登录、不填密码。
  • 商品页后台打开,不主动抢焦点;只关闭本轮自动新建 tab,复用用户已有 tab 不关闭。
  • 详情页失效、无权限、未登录、CDP 超时继续上浮结构化中文原因和 Shopee 原始 toast。
  • 抓取结果写项目的原图 URL 快照,刷新时按 URL/顺序更新,不创建本地 asset,下载留给 T-588。

验收要点

  • mock 覆盖已开 Chrome 复用、未开启动、明确未登录、暂时不确定登录、商品失效和成功读 1..9 张 URL。
  • 成功路径不调用标题修改、文件上传、拖拽或更新提交。
  • URL 顺序与蝦皮主图顺序一致;重复刷新幂等。
  • 新建失败 tab 清理、复用 tab 保留;bring_to_front=False。
  • 涉及 CDP 变更时同步 docs/04-architecture.md 并在测试商品做只读实跑;不点击更新。

边界(不改什么)

  • 不下载/显示图片,不做照片池 GUI,不写蝦皮。
  • 不更改现有①采集和③更新行为。
  • 不绕过登录、验证码、风控或权限检查。

执行记录

  • 2026-07-11:完成 AI工场商品项目入口与原主图 URL 只读拉取代码。
    • app/editor.py 新增 read_product_image_urls(),复用已验证 itembox rects 顺序返回 {index, src};新增 close_readonly_product() 复用①采集 tab 清理规则。
    • app/image_studio.py 新增项目入口 pull_remote_main_image_urls():按账号+商品创建/打开项目,复用/启动账号 Chrome,只检测登录;明确登录页阻断,不确定登录继续尝试打开商品页;商品页用 open_product(..., bring_to_front=False) 后台只读打开,读取 URL 后同步为 remote-only original assets,不下载图片、不修改蝦皮、不点击更新。
    • 原图 URL 刷新走 sync_original_asset_urls():相同 URL 复用原 asset 并更新顺序,不再出现的 URL 标记 missing,不物理删除历史记录。
    • docs/04-architecture.md 已补充 AI工场原主图读取的 CDP 约束。
    • 测试覆盖:已开 Chrome 复用、未开 Chrome 启动、明确未登录阻断、NO_SESSION_COOKIE 不确定登录继续、商品失效 toast 文案上浮、成功读取 1..9 张 URL、重复刷新幂等、自动新建/复用 tab 清理接口,以及成功路径不调用标题修改/封面替换/点击更新。
    • 验证:在只套用 T-587 diff 的 clean worktree 中运行 python -m ruff check app tests main.py、py -3.10 -m compileall app main.py、py -3.10 -m unittest discover -s tests(350 tests)和 git diff --check,全部通过。
    • 真实蝦皮只读实跑未执行:本轮未指定可用的已登录测试账号别名;为避免擅自打开真实浏览器,只做 mock/CDP 合约验证,后续接 GUI 前可用测试账号对 ITEM_ID 51100639510 做一次只读确认。