商品详情页滚动采集评价数量和店铺名 #40

Closed
opened 2026-08-08 10:25:47 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / MVP
  • 阶段:PDD 商品数据采集

要解决什么

正式采集器打开 PDD App 商品详情页后,只读取首屏控件树。评价数量和店铺名通常位于页面下方,因此采集结果中的 metrics.reviews 和 shop_name 经常为空,任务详情只能显示“未采集”。

做什么 / 不做什么

  • 做:在原有首屏商品信息采集完成后、进入规格面板前,小幅慢速向下浏览商品详情页,累积采集评价数量和店铺名。
  • 做:支持以“商品评价(...)”“...条评价”“评价...”和无评价文案识别评价数量;以“进店”为锚点识别店铺名。
  • 做:处理取消、超时、最大滑动次数、页面到底和字段分布在不同屏幕的情况。
  • 不做:不修改标题和已拼数量的现有采集规则。
  • 不做:不修改规格面板入口、颜色遍历、颜色价格或尺码采集代码。
  • 不做:不修改 SQLite 表结构、pdd_data 结构或 Admin 接口。
  • 不做:正式代码不导入 client/src/demo1/pdd_auot.py,只参考其中已验证的解析思路。

怎么做

  1. 保留商品首屏已经采集到的标题和已拼数量。
  2. 在 client/src/pdd_collect_service.py 增加仅负责商品元数据的有限滚动扫描:每次读取控件树并分别累积评价和店铺名;缺失时在商品页可滚动区域小幅向上滑动,让页面展示更下方内容。
  3. 评价与店铺不要求出现在同一个控件树;任一字段找到后不得被后续空值覆盖。
  4. 连续读取页面不再变化或达到最大次数时停止;每次循环检查取消和总超时。
  5. 扫描完成后继续调用原有规格入口、颜色价格和尺码流程;不复用滑动前坐标。
  6. 把演示脚本中“商品评价”精确匹配和“进店”锚点解析整理到正式解析函数中,并增加脱敏 XML/假设备测试。

预计修改:

  • client/src/pdd_collect_service.py
  • client/test/test_pdd_collect_service.py
  • 相关 Client 长期文档(仅在稳定规则需要补充时)

验收标准

  • 标题和已拼数量继续使用原有首屏采集结果。
  • 首屏缺少评价或店铺时,在打开规格面板前进行小幅慢速滚动。
  • 评价和店铺分布在不同屏幕时能够分别累积。
  • 获取到两个字段后立即停止商品页滚动并进入原有规格流程。
  • 页面到底、达到最大次数、取消或超时时能安全停止。
  • 不修改颜色价格、尺码和规格入口算法。
  • 采集结果仍先写 SQLite,再由原有 Outbox 提交 Admin。
  • 相关单元测试和 Client 完整回归通过。

怎么验证

从 client/ 执行:

C:/Python310/python.exe -m py_compile src/pdd_collect_service.py test/test_pdd_collect_service.py
C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_collect_service.py"
C:/Python310/python.exe -m unittest discover -s test

另外使用真机 PDD 商品链接验证:首屏读取标题后先缓慢向下浏览,能够获得评价数量和店铺名,随后才打开规格面板;真机验证不得触发下单。

## 基本信息 - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:#2 / MVP - 阶段:PDD 商品数据采集 ## 要解决什么 正式采集器打开 PDD App 商品详情页后,只读取首屏控件树。评价数量和店铺名通常位于页面下方,因此采集结果中的 `metrics.reviews` 和 `shop_name` 经常为空,任务详情只能显示“未采集”。 ## 做什么 / 不做什么 - 做:在原有首屏商品信息采集完成后、进入规格面板前,小幅慢速向下浏览商品详情页,累积采集评价数量和店铺名。 - 做:支持以“商品评价(...)”“...条评价”“评价...”和无评价文案识别评价数量;以“进店”为锚点识别店铺名。 - 做:处理取消、超时、最大滑动次数、页面到底和字段分布在不同屏幕的情况。 - 不做:不修改标题和已拼数量的现有采集规则。 - 不做:不修改规格面板入口、颜色遍历、颜色价格或尺码采集代码。 - 不做:不修改 SQLite 表结构、`pdd_data` 结构或 Admin 接口。 - 不做:正式代码不导入 `client/src/demo1/pdd_auot.py`,只参考其中已验证的解析思路。 ## 怎么做 1. 保留商品首屏已经采集到的标题和已拼数量。 2. 在 `client/src/pdd_collect_service.py` 增加仅负责商品元数据的有限滚动扫描:每次读取控件树并分别累积评价和店铺名;缺失时在商品页可滚动区域小幅向上滑动,让页面展示更下方内容。 3. 评价与店铺不要求出现在同一个控件树;任一字段找到后不得被后续空值覆盖。 4. 连续读取页面不再变化或达到最大次数时停止;每次循环检查取消和总超时。 5. 扫描完成后继续调用原有规格入口、颜色价格和尺码流程;不复用滑动前坐标。 6. 把演示脚本中“商品评价”精确匹配和“进店”锚点解析整理到正式解析函数中,并增加脱敏 XML/假设备测试。 预计修改: - `client/src/pdd_collect_service.py` - `client/test/test_pdd_collect_service.py` - 相关 Client 长期文档(仅在稳定规则需要补充时) ## 验收标准 - [ ] 标题和已拼数量继续使用原有首屏采集结果。 - [ ] 首屏缺少评价或店铺时,在打开规格面板前进行小幅慢速滚动。 - [ ] 评价和店铺分布在不同屏幕时能够分别累积。 - [ ] 获取到两个字段后立即停止商品页滚动并进入原有规格流程。 - [ ] 页面到底、达到最大次数、取消或超时时能安全停止。 - [ ] 不修改颜色价格、尺码和规格入口算法。 - [ ] 采集结果仍先写 SQLite,再由原有 Outbox 提交 Admin。 - [ ] 相关单元测试和 Client 完整回归通过。 ## 怎么验证 从 `client/` 执行: ```powershell C:/Python310/python.exe -m py_compile src/pdd_collect_service.py test/test_pdd_collect_service.py C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_collect_service.py" C:/Python310/python.exe -m unittest discover -s test ``` 另外使用真机 PDD 商品链接验证:首屏读取标题后先缓慢向下浏览,能够获得评价数量和店铺名,随后才打开规格面板;真机验证不得触发下单。
Author
Owner

进度更新:已实现首屏结果保留与商品页有限滚动补采。测试覆盖评价/店铺分处不同屏幕、以“进店”为锚点解析店名、商品评价(191) 解析、页面不再变化停止,以及滚动期间取消且不打开规格面板。未修改规格入口、颜色价格和尺码方法。Client 完整回归 166 项通过,正在进行差异检查与提交归档。

进度更新:已实现首屏结果保留与商品页有限滚动补采。测试覆盖评价/店铺分处不同屏幕、以“进店”为锚点解析店名、`商品评价(191)` 解析、页面不再变化停止,以及滚动期间取消且不打开规格面板。未修改规格入口、颜色价格和尺码方法。Client 完整回归 166 项通过,正在进行差异检查与提交归档。
Author
Owner

实施完成,待用户验收

已完成:

  • 保留原首屏标题和已拼数量;
  • 仅在首屏采集与规格面板之间增加约 30% 页面高度的慢速滚动;
  • 评价与店铺可在不同屏幕分别累积,后续空值不覆盖已取得数据;
  • 支持 商品评价(191)、2356条评价、评价1.1万+ 与无评价文案;
  • 店铺增加“进店”同排左侧锚点解析;
  • 字段完整、连续两次页面不变、达到 12 次上限、取消或总超时时停止;
  • 取消发生在滚动期间时不会打开规格面板;
  • 未修改规格入口、颜色价格、尺码、SQLite、pdd_data 或 Admin 接口。

提交:

  • 9dadac2 feat: 滚动采集评价数量和店铺名 (#40)
  • d199867 docs: 归档任务 #40

归档:docs/task/40-商品详情页滚动采集评价数量和店铺名.md

验证:语法检查通过;Client 完整回归 Ran 166 tests ... OK;各提交 git show --check 通过。

未验证:尚未真机检查不同 PDD 页面版本的实际店铺节点和滑动距离。额外的主窗口“创建后立即关闭”冒烟检查触发了既有 settings_ui_event.py Android 搜索 Worker 销毁后发信号问题,该文件不在 #40 变更中,不影响本工单单元/完整回归结果,建议另行建缺陷单处理。

工单保持开启,等待用户验收。

## 实施完成,待用户验收 已完成: - 保留原首屏标题和已拼数量; - 仅在首屏采集与规格面板之间增加约 30% 页面高度的慢速滚动; - 评价与店铺可在不同屏幕分别累积,后续空值不覆盖已取得数据; - 支持 `商品评价(191)`、`2356条评价`、`评价1.1万+` 与无评价文案; - 店铺增加“进店”同排左侧锚点解析; - 字段完整、连续两次页面不变、达到 12 次上限、取消或总超时时停止; - 取消发生在滚动期间时不会打开规格面板; - 未修改规格入口、颜色价格、尺码、SQLite、`pdd_data` 或 Admin 接口。 提交: - `9dadac2` `feat: 滚动采集评价数量和店铺名 (#40)` - `d199867` `docs: 归档任务 #40` 归档:`docs/task/40-商品详情页滚动采集评价数量和店铺名.md` 验证:语法检查通过;Client 完整回归 `Ran 166 tests ... OK`;各提交 `git show --check` 通过。 未验证:尚未真机检查不同 PDD 页面版本的实际店铺节点和滑动距离。额外的主窗口“创建后立即关闭”冒烟检查触发了既有 `settings_ui_event.py` Android 搜索 Worker 销毁后发信号问题,该文件不在 #40 变更中,不影响本工单单元/完整回归结果,建议另行建缺陷单处理。 工单保持开启,等待用户验收。
Author
Owner

用户已于 2026-08-11 明确验收通过。

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:eca9289
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`eca9289` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 10:58:05 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#40