diff --git a/android/README.md b/android/README.md index b47e732..09080e7 100644 --- a/android/README.md +++ b/android/README.md @@ -24,6 +24,7 @@ - 一加 PKG110 / Android 16 已验证 v2 能力上报、正式任务领取、浏览器到 PDD `NewPageActivity`、规格面板打开、颜色文字点击和逐颜色稳定价格。 - 图片型颜色卡片只点击文字节点,不点击整卡或“打开大图/查看大图”。 +- 规格值会排除“#一次选多款#”等面板功能入口,避免把操作按钮伪装成尺码和 SKU。 - 商品 `719834019024` 已采到 4 个颜色、4 个 2690 分颜色价格和 4 个结构化 SKU,缺少尺码、店铺和评价时正确提交 `completed_partial`。 - 当前仍需一个有效的颜色 + 尺码商品完成全部尺码和多维 SKU 真机复核;不以已失效或只含单维规格的商品宣称通过。 diff --git a/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PddProductDetailCollector.kt b/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PddProductDetailCollector.kt index 6a60305..10d21c4 100644 --- a/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PddProductDetailCollector.kt +++ b/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PddProductDetailCollector.kt @@ -64,7 +64,7 @@ object PddScreenParser { private val reviewPattern = Regex("(?:商品评价\\s*[((]?\\s*[0-9]+(?:\\.[0-9]+)?\\s*(?:万|亿)?|[0-9]+(?:\\.[0-9]+)?\\s*(?:万|亿)?\\s*\\+?\\s*条?评价|评价\\s*[0-9]+)") private val excludedOptionWords = listOf( "确定", "确认", "购买", "下单", "订单", "支付", "付款", "客服", "店铺", "收藏", - "已选", "请选择", "数量", "打开大图", "查看大图", + "已选", "请选择", "数量", "打开大图", "查看大图", "一次选多款", ) fun parse(snapshot: UiSnapshot, config: PddCollectorConfig, goodsId: String, evidence: PageEvidence?): ParsedPddScreen { diff --git a/android/app/src/test/java/cn/ilapage/goauto/agent/PddProductDetailCollectorTest.kt b/android/app/src/test/java/cn/ilapage/goauto/agent/PddProductDetailCollectorTest.kt index 9081462..1173f65 100644 --- a/android/app/src/test/java/cn/ilapage/goauto/agent/PddProductDetailCollectorTest.kt +++ b/android/app/src/test/java/cn/ilapage/goauto/agent/PddProductDetailCollectorTest.kt @@ -147,6 +147,29 @@ class PddProductDetailCollectorTest { assertEquals(listOf("M"), parsed.dimensions.first { it.key == "size" }.values.map { it.text }) } + @Test + fun multiSelectActionIsNotCollectedAsSizeValue() { + val snapshot = UiSnapshot( + PDD_PACKAGE, + ACTIVITY, + listOf( + node("content", "", 0, 0, 1080, 2200, resourceId = "android:id/content", className = "android.widget.FrameLayout"), + node("summary", "已选:", 20, 300, 800, 360), + node("title", "确认款式", 20, 370, 300, 410), + node("color-heading", "颜色分类", 20, 420, 300, 470), + node("gray", "灰色", 30, 500, 260, 580, clickable = true), + node("size-heading", "尺码", 20, 650, 300, 700), + node("m", "M码80-120斤", 30, 730, 300, 810, clickable = true), + node("multi", "#一次选多款#", 330, 730, 600, 810, clickable = true), + node("confirm", "确定", 0, 2000, 1080, 2150, clickable = true), + ), + ) + + val parsed = PddScreenParser.parse(snapshot, config(), GOODS_ID, evidence()) + + assertEquals(listOf("M码80-120斤"), parsed.dimensions.first { it.key == "size" }.values.map { it.text }) + } + @Test fun clickableNextHeadingContainerCannotBecomePreviousDimensionValue() { val snapshot = UiSnapshot( diff --git a/docs/00-project-profile.md b/docs/00-project-profile.md index 40cf6dd..7efa8f3 100644 --- a/docs/00-project-profile.md +++ b/docs/00-project-profile.md @@ -32,4 +32,4 @@ ## 当前阶段 -当前 MVP 的 T01~T07、T09~T22 均已完成实现、验证并由用户验收。T08(只读实时屏幕)已延期且未实施,不属于当前 MVP。T17 已在一加/ColorOS 真机完成指定设备领取、空闲领取、PDD 商品详情页到达和部分结果提交验证,不包含华为兼容。T23 正在进行 v2 一加真机验收,已验证浏览器跳转、颜色文字安全点击、逐颜色稳定价格和结构化 SKU 提交;仍需使用一个当前有效且明确包含颜色与尺码的商品完成全部尺码复核。当前实施范围仍是采集闭环;Agent 架构允许未来增加独立采购规则的创建订单能力,但付款能力禁止进入项目。 +当前 MVP 的 T01~T07、T09~T22 均已完成实现、验证并由用户验收。T08(只读实时屏幕)已延期且未实施,不属于当前 MVP。T17 已在一加/ColorOS 真机完成指定设备领取、空闲领取、PDD 商品详情页到达和部分结果提交验证,不包含华为兼容。T23 已完成 v2 一加真机实施验证,覆盖浏览器跳转、颜色文字安全点击、逐颜色稳定价格、全部可见尺码读取和颜色 × 尺码 SKU 展开,正在等待用户验收。当前实施范围仍是采集闭环;Agent 架构允许未来增加独立采购规则的创建订单能力,但付款能力禁止进入项目。 diff --git a/docs/10-real-device-acceptance.md b/docs/10-real-device-acceptance.md index 33810f8..d4f3788 100644 --- a/docs/10-real-device-acceptance.md +++ b/docs/10-real-device-acceptance.md @@ -52,10 +52,13 @@ T17 只验证 PDD 商品采集最小闭环:Agent 注册与心跳、任务串 - 当前商品只暴露出颜色维度,结果按规则以 `completed_partial` 提交,缺失为 `size`、`shopName`、`reviewCount`,没有猜测数据。 - 已验证规格标题、图片入口、窗口类名和浏览器返回值异常都会明确停止或采用受约束恢复,不点击相似候选。 -仍待验证: +二维规格复核: -- 需要一个当前有效、明确同时包含颜色和尺码的 PDD 商品 URL,复核全部尺码读取和颜色 × 尺码 SKU 展开。既有样例商品 `737116531267` 已失效并返回 PDD 首页,不能作为真实通过证据。 -- T23 在上述二维商品复核完成前保持进行中。 +- 商品 `972800403573`、任务 22 在同一台一加设备完成 `pending → running → completed_partial`,最终 Activity 为 PDD `NewPageActivity`。 +- 采到颜色“灰色、黑色”和尺码“M码80-120斤、+同色螺纹袜”,两个颜色价格均为 492 分;按当前业务规则展开为 4 个可用且完整的二维 SKU,同一颜色价格正确复制到各尺码。 +- 首次真机结果暴露出 `#一次选多款#` 是规格面板功能入口而非尺码。Agent 增加排除规则和单元测试后重置同一任务,旧结果被清空,复采结果由 6 个错误 SKU 收敛为 4 个正确 SKU。 +- 标题和“已拼1件”已提交;页面未暴露店铺名和评价数量,因此按约定保存 `completed_partial` 和 `missing=[shopName, reviewCount]`,没有猜测字段。 +- T23 所需的浏览器跳转、颜色文字点击、逐颜色价格、全部可见尺码和颜色 × 尺码展开均已有真机证据,实施验证完成,等待用户验收。 ## 支持范围 diff --git a/docs/11-pdd-detail-rule-migration-analysis.md b/docs/11-pdd-detail-rule-migration-analysis.md index 067c0a4..ae962ac 100644 --- a/docs/11-pdd-detail-rule-migration-analysis.md +++ b/docs/11-pdd-detail-rule-migration-analysis.md @@ -118,4 +118,4 @@ Agent 不限制为“只能采集”,而是注册带版本的类型化能力 ## 当前状态 -T19~T22 已验收:v2 契约、能力协商、Android 商品详情采集器、服务端内置模板和管理端安全编辑表单已经接入。T23 一加真机已跑通浏览器跳转、规格面板强识别、颜色文字安全点击、4 个颜色稳定价格和结构化 SKU 提交;当前样例只暴露一个颜色维度,仍需一个当前有效的颜色 + 尺码商品完成全部尺码复核。在该复核完成前,文档中的规则文件仍标记为 proposed,T23 保持进行中。 +T19~T22 已验收:v2 契约、能力协商、Android 商品详情采集器、服务端内置模板和管理端安全编辑表单已经接入。T23 已在一加真机跑通浏览器跳转、规格面板强识别、颜色文字安全点击、逐颜色稳定价格、全部可见尺码读取和颜色 × 尺码 SKU 展开。任务 22 使用商品 `972800403573` 得到 2 个颜色、2 个尺码、2 个颜色价格和 4 个完整可用 SKU;同时通过真机问题修正排除了 `#一次选多款#` 这类功能入口。T23 实施验证完成,等待用户验收。