修复带数量规格标题导致面板误报超时 #137

Closed
opened 2026-08-11 10:04:40 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / MVP
  • 阶段:PDD 采集真机稳定性

要解决什么

最新采集任务点击规格入口后,Client 报 SKU_PANEL_NOT_FOUND:点击规格入口后,等待规格面板加载超时。

复现证据:

  1. 执行采集任务并成功进入 PDD 商品详情页;
  2. Client 找到规格入口并执行点击;
  3. 2026-08-11 09:50 和 09:52 保存的两份失败 XML 均已包含“请选择:颜色 尺码”“颜色 (6)”、6 个颜色、“尺码”和“提交订单”;
  4. 同一 XML 传给 parse_spec_panel() 后返回零个规格维度;
  5. _wait_spec_panel() 等待 10 秒后误报规格面板加载超时。

直接原因是规格标题判断只支持“颜色”“颜色分类”等固定文本,没有去除 颜色 (6) / 颜色(6) 这类数量后缀;当前视口中的尺码选项又尚未露出,因此没有任何维度被解析。

做什么 / 不做什么

  • 做:
    • 兼容规格标题末尾的半角、全角数量后缀,并保留原始标题用于展示;
    • 将“面板已打开”与“当前视口已解析出规格维度”分开判断;
    • 面板特征已出现但维度暂未出现时,继续进入现有颜色和尺码采集流程;真正无法解析时返回准确错误;
    • 使用本次失败 XML 提炼出的脱敏最小固件补回归测试;
    • 保留失败诊断 XML。
  • 不做:
    • 不修改规格入口坐标算法;
    • 不修改颜色蛇形遍历、逐色价格、尺码滚动和 SKU 组装规则;
    • 不修改 Admin 接口、错误响应结构或 pdd_data;
    • 不执行采购、下单或付款。

怎么做

  • 修改 client/src/pdd_collect_service.py:
    • 新增简单、可读的规格标题规范化函数,去掉末尾数量后缀后再调用现有维度判断;
    • 新增规格面板存在性判断,至少校验可滚动面板区域和可靠面板语义,不把普通商品页误认成面板;
    • 调整 _wait_spec_panel():面板存在时立即结束等待;面板存在但当前视口没有维度时,由后续现有采集流程给出具体的规格不完整错误;
    • 保持验证码、登录和风控页面分类优先。
  • 更新 client/test/test_pdd_collect_service.py,覆盖:
    • 颜色 (6)、颜色(6) 能解析;
    • 面板已打开但规格选项位于视口边缘时不再误报面板超时;
    • 普通商品页仍不会被误认成规格面板;
    • 真正未打开面板仍按超时处理。
  • 如现有真实 XML 测试文件适合扩展,则将脱敏最小固件放入现有 fixture 目录;不得提交原始设备 XML 中的个人或账号数据。
  • 不改数据库。

验收标准

  • 本次失败结构中的 颜色 (6) 能识别为颜色维度,并解析出6个颜色;
  • 颜色(6) 等全角数量后缀同样可识别;
  • 已出现可靠规格面板特征时,不再等待10秒并误报 SKU_PANEL_NOT_FOUND;
  • 真正没有打开规格面板时仍返回 PDD_PAGE_SPEC_PANEL_TIMEOUT;
  • 面板已打开但后续规格确实不完整时,返回规格不完整错误,而不是面板未找到;
  • 原有颜色价格、尺码滚动、特殊页面识别测试继续通过;
  • 不产生采购、下单或付款操作。

怎么验证

从 client/ 目录执行:

C:/Python310/python.exe -m unittest discover -s test -p 'test_pdd_collect_service.py' -v\nC:/Python310/python.exe -m unittest discover -s test -p 'test_pdd_real_xml_fixtures.py' -v
C:/Python310/python.exe -m unittest discover -s test -p 'test_*.py' -q
C:/Python310/python.exe -m py_compile src/pdd_collect_service.py

真机验收:

  1. 对同一采集任务重新执行;
  2. 确认点击入口后立即进入颜色采集,不再等待约10秒;
  3. 确认采集6个颜色后继续滚动采集尺码;
  4. 确认只采集数据,不进入下单流程。

风险和回退

  • 风险:面板判断过宽可能���商品正文中���“颜色/尺码”文字误认为面板,因此必须同时要求可滚动面板区域和可靠面板语义。
  • 风险:标题规范化过宽可能破坏真实规格名称,只允许去除标题末尾独立的数量后缀。
  • 回退:本任务仅修改解析和等待判断,可回退对应提交;不涉及数据库迁移和接口回退。
## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 / MVP - 阶段:PDD 采集真机稳定性 ## 要解决什么 最新采集任务点击规格入口后,Client 报 `SKU_PANEL_NOT_FOUND:点击规格入口后,等待规格面板加载超时`。 复现证据: 1. 执行采集任务并成功进入 PDD 商品详情页; 2. Client 找到规格入口并执行点击; 3. 2026-08-11 09:50 和 09:52 保存的两份失败 XML 均已包含“请选择:颜色 尺码”“颜色 (6)”、6 个颜色、“尺码”和“提交订单”; 4. 同一 XML 传给 `parse_spec_panel()` 后返回零个规格维度; 5. `_wait_spec_panel()` 等待 10 秒后误报规格面板加载超时。 直接原因是规格标题判断只支持“颜色”“颜色分类”等固定文本,没有去除 `颜色 (6)` / `颜色(6)` 这类数量后缀;当前视口中的尺码选项又尚未露出,因此没有任何维度被解析。 ## 做什么 / 不做什么 - 做: - 兼容规格标题末尾的半角、全角数量后缀,并保留原始标题用于展示; - 将“面板已打开”与“当前视口已解析出规格维度”分开判断; - 面板特征已出现但维度暂未出现时,继续进入现有颜色和尺码采集流程;真正无法解析时返回准确错误; - 使用本次失败 XML 提炼出的脱敏最小固件补回归测试; - 保留失败诊断 XML。 - 不做: - 不修改规格入口坐标算法; - 不修改颜色蛇形遍历、逐色价格、尺码滚动和 SKU 组装规则; - 不修改 Admin 接口、错误响应结构或 `pdd_data`; - 不执行采购、下单或付款。 ## 怎么做 - 修改 `client/src/pdd_collect_service.py`: - 新增简单、可读的规格标题规范化函数,去掉末尾数量后缀后再调用现有维度判断; - 新增规格面板存在性判断,至少校验可滚动面板区域和可靠面板语义,不把普通商品页误认成面板; - 调整 `_wait_spec_panel()`:面板存在时立即结束等待;面板存在但当前视口没有维度时,由后续现有采集流程给出具体的规格不完整错误; - 保持验证码、登录和风控页面分类优先。 - 更新 `client/test/test_pdd_collect_service.py`,覆盖: - `颜色 (6)`、`颜色(6)` 能解析; - 面板已打开但规格选项位于视口边缘时不再误报面板超时; - 普通商品页仍不会被误认成规格面板; - 真正未打开面板仍按超时处理。 - 如现有真实 XML 测试文件适合扩展,则将脱敏最小固件放入现有 fixture 目录;不得提交原始设备 XML 中的个人或账号数据。 - 不改数据库。 ## 验收标准 - [ ] 本次失败结构中的 `颜色 (6)` 能识别为颜色维度,并解析出6个颜色; - [ ] `颜色(6)` 等全角数量后缀同样可识别; - [ ] 已出现可靠规格面板特征时,不再等待10秒并误报 `SKU_PANEL_NOT_FOUND`; - [ ] 真正没有打开规格面板时仍返回 `PDD_PAGE_SPEC_PANEL_TIMEOUT`; - [ ] 面板已打开但后续规格确实不完整时,返回规格不完整错误,而不是面板未找到; - [ ] 原有颜色价格、尺码滚动、特殊页面识别测试继续通过; - [ ] 不产生采购、下单或付款操作。 ## 怎么验证 从 `client/` 目录执行: ```powershell C:/Python310/python.exe -m unittest discover -s test -p 'test_pdd_collect_service.py' -v\nC:/Python310/python.exe -m unittest discover -s test -p 'test_pdd_real_xml_fixtures.py' -v C:/Python310/python.exe -m unittest discover -s test -p 'test_*.py' -q C:/Python310/python.exe -m py_compile src/pdd_collect_service.py ``` 真机验收: 1. 对同一采集任务重新执行; 2. 确认点击入口后立即进入颜色采集,不再等待约10秒; 3. 确认采集6个颜色后继续滚动采集尺码; 4. 确认只采集数据,不进入下单流程。 ## 风险和回退 - 风险:面板判断过宽可能���商品正文中���“颜色/尺码”文字误认为面板,因此必须同时要求可滚动面板区域和可靠面板语义。 - 风险:标题规范化过宽可能破坏真实规格名称,只允许去除标题末尾独立的数量后缀。 - 回退:本任务仅修改解析和等待判断,可回退对应提交;不涉及数据库迁移和接口回退。
Author
Owner

实施完成,等待真机验收

已按确认方案完成,未修改规格入口坐标、颜色蛇形遍历、逐色采价、尺码滚动、Admin 接口或数据库。

实现结果

  • 颜色 (6) 和 颜色(6) 均可识别为颜色维度,展示名称仍保留原文;
  • 将“规格面板已打开”和“当前视口解析出维度”分开判断;
  • 面板已打开但规格不完整时返回 PDD_DATA_SPEC_INCOMPLETE,不再误报 SKU_PANEL_NOT_FOUND;
  • 增加由本次失败结构提炼的脱敏最小 XML 固件;
  • 本次 09:50、09:52 两份本地失败 XML 均已验证为 color / 颜色 (6) / 6个值。

验证结果

  • 采集专项:36项通过;
  • 真实 XML:4项通过;
  • Client 全量:368项通过;
  • py_compile:通过。

测试期间只有本地 XML 解析和自动测试,没有连接真机执行采集、采购、下单或付款。

提交与归档

  • 实现提交:4ed9400
  • 归档提交:1961dd8
  • 归档:docs/task/137-修复带数量规格标题导致面板误报超时.md

尚未验证

需要在真机对同一采集任务重新执行,确认进入面板后立即开始6个颜色采集,随后继续尺码滚动并完成 Admin 提交。工单保持开启,状态为待验收。

## 实施完成,等待真机验收 已按确认方案完成,未修改规格入口坐标、颜色蛇形遍历、逐色采价、尺码滚动、Admin 接口或数据库。 ### 实现结果 - `颜色 (6)` 和 `颜色(6)` 均可识别为颜色维度,展示名称仍保留原文; - 将“规格面板已打开”和“当前视口解析出维度”分开判断; - 面板已打开但规格不完整时返回 `PDD_DATA_SPEC_INCOMPLETE`,不再误报 `SKU_PANEL_NOT_FOUND`; - 增加由本次失败结构提炼的脱敏最小 XML 固件; - 本次 09:50、09:52 两份本地失败 XML 均已验证为 `color / 颜色 (6) / 6个值`。 ### 验证结果 - 采集专项:36项通过; - 真实 XML:4项通过; - Client 全量:368项通过; - `py_compile`:通过。 测试期间只有本地 XML 解析和自动测试,没有连接真机执行采集、采购、下单或付款。 ### 提交与归档 - 实现提交:`4ed9400` - 归档提交:`1961dd8` - 归档:`docs/task/137-修复带数量规格标题导致面板误报超时.md` ### 尚未验证 需要在真机对同一采集任务重新执行,确认进入面板后立即开始6个颜色采集,随后继续尺码滚动并完成 Admin 提交。工单保持开启,状态为待验收。
Author
Owner

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:ad44f83。现关闭工单。

用户于 2026-08-13 明确验收通过。本地归档状态已更新,批量验收记录提交:`ad44f83`。现关闭工单。
ila closed this issue 2026-08-13 15:57:49 +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#137