feat(条件判断): 比对的值支持多个(任一命中即可)
需求:`35377983067` 或 `35377983068` 都算我的号,要能一次列好几个。 - `cmp_value` 现在是**多值**:换行或 `|` 分隔,一行一个。 多个之间是 **OR**(任一命中即命中);否定式(不等于/不包含)语义是 "一个都不许出现"。**逗号刻意不当分隔符**——要比对的文本本身就常带逗号 (`抖音号:123,456`),拆了就永远匹配不上。 - 比对核心抽成 `_cmp_hit(got, op, want) -> (是否命中, 命中的那个值)`, `_text_matches` 保留布尔版(多处调用只看结果,不改签名)。 日志因此能写清人话: `采集到 '抖音号:35377983068' 包含 2 个候选值 → 符合,命中『35377983068』` 否定式不成立时则指出"因为出现了『xxx』"——排查时一眼看出是哪个值惹的。 - 行为统一(**刻意的变更**):候选值为空/全空白 = 误配 → 一律不命中。 以前"等于 + 两边都空"会返回 True(`"" == ""` 的巧合),等于选了"等于" 却没填值就永远命中、条件判断形同虚设;现在与编辑器告警、AI 草稿校验 的口径一致了("选了运算符没填值 → 永远不命中")。 - 前端:`cmp_value` 由单行输入换成**两行文本域**,标签与提示写明"可多行、 任一命中即可、逗号不是分隔符"。 - 文档:TASK_DEV.md §4.2 例子改成多号,并写明分隔符与 OR/否定语义。 自测:多值语义 15 项(换行/`|` 拆分、逗号不拆、空白清理、四种运算符的多值 OR 与否定语义、命中的是哪个值、候选全空不命中)+ 原有 38 项回归全过; `_exec_if_el` 走多值路径实测命中 then 分支、日志含候选数与命中值。
This commit is contained in:
+12
-4
@@ -244,18 +244,26 @@ from .generic import task # 触发 @register_task(当前唯一任务类型)
|
||||
`cmp_op` 取值:`等于` / `不等于` / `包含` / `不包含`(`==`/`!=`/`contains` 这类别名也认)。
|
||||
不填 = 老行为(只看元素在不在)。
|
||||
|
||||
**`cmp_value` 可以填多个值**(换行或 `|` 分隔,一行一个):多个之间是 **OR**——
|
||||
"这几个号都算我的",任一命中即命中;否定式(不等于/不包含)则是"**一个都不许出现**"。
|
||||
⚠ **逗号不是分隔符**("抖音号:123,456" 这种文本本身带逗号,拆了就永远匹配不上)。
|
||||
|
||||
例子(抓元素拿到的是 `android.widget.TextView text:抖音号:35377983067 id:com.ss.android.ugc.aweme:id/506`):
|
||||
|
||||
```json
|
||||
{"type": "if_el", "params": {
|
||||
"selector_type": "resourceId", "selector_value": "com.ss.android.ugc.aweme:id/506",
|
||||
"cmp_op": "包含", "cmp_value": "35377983067", "timeout": 3,
|
||||
"then": [{"type": "stop_self", "params": {"reason": "登录的不是目标抖音号"}}],
|
||||
"cmp_op": "包含",
|
||||
"cmp_value": "35377983067\n35377983068", // 多个号,任一命中即可
|
||||
"timeout": 3,
|
||||
"then": [{"type": "stop_self", "params": {"reason": "登录的不是我的号"}}],
|
||||
"else": []}}
|
||||
```
|
||||
|
||||
要判断"**不是**这个号"就用 `不等于`(`cmp_op=不等于` 时"界面上是别的号"会命中,正好用来抓
|
||||
"号被换/掉登录")。
|
||||
要判断"**不是**我的号"就用 `不等于`("界面上是别的号"会命中,正好用来抓"号被换/掉登录")。
|
||||
|
||||
日志会写清"采集到什么、几个候选、命中的是哪个值",例如:
|
||||
`采集到 '抖音号:35377983068' 包含 2 个候选值 → 符合,命中『35377983068』`。
|
||||
|
||||
**两条必须知道的规则**(都为了不误判):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user