diff --git a/docs/task/40-商品详情页滚动采集评价数量和店铺名.md b/docs/task/40-商品详情页滚动采集评价数量和店铺名.md new file mode 100644 index 0000000..658ca43 --- /dev/null +++ b/docs/task/40-商品详情页滚动采集评价数量和店铺名.md @@ -0,0 +1,64 @@ +# 40 商品详情页滚动采集评价数量和店铺名 + +- 类型:需求 +- 父级大工单:#1 +- 所属 MVP / 版本:#2 / MVP +- 状态:已实现,待验收 +- 日期:2026-08-08 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/40 + +## 背景与目标 + +正式采集器原来只读取 PDD 商品详情页首屏。评价数量和店铺名通常在页面下方,因此采集结果经常缺少这两个字段。本任务只在首屏采集与打开规格面板之间增加有限滚动补采,不改变标题、已拼数量、规格入口、颜色价格和尺码算法。 + +## 最终方案 + +- 首次读取继续调用原有 `parse_goods_page()`,并保留首屏标题和已拼数量。 +- 首屏缺少评价或店铺时,每次慢速向上滑动约页面高度的 30%,等待 0.8 秒后重新读取无障碍控件树。 +- 不同屏幕取得的评价和店铺分别累积,后续空值不会覆盖已经采集到的字段。 +- 评价支持“商品评价(191)”“2356条评价”“评价1.1万+”和无评价文案。 +- 店铺名继续支持原有明确店铺文案,并增加以“进店”为锚点、读取同一行左侧文字的规则。 +- 两个字段都取得后立即停止;连续两次控件树不再变化或达到 12 次上限时也停止,缺失字段允许为空并保留诊断证据。 +- 每次滚动前后检查取消和整体超时;取消时不进入规格面板。 +- 滚动结束后重新读取当前控件树并调用原有规格入口与规格采集流程,不复用旧坐标。 +- 演示脚本只作为解析思路参考,正式代码没有导入 `demo1`。 + +## 改了哪些 + +- `client/src/pdd_collect_service.py`:增加评价格式、店铺锚点解析、有限滚动和跨屏字段累积。 +- `client/test/test_pdd_collect_service.py`:增加跨屏评价/店铺、首屏字段保留、页面到底和取消测试。 +- `docs/client/01-requirements.md`:更新评价数量的有限滚动采集要求。 +- `docs/client/02-architecture.md`:更新正式采集顺序和停止条件。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 标题和已拼数量继续使用原有首屏结果 | 通过 | +| 首屏缺少评价或店铺时,在规格面板前滚动 | 通过 | +| 评价和店铺位于不同屏幕时分别累积 | 通过 | +| 两个字段完整后立即停止商品页滚动 | 通过 | +| 页面不再变化或达到次数上限时停止 | 通过 | +| 滚动期间取消时不打开规格面板 | 通过 | +| 规格入口、颜色价格和尺码算法未修改 | 通过 | +| SQLite、`pdd_data` 和 Admin 接口未修改 | 通过 | +| 语法检查和 Client 完整回归通过 | 通过 | + +## 测试 + +- 执行的命令: + + ```powershell + cd client + C:/Python310/python.exe -m py_compile src/pdd_collect_service.py src/task_detail_view.py test/test_pdd_collect_service.py test/test_task_detail_view.py + $env:QT_QPA_PLATFORM="offscreen" + C:/Python310/python.exe -m unittest discover -s test + Remove-Item Env:QT_QPA_PLATFORM + ``` + +- 结果:语法检查通过;Client 完整回归共 166 项全部通过;未新增依赖。离屏 Qt 字体目录警告为现有环境提示,不影响结果。 +- **没验证到的部分**:尚未连接真机验证不同 PDD 页面版本的实际滑动距离、页面到底识别、评价文案和“进店”附近店铺节点结构;没有触发采购或下单。 + +## 相关提交 + +- `9dadac2` 滚动采集评价数量和店铺名