3.6 KiB
3.6 KiB
id, title, phase, deps, status, created
| id | title | phase | deps | status | created | ||
|---|---|---|---|---|---|---|---|
| T-587 | AI工场商品项目入口与 CDP 只读拉取蝦皮原主图 URL | 7 |
|
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-onlyoriginalassets,不下载图片、不修改蝦皮、不点击更新。- 原图 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 做一次只读确认。