当前页面采集:订单确认面板回顶并兼容“参考分类”尺码 #113

Closed
opened 2026-08-27 17:12:14 +08:00 by ila · 3 comments
Owner

所属与来源

  • 关联工单:#101 当前页面采集、#111 规格面板尺码遍历、#112 规格面板打开证据与快速确认恢复。
  • 来源:用户于 2026-08-27 在 PKG110、Agent 0.9.9(提交 c782103)验收 #112 时反馈:采集失败后仍停留在规格面板,屏幕中看不到颜色和尺码;随后确认希望 Agent 在屏幕中部偏下模拟手指向下拖动两三次,使面板顶部露出,再定位颜色、尺码,并兼容“参考分类”(实际为尺码)。
  • 类型:Android Agent / PDD 订单确认形态 / 规格面板有界回顶缺陷;同时更新服务端内置规则模板的尺码别名。
  • 设计证据:恢复既有采集流程,不新增 UI、页面、导航或显示文案;无需原型。

已证实真机事实

最新任务 #82:

  • 前台始终为 com.xunmeng.pinduoduo/.activity.NewPageActivity。
  • 任务以 SPEC_PANEL_EVIDENCE_NOT_MATCHED 失败,身份确认到结束约 11.1 秒。
  • 当前页面无障碍结构(仅做内存解析,未保存或输出原始树、未截屏):
    • 144 个可见节点、30 个可点击节点、1 个 EditText、1 个 RecyclerView;
    • 唯一 RecyclerView 边界约为 [0,1052][1080,2079];
    • 有“关闭”“已选:…绿色两件套 100 建议身高90-100”、唯一减少/增加数量、支付方式说明、底部“提交订单 ¥9.82”;
    • 当前视口没有“颜色/尺码/规格”标题,也没有可辨识的颜色/尺码值;
    • “已选”文字及祖先均不可点击;
    • “提交订单”文字本身不可点击,但两层外存在全宽可点击 FrameLayout,属于禁止动作;
    • RecyclerView 内有 25 个后代、17 个可点击后代,但没有规格标题,Agent 不得猜测这些节点的含义。
  • 当前任务规则快照的尺码别名仅为 ["尺码","尺寸","套餐"],不包含用户确认的“参考分类”。

根因

  1. #112 的快速确认强证据要求底部“现在买”,实际页面为“提交订单 ¥9.82”。
  2. 非滚动确认面板要求确认动作或带选择语义的提交提示;实际“提交订单”没有“选择颜色/尺码”等文字,因此当前解析为 UNKNOWN。
  3. 虽然页面存在唯一 RecyclerView,但其中当前视口没有规格标题,现有代码不能把它确认为规格面板容器,也不会在其内部安全回顶。
  4. “已选”没有可点击路径,不能通过点击汇总恢复;“提交订单”有可点击祖先但永久禁止点击。
  5. “参考分类”未在规则尺码别名中,因此即使回顶后出现,也会被视为不支持维度。

目标

  1. 用强组合只读证据识别当前 PDD 订单确认形态,不依赖“现在买”。
  2. 在唯一确认的 RecyclerView 内模拟手指按住并向下拖动,最多 3 次,使面板回到顶部。
  3. 每次手势后重新采集节点;发现颜色/尺码标题、到达稳定边界、手势失败或页面失效时立即停止。
  4. 回顶后复用既有颜色采价、尺码只读和 #111 续页逻辑。
  5. 将精确标题“参考分类”映射为 size,并更新内置规则模板及当前默认规则配置。
  6. 永远不点击“已选”“提交订单”、支付或其可点击祖先。

非目标

  • 不修改分享、剪贴板、短链、goods_id、任务创建/身份裁决、Activity 证据或 #111 后续遍历算法。
  • 不修改数据库 schema、共享 API、Web 或规则 JSON 结构。
  • 不使用 OCR/VLM,不保存控件树、XML 或截图。
  • 不猜测没有标题归属的可点击节点,不点击相近规格。
  • 不涉及采购、地址、创建订单和支付。

实施方案

订单确认形态强证据

  1. 新增内部面板类型 ORDER_CONFIRMATION。
  2. 仅在当前 PDD 详情强证据成立时,使用以下组合确认:
    • 唯一关闭入口;
    • 选择摘要;
    • 唯一正整数数量输入框;
    • 唯一减少与增加数量按钮;
    • 支付区域;
    • 唯一位于屏幕底部、包含“提交订单/提交訂單”的受控动作容器;
    • 唯一主要、面积受限的 RecyclerView。
  3. 底部提交动作只读用于识别;解析与执行层都必须排除其文字节点和所有可点击祖先。

容器内模拟回顶

  1. 增加仅供规格确认恢复的 driver 动作,按 class + bounds 唯一重定位 RecyclerView;找不到或不唯一时失败,不回退到页面最大滚动区域。
  2. 使用真实 Android gesture,不优先使用 ACTION_SCROLL_BACKWARD:
    • X 为容器中心;
    • 起点为容器高度约 55%;
    • 终点为约 88%;
    • 全程保留在容器边界内并避开底部订单区域;
    • 时长约 550ms。
  3. 最多执行 min(3, specVerticalSwipes) 次。每次等待约 350ms 并重新 capture/parse。
  4. 出现规格标题/值后立即进入既有流程;连续结构签名稳定达到 stableEdgeReads、页面证据变化、登录/验证码/风控、容器消失或手势失败时立即停止。
  5. 达到边界仍没有规格标题时,不继续盲滑,也不点击任何未知节点;按现有不完整结果契约提交已有数据,并用具体诊断说明恢复结果。

“参考分类”尺码兼容

  1. 在服务端内置 PDD 详情规则模板的 dimensionAliases.size 增加精确别名“参考分类”。
  2. 更新当前手动采集默认规则,使之后创建的任务快照包含该别名;已有任务快照保持不可变。
  3. Android 继续按任务规则别名识别,标题“参考分类”映射为 size;若同时出现多个独立 size 标题且结构不能证明为重复区域,保持歧义/不完整,不静默猜测合并。

诊断与测试

  1. 复用现有 SPEC_PANEL_ENTRY 本地诊断,增加订单确认形态与回顶成功、稳定边界、上限、容器不可用、手势失败原因;只记录类型、次数、耗时和结构计数。
  2. 合成测试覆盖真实 #82 结构、1~3 次回顶后出现颜色与“参考分类”、首滑即出现、稳定边界、容器不唯一、手势失败、页面失效。
  3. 危险动作负向测试必须断言“已选”“提交订单”、其父容器及支付控件从未被点击。

安全边界

  • 所有手势只在强证据确认且唯一的 RecyclerView 内。
  • 坐标由容器 bounds 计算,不使用整屏固定坐标。
  • 每次手势后重新读取节点,不复用旧节点。
  • 不点击“已选”“提交订单”、其祖先、支付或未知规格。
  • 不保存或输出控件树、XML、截图、链接、goods_id、剪贴板、地址或账号信息。
  • 不创建采购任务,不修改地址,不创建订单,永久禁止支付。

验收标准

  • #82 等价结构被识别为 ORDER_CONFIRMATION,不再等待 10 秒后报 SPEC_PANEL_EVIDENCE_NOT_MATCHED。
  • 只在唯一 RecyclerView 内使用 55%→88%、约 550ms 的向下拖动,最多 3 次。
  • 每次重新采集页面;发现规格、稳定边界、容器/手势失败或离页立即停止。
  • 回顶后能定位颜色和“参考分类”,后者以 size 保存。
  • “已选”“提交订单”、提交动作祖先和支付控件点击次数始终为 0。
  • 当前默认规则的新任务快照包含“参考分类”;旧任务快照不变。
  • PKG110 复采后进入颜色/尺码遍历,按真实结果完成或部分完成,不再报当前面板证据错误。
  • 服务端 API、数据库 schema、Web、采购和订单流程不变。

验证方式

  • Android 目标测试及 cd android && .\gradlew.bat :app:testDebugUnitTest :app:assembleDebug
  • 服务端规则模板目标测试。
  • .\scripts\verify.ps1 -Component android 与受影响服务端最小验证。
  • python dev_scripts/harness.py check --strict、git diff --check。
  • 安装新 Agent 到空闲 PKG110;由人工从已授权商品页发起当前页面采集。

依赖、风险、文档

  • 前置依赖:#112 提交 c782103b6f0e65c275361daa0bab9b5aeef04764。
  • 不建议与其他规格面板解析、滚动或规则模板修改并行。
  • 风险:把普通订单页误认成规格面板。通过详情强证据、选择摘要、唯一数量组合、支付区、唯一底部提交动作和唯一 RecyclerView 联合约束。
  • 回退:还原本工单 Android/模板提交,并恢复当前默认规则别名;不涉及迁移。
  • 长期业务规则已有“只在已识别规格面板容器内有界滑动、尺码只读”的规定。本工单是内部页面变体适配,预计无长期 Wiki 变化;实施时复核后记录。

状态

方案已依据 2026-08-27 PKG110 实时结构化证据和用户确认建立,立即实施。

## 所属与来源 - 关联工单:#101 当前页面采集、#111 规格面板尺码遍历、#112 规格面板打开证据与快速确认恢复。 - 来源:用户于 2026-08-27 在 PKG110、Agent 0.9.9(提交 `c782103`)验收 #112 时反馈:采集失败后仍停留在规格面板,屏幕中看不到颜色和尺码;随后确认希望 Agent 在屏幕中部偏下模拟手指向下拖动两三次,使面板顶部露出,再定位颜色、尺码,并兼容“参考分类”(实际为尺码)。 - 类型:Android Agent / PDD 订单确认形态 / 规格面板有界回顶缺陷;同时更新服务端内置规则模板的尺码别名。 - 设计证据:恢复既有采集流程,不新增 UI、页面、导航或显示文案;无需原型。 ## 已证实真机事实 最新任务 #82: - 前台始终为 `com.xunmeng.pinduoduo/.activity.NewPageActivity`。 - 任务以 `SPEC_PANEL_EVIDENCE_NOT_MATCHED` 失败,身份确认到结束约 11.1 秒。 - 当前页面无障碍结构(仅做内存解析,未保存或输出原始树、未截屏): - 144 个可见节点、30 个可点击节点、1 个 EditText、1 个 RecyclerView; - 唯一 RecyclerView 边界约为 `[0,1052][1080,2079]`; - 有“关闭”“已选:…绿色两件套 100 建议身高90-100”、唯一减少/增加数量、支付方式说明、底部“提交订单 ¥9.82”; - 当前视口没有“颜色/尺码/规格”标题,也没有可辨识的颜色/尺码值; - “已选”文字及祖先均不可点击; - “提交订单”文字本身不可点击,但两层外存在全宽可点击 FrameLayout,属于禁止动作; - RecyclerView 内有 25 个后代、17 个可点击后代,但没有规格标题,Agent 不得猜测这些节点的含义。 - 当前任务规则快照的尺码别名仅为 `["尺码","尺寸","套餐"]`,不包含用户确认的“参考分类”。 ## 根因 1. #112 的快速确认强证据要求底部“现在买”,实际页面为“提交订单 ¥9.82”。 2. 非滚动确认面板要求确认动作或带选择语义的提交提示;实际“提交订单”没有“选择颜色/尺码”等文字,因此当前解析为 `UNKNOWN`。 3. 虽然页面存在唯一 RecyclerView,但其中当前视口没有规格标题,现有代码不能把它确认为规格面板容器,也不会在其内部安全回顶。 4. “已选”没有可点击路径,不能通过点击汇总恢复;“提交订单”有可点击祖先但永久禁止点击。 5. “参考分类”未在规则尺码别名中,因此即使回顶后出现,也会被视为不支持维度。 ## 目标 1. 用强组合只读证据识别当前 PDD 订单确认形态,不依赖“现在买”。 2. 在唯一确认的 RecyclerView 内模拟手指按住并向下拖动,最多 3 次,使面板回到顶部。 3. 每次手势后重新采集节点;发现颜色/尺码标题、到达稳定边界、手势失败或页面失效时立即停止。 4. 回顶后复用既有颜色采价、尺码只读和 #111 续页逻辑。 5. 将精确标题“参考分类”映射为 size,并更新内置规则模板及当前默认规则配置。 6. 永远不点击“已选”“提交订单”、支付或其可点击祖先。 ## 非目标 - 不修改分享、剪贴板、短链、goods_id、任务创建/身份裁决、Activity 证据或 #111 后续遍历算法。 - 不修改数据库 schema、共享 API、Web 或规则 JSON 结构。 - 不使用 OCR/VLM,不保存控件树、XML 或截图。 - 不猜测没有标题归属的可点击节点,不点击相近规格。 - 不涉及采购、地址、创建订单和支付。 ## 实施方案 ### 订单确认形态强证据 1. 新增内部面板类型 `ORDER_CONFIRMATION`。 2. 仅在当前 PDD 详情强证据成立时,使用以下组合确认: - 唯一关闭入口; - 选择摘要; - 唯一正整数数量输入框; - 唯一减少与增加数量按钮; - 支付区域; - 唯一位于屏幕底部、包含“提交订单/提交訂單”的受控动作容器; - 唯一主要、面积受限的 RecyclerView。 3. 底部提交动作只读用于识别;解析与执行层都必须排除其文字节点和所有可点击祖先。 ### 容器内模拟回顶 4. 增加仅供规格确认恢复的 driver 动作,按 class + bounds 唯一重定位 RecyclerView;找不到或不唯一时失败,不回退到页面最大滚动区域。 5. 使用真实 Android gesture,不优先使用 `ACTION_SCROLL_BACKWARD`: - X 为容器中心; - 起点为容器高度约 55%; - 终点为约 88%; - 全程保留在容器边界内并避开底部订单区域; - 时长约 550ms。 6. 最多执行 `min(3, specVerticalSwipes)` 次。每次等待约 350ms 并重新 capture/parse。 7. 出现规格标题/值后立即进入既有流程;连续结构签名稳定达到 `stableEdgeReads`、页面证据变化、登录/验证码/风控、容器消失或手势失败时立即停止。 8. 达到边界仍没有规格标题时,不继续盲滑,也不点击任何未知节点;按现有不完整结果契约提交已有数据,并用具体诊断说明恢复结果。 ### “参考分类”尺码兼容 9. 在服务端内置 PDD 详情规则模板的 `dimensionAliases.size` 增加精确别名“参考分类”。 10. 更新当前手动采集默认规则,使之后创建的任务快照包含该别名;已有任务快照保持不可变。 11. Android 继续按任务规则别名识别,标题“参考分类”映射为 `size`;若同时出现多个独立 size 标题且结构不能证明为重复区域,保持歧义/不完整,不静默猜测合并。 ### 诊断与测试 12. 复用现有 `SPEC_PANEL_ENTRY` 本地诊断,增加订单确认形态与回顶成功、稳定边界、上限、容器不可用、手势失败原因;只记录类型、次数、耗时和结构计数。 13. 合成测试覆盖真实 #82 结构、1~3 次回顶后出现颜色与“参考分类”、首滑即出现、稳定边界、容器不唯一、手势失败、页面失效。 14. 危险动作负向测试必须断言“已选”“提交订单”、其父容器及支付控件从未被点击。 ## 安全边界 - 所有手势只在强证据确认且唯一的 RecyclerView 内。 - 坐标由容器 bounds 计算,不使用整屏固定坐标。 - 每次手势后重新读取节点,不复用旧节点。 - 不点击“已选”“提交订单”、其祖先、支付或未知规格。 - 不保存或输出控件树、XML、截图、链接、goods_id、剪贴板、地址或账号信息。 - 不创建采购任务,不修改地址,不创建订单,永久禁止支付。 ## 验收标准 - [ ] #82 等价结构被识别为 `ORDER_CONFIRMATION`,不再等待 10 秒后报 `SPEC_PANEL_EVIDENCE_NOT_MATCHED`。 - [ ] 只在唯一 RecyclerView 内使用 55%→88%、约 550ms 的向下拖动,最多 3 次。 - [ ] 每次重新采集页面;发现规格、稳定边界、容器/手势失败或离页立即停止。 - [ ] 回顶后能定位颜色和“参考分类”,后者以 `size` 保存。 - [ ] “已选”“提交订单”、提交动作祖先和支付控件点击次数始终为 0。 - [ ] 当前默认规则的新任务快照包含“参考分类”;旧任务快照不变。 - [ ] PKG110 复采后进入颜色/尺码遍历,按真实结果完成或部分完成,不再报当前面板证据错误。 - [ ] 服务端 API、数据库 schema、Web、采购和订单流程不变。 ## 验证方式 - Android 目标测试及 `cd android && .\gradlew.bat :app:testDebugUnitTest :app:assembleDebug` - 服务端规则模板目标测试。 - `.\scripts\verify.ps1 -Component android` 与受影响服务端最小验证。 - `python dev_scripts/harness.py check --strict`、`git diff --check`。 - 安装新 Agent 到空闲 PKG110;由人工从已授权商品页发起当前页面采集。 ## 依赖、风险、文档 - 前置依赖:#112 提交 `c782103b6f0e65c275361daa0bab9b5aeef04764`。 - 不建议与其他规格面板解析、滚动或规则模板修改并行。 - 风险:把普通订单页误认成规格面板。通过详情强证据、选择摘要、唯一数量组合、支付区、唯一底部提交动作和唯一 RecyclerView 联合约束。 - 回退:还原本工单 Android/模板提交,并恢复当前默认规则别名;不涉及迁移。 - 长期业务规则已有“只在已识别规格面板容器内有界滑动、尺码只读”的规定。本工单是内部页面变体适配,预计无长期 Wiki 变化;实施时复核后记录。 ## 状态 方案已依据 2026-08-27 PKG110 实时结构化证据和用户确认建立,立即实施。
Author
Owner

开始实施。基于 #82 的实时结构化证据,先修改 Android 订单确认形态识别与唯一 RecyclerView 真实手势回顶,再更新内置模板和当前默认规则的 参考分类 尺码别名;不点击已选、提交订单、支付或未知节点,不保存控件树/截图。

开始实施。基于 #82 的实时结构化证据,先修改 Android 订单确认形态识别与唯一 RecyclerView 真实手势回顶,再更新内置模板和当前默认规则的 `参考分类` 尺码别名;不点击已选、提交订单、支付或未知节点,不保存控件树/截图。
Author
Owner

实施完成,待验收

实现

  • 新增严格的 PDD 订单确认规格面板识别:详情页证据、已选摘要、唯一数量控件、支付区、唯一底部“提交订单”动作及唯一主要滚动容器必须同时成立。
  • “提交订单”仅作为只读页面证据,采集逻辑不会点击它,也不会点击已选摘要或支付区。
  • 仅在已确认且每次重新定位为唯一的 RecyclerView 内,从中部(55%)向下部(88%)执行 550ms 向下拖动;最多 3 次,每次重新读取页面和滚动容器。结构丢失、容器不唯一、手势失败或稳定到达边界即停止,不退化为全页盲滑。
  • 尺码精确标题别名增加“参考分类”;内置模板及当前默认规则 pdd_app采集 均已更新。
  • 增加可区分成功、边界、次数上限、容器不可用和手势失败的结构化诊断原因。
  • Android 版本更新为 0.9.10(versionCode 23)。

数据与兼容

  • 更新前活动采集任务和采购任务均为 0。
  • 当前默认规则 id=3 的 size aliases 已更新为 ["尺码","尺寸","套餐","参考分类"],JSON_VALID=1。
  • 历史任务 #82 的 ruleSnapshot 保持原值 ["尺码","尺寸","套餐"],未被修改。
  • 无数据库结构/API/状态机变化。

验证

  • PddProductDetailCollectorTest:通过,覆盖订单确认结构、两次回顶后识别“参考分类”、最多三次、滚动容器不唯一、手势失败及危险动作不点击。
  • .\scripts\verify.ps1 -Component android:通过(Debug/Release 单元测试、Debug APK)。
  • .\scripts\verify.ps1 -Component server:通过(go test ./...、go build)。
  • python dev_scripts/harness.py check --strict:通过。
  • git diff --check:通过。
  • Wiki 在线回读 revision f3d85bf36ae7543aaa3fa1c6926e9bc0f221fb1e;一轮 sync 与一轮 sync --check 均通过。
  • PKG110 安装并启动成功:Agent 0.9.10 / versionCode 23;无障碍服务保持启用。
  • APK SHA-256:D7699FE812EA35941742BC84701971C7A8ED6262BAADE7EFDA46F28AD734D312。

提交

bc9c6375220c372e4ba053b06f3749310be37b75 — fix(#113): restore hidden PDD spec headings

未验证与验收建议

自动化未代替真实 PDD 页面验收。请在 PKG110 用同一商品重新采集,确认面板会在限定次数内回顶、识别颜色与“参考分类”尺码,并且全程不会触发提交订单。工单保持打开、待用户验收。

## 实施完成,待验收 ### 实现 - 新增严格的 PDD 订单确认规格面板识别:详情页证据、已选摘要、唯一数量控件、支付区、唯一底部“提交订单”动作及唯一主要滚动容器必须同时成立。 - “提交订单”仅作为只读页面证据,采集逻辑不会点击它,也不会点击已选摘要或支付区。 - 仅在已确认且每次重新定位为唯一的 RecyclerView 内,从中部(55%)向下部(88%)执行 550ms 向下拖动;最多 3 次,每次重新读取页面和滚动容器。结构丢失、容器不唯一、手势失败或稳定到达边界即停止,不退化为全页盲滑。 - 尺码精确标题别名增加“参考分类”;内置模板及当前默认规则 `pdd_app采集` 均已更新。 - 增加可区分成功、边界、次数上限、容器不可用和手势失败的结构化诊断原因。 - Android 版本更新为 0.9.10(versionCode 23)。 ### 数据与兼容 - 更新前活动采集任务和采购任务均为 0。 - 当前默认规则 id=3 的 size aliases 已更新为 `["尺码","尺寸","套餐","参考分类"]`,JSON_VALID=1。 - 历史任务 #82 的 ruleSnapshot 保持原值 `["尺码","尺寸","套餐"]`,未被修改。 - 无数据库结构/API/状态机变化。 ### 验证 - `PddProductDetailCollectorTest`:通过,覆盖订单确认结构、两次回顶后识别“参考分类”、最多三次、滚动容器不唯一、手势失败及危险动作不点击。 - `.\scripts\verify.ps1 -Component android`:通过(Debug/Release 单元测试、Debug APK)。 - `.\scripts\verify.ps1 -Component server`:通过(`go test ./...`、`go build`)。 - `python dev_scripts/harness.py check --strict`:通过。 - `git diff --check`:通过。 - Wiki 在线回读 revision `f3d85bf36ae7543aaa3fa1c6926e9bc0f221fb1e`;一轮 `sync` 与一轮 `sync --check` 均通过。 - PKG110 安装并启动成功:Agent 0.9.10 / versionCode 23;无障碍服务保持启用。 - APK SHA-256:`D7699FE812EA35941742BC84701971C7A8ED6262BAADE7EFDA46F28AD734D312`。 ### 提交 `bc9c6375220c372e4ba053b06f3749310be37b75` — `fix(#113): restore hidden PDD spec headings` ### 未验证与验收建议 自动化未代替真实 PDD 页面验收。请在 PKG110 用同一商品重新采集,确认面板会在限定次数内回顶、识别颜色与“参考分类”尺码,并且全程不会触发提交订单。工单保持打开、待用户验收。
Author
Owner

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:11 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#113