@qing3a/flow-rpa-engine 0.5.2 → 0.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/behavior.d.ts +25 -6
- package/dist/behavior.js +51 -7
- package/dist/behavior.js.map +1 -1
- package/dist/cdp/city-switch.d.ts +63 -0
- package/dist/cdp/city-switch.js +276 -0
- package/dist/cdp/city-switch.js.map +1 -0
- package/dist/cdp/page.d.ts +22 -3
- package/dist/cdp/page.js +282 -42
- package/dist/cdp/page.js.map +1 -1
- package/dist/executor.d.ts +39 -4
- package/dist/executor.js +187 -19
- package/dist/executor.js.map +1 -1
- package/dist/mask.d.ts +4 -0
- package/dist/mask.js +5 -1
- package/dist/mask.js.map +1 -1
- package/dist/record.d.ts +24 -3
- package/dist/record.js +12 -0
- package/dist/record.js.map +1 -1
- package/dist/region.d.ts +30 -0
- package/dist/region.js +39 -0
- package/dist/region.js.map +1 -0
- package/dist/validate.js +23 -0
- package/dist/validate.js.map +1 -1
- package/package.json +2 -1
package/dist/behavior.d.ts
CHANGED
|
@@ -88,8 +88,11 @@ export interface AnchorAgg {
|
|
|
88
88
|
export declare function anchorKey(fp: HitFingerprint): string;
|
|
89
89
|
/** P3 锚点聚合上限(每 step|action 保留的锚点数;防无限增长) */
|
|
90
90
|
export declare const PROFILE_MAX_ANCHORS = 5;
|
|
91
|
-
/**
|
|
92
|
-
|
|
91
|
+
/**
|
|
92
|
+
* 语义锚点:最少一致出现次数(机器安全门;T014 P1-4 按监督层预审 ④ 上调为 ≥3——
|
|
93
|
+
* seen <3 不参与寻址;与区域置信度门槛 REGION_MIN_SEEN 同值)。
|
|
94
|
+
*/
|
|
95
|
+
export declare const ANCHOR_MIN_COUNT = 3;
|
|
93
96
|
/** 每次动作最多尝试的锚点选择器数(保底降级链长度) */
|
|
94
97
|
export declare const ANCHOR_MAX_SELECTORS = 4;
|
|
95
98
|
/**
|
|
@@ -100,9 +103,11 @@ export declare function mergeAnchor(anchors: AnchorAgg[], fp: HitFingerprint, at
|
|
|
100
103
|
/**
|
|
101
104
|
* P3 生成语义锚点选择器(纯函数,可单测):count ≥ ANCHOR_MIN_COUNT 的锚点,
|
|
102
105
|
* 按 count 降序生成 getBySels 兼容选择器(text: 精确文本 / placeholder / aria-label / name)。
|
|
103
|
-
*
|
|
106
|
+
* T014 P1-4:region 约束——传入 region 时只复用同区域锚点(跨区域不误用;HitFingerprint.region 已预留);
|
|
107
|
+
* region 缺省(未知/无规则流程)→ 全部锚点(向后兼容)。返回空数组 = 档案不足(不增强,走原错误路径)。
|
|
108
|
+
* 引擎零业务逻辑——只做定位框架。
|
|
104
109
|
*/
|
|
105
|
-
export declare function buildAnchorSelectors(anchors: AnchorAgg[] | undefined): string[];
|
|
110
|
+
export declare function buildAnchorSelectors(anchors: AnchorAgg[] | undefined, region?: string): string[];
|
|
106
111
|
/** 简易文本哈希(FNV-1a 32 位;仅用于变化检测,非加密) */
|
|
107
112
|
export declare function textHash(s: string): string;
|
|
108
113
|
/** 路由键(host+path,忽略 query/hash) */
|
|
@@ -163,6 +168,13 @@ export declare function identifyRegionFromFeatures(rules: RegionRule[], features
|
|
|
163
168
|
label: string;
|
|
164
169
|
ruleId: string;
|
|
165
170
|
} | null;
|
|
171
|
+
/**
|
|
172
|
+
* T014 阶段 2:区域档案多候选仲裁(seen 统计 + 规则顺序 + 置信度)——
|
|
173
|
+
* 把规则按「区域 seen 置信度」降序重排(seen 来自行为档案 regions 统计;同 seen 保持
|
|
174
|
+
* 原规则顺序——稳定排序),供 region: 表达式 / describeHit 区域标注仲裁:同一元素命中
|
|
175
|
+
* 多条规则时,高置信区域优先。引擎零业务逻辑——置信度数据来自档案,规则仍随流程包。
|
|
176
|
+
*/
|
|
177
|
+
export declare function rankRegionRules(rules: RegionRule[], seen: Record<string, number>): RegionRule[];
|
|
166
178
|
/** 行为档案:区域快照(P2:动作目标所在区域的语义描述) */
|
|
167
179
|
export interface RegionSnapshot {
|
|
168
180
|
/** 区域标签(如「详情区」/「搜索区」;无规则命中 → undefined) */
|
|
@@ -255,12 +267,19 @@ export declare class BehaviorArchive {
|
|
|
255
267
|
*/
|
|
256
268
|
predictTimeout(flowId: string, stepId: string, actionType: string, defaultMs: number): Promise<number | undefined>;
|
|
257
269
|
/**
|
|
258
|
-
* 增强层·语义锚点(docs/BEHAVIOR-SPACE-V2.md P3):
|
|
270
|
+
* 增强层·语义锚点(docs/BEHAVIOR-SPACE-V2.md P3;T014 P1-4 区域约束 + seen≥3):
|
|
259
271
|
* 读状态档案该步骤的命中元素指纹,生成替代选择器(选择器失效时的失败恢复备选)。
|
|
272
|
+
* region 可选:提供时只复用同区域锚点(跨区域不误用);缺省 → 全部锚点(无规则流程向后兼容)。
|
|
260
273
|
* 建议级(铁律1):count < ANCHOR_MIN_COUNT → 返回空数组(档案不足,不增强,走原错误);
|
|
261
274
|
* 无该步骤记录 → 返回空数组(完全不增强)。主流程不依赖(铁律2/3)。
|
|
262
275
|
*/
|
|
263
|
-
anchorSelectors(flowId: string, stepId: string, actionType: string): Promise<string[]>;
|
|
276
|
+
anchorSelectors(flowId: string, stepId: string, actionType: string, region?: string): Promise<string[]>;
|
|
277
|
+
/**
|
|
278
|
+
* T014 阶段 2:区域档案多候选仲裁——按档案 regions seen 置信度重排规则(稳定排序,同 seen 保持
|
|
279
|
+
* 原规则顺序),返回 JSON 供 setRegionRules 注入(region: 表达式 / describeHit 仲裁用)。
|
|
280
|
+
* 无档案(首跑)→ 原规则顺序(向后兼容)。旁路:档案读失败 → 原顺序。
|
|
281
|
+
*/
|
|
282
|
+
rankedRegionRules(flowId: string, rulesJson: string): Promise<string>;
|
|
264
283
|
}
|
|
265
284
|
/** 预测性超时:最少样本数(机器安全门·门1 复用:≥3 才可信) */
|
|
266
285
|
export declare const PREDICT_MIN_SAMPLES = 3;
|
package/dist/behavior.js
CHANGED
|
@@ -8,8 +8,11 @@ export function anchorKey(fp) {
|
|
|
8
8
|
}
|
|
9
9
|
/** P3 锚点聚合上限(每 step|action 保留的锚点数;防无限增长) */
|
|
10
10
|
export const PROFILE_MAX_ANCHORS = 5;
|
|
11
|
-
/**
|
|
12
|
-
|
|
11
|
+
/**
|
|
12
|
+
* 语义锚点:最少一致出现次数(机器安全门;T014 P1-4 按监督层预审 ④ 上调为 ≥3——
|
|
13
|
+
* seen <3 不参与寻址;与区域置信度门槛 REGION_MIN_SEEN 同值)。
|
|
14
|
+
*/
|
|
15
|
+
export const ANCHOR_MIN_COUNT = 3;
|
|
13
16
|
/** 每次动作最多尝试的锚点选择器数(保底降级链长度) */
|
|
14
17
|
export const ANCHOR_MAX_SELECTORS = 4;
|
|
15
18
|
/**
|
|
@@ -35,13 +38,16 @@ function cssEscapeAttr(v) {
|
|
|
35
38
|
/**
|
|
36
39
|
* P3 生成语义锚点选择器(纯函数,可单测):count ≥ ANCHOR_MIN_COUNT 的锚点,
|
|
37
40
|
* 按 count 降序生成 getBySels 兼容选择器(text: 精确文本 / placeholder / aria-label / name)。
|
|
38
|
-
*
|
|
41
|
+
* T014 P1-4:region 约束——传入 region 时只复用同区域锚点(跨区域不误用;HitFingerprint.region 已预留);
|
|
42
|
+
* region 缺省(未知/无规则流程)→ 全部锚点(向后兼容)。返回空数组 = 档案不足(不增强,走原错误路径)。
|
|
43
|
+
* 引擎零业务逻辑——只做定位框架。
|
|
39
44
|
*/
|
|
40
|
-
export function buildAnchorSelectors(anchors) {
|
|
45
|
+
export function buildAnchorSelectors(anchors, region) {
|
|
41
46
|
if (!anchors)
|
|
42
47
|
return [];
|
|
43
48
|
const ranked = anchors
|
|
44
49
|
.filter((a) => a.count >= ANCHOR_MIN_COUNT)
|
|
50
|
+
.filter((a) => (region !== undefined ? a.fp.region === region : true))
|
|
45
51
|
.sort((a, b) => b.count - a.count);
|
|
46
52
|
const out = [];
|
|
47
53
|
for (const a of ranked) {
|
|
@@ -121,6 +127,15 @@ export function identifyRegionFromFeatures(rules, features) {
|
|
|
121
127
|
}
|
|
122
128
|
return null;
|
|
123
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* T014 阶段 2:区域档案多候选仲裁(seen 统计 + 规则顺序 + 置信度)——
|
|
132
|
+
* 把规则按「区域 seen 置信度」降序重排(seen 来自行为档案 regions 统计;同 seen 保持
|
|
133
|
+
* 原规则顺序——稳定排序),供 region: 表达式 / describeHit 区域标注仲裁:同一元素命中
|
|
134
|
+
* 多条规则时,高置信区域优先。引擎零业务逻辑——置信度数据来自档案,规则仍随流程包。
|
|
135
|
+
*/
|
|
136
|
+
export function rankRegionRules(rules, seen) {
|
|
137
|
+
return [...rules].sort((a, b) => (seen[b.label] ?? 0) - (seen[a.label] ?? 0));
|
|
138
|
+
}
|
|
124
139
|
/** 当前 profile schema 版本(升级时 bump + 迁移) */
|
|
125
140
|
export const PROFILE_SCHEMA_VERSION = 1;
|
|
126
141
|
/** 状态档案:每步骤保留的最大耗时样本数(防无限增长;超了丢最旧) */
|
|
@@ -335,14 +350,43 @@ export class BehaviorArchive {
|
|
|
335
350
|
return suggested > defaultMs ? suggested : 0;
|
|
336
351
|
}
|
|
337
352
|
/**
|
|
338
|
-
* 增强层·语义锚点(docs/BEHAVIOR-SPACE-V2.md P3):
|
|
353
|
+
* 增强层·语义锚点(docs/BEHAVIOR-SPACE-V2.md P3;T014 P1-4 区域约束 + seen≥3):
|
|
339
354
|
* 读状态档案该步骤的命中元素指纹,生成替代选择器(选择器失效时的失败恢复备选)。
|
|
355
|
+
* region 可选:提供时只复用同区域锚点(跨区域不误用);缺省 → 全部锚点(无规则流程向后兼容)。
|
|
340
356
|
* 建议级(铁律1):count < ANCHOR_MIN_COUNT → 返回空数组(档案不足,不增强,走原错误);
|
|
341
357
|
* 无该步骤记录 → 返回空数组(完全不增强)。主流程不依赖(铁律2/3)。
|
|
342
358
|
*/
|
|
343
|
-
async anchorSelectors(flowId, stepId, actionType) {
|
|
359
|
+
async anchorSelectors(flowId, stepId, actionType, region) {
|
|
344
360
|
const prof = await this.mutex.run(() => this.profileCache.get(flowId) ?? this.loadProfile(flowId));
|
|
345
|
-
return buildAnchorSelectors(prof?.steps[stepId]?.[actionType]?.anchors);
|
|
361
|
+
return buildAnchorSelectors(prof?.steps[stepId]?.[actionType]?.anchors, region);
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* T014 阶段 2:区域档案多候选仲裁——按档案 regions seen 置信度重排规则(稳定排序,同 seen 保持
|
|
365
|
+
* 原规则顺序),返回 JSON 供 setRegionRules 注入(region: 表达式 / describeHit 仲裁用)。
|
|
366
|
+
* 无档案(首跑)→ 原规则顺序(向后兼容)。旁路:档案读失败 → 原顺序。
|
|
367
|
+
*/
|
|
368
|
+
async rankedRegionRules(flowId, rulesJson) {
|
|
369
|
+
let rules = [];
|
|
370
|
+
try {
|
|
371
|
+
rules = JSON.parse(rulesJson);
|
|
372
|
+
}
|
|
373
|
+
catch {
|
|
374
|
+
return rulesJson;
|
|
375
|
+
}
|
|
376
|
+
if (!Array.isArray(rules) || rules.length === 0)
|
|
377
|
+
return rulesJson;
|
|
378
|
+
try {
|
|
379
|
+
const prof = await this.mutex.run(() => this.profileCache.get(flowId) ?? this.loadProfile(flowId));
|
|
380
|
+
const seen = {};
|
|
381
|
+
for (const [label, s] of Object.entries(prof?.regions ?? {})) {
|
|
382
|
+
if (typeof s?.seen === 'number')
|
|
383
|
+
seen[label] = s.seen;
|
|
384
|
+
}
|
|
385
|
+
return JSON.stringify(rankRegionRules(rules, seen));
|
|
386
|
+
}
|
|
387
|
+
catch {
|
|
388
|
+
return rulesJson;
|
|
389
|
+
}
|
|
346
390
|
}
|
|
347
391
|
}
|
|
348
392
|
/** 预测性超时:最少样本数(机器安全门·门1 复用:≥3 才可信) */
|
package/dist/behavior.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../src/behavior.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../src/behavior.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T012 P0-1:地区切换「界面操作优先」——zhipin 城市选择器 UI 路径(URL 参数仅兜底)。
|
|
3
|
+
*
|
|
4
|
+
* 原则(ARCHITECTURE #13):页面交互拟人化优先,CDP/JS 注入仅作失败兜底;导航可靠性优先——
|
|
5
|
+
* UI 任何一步失败都返回 false,由调用方回退 URL 参数导航(绝不因拟人引入新失败)。
|
|
6
|
+
*
|
|
7
|
+
* 本模块 = 页面适配层(与 DOM_SOURCE 同类:机械的 DOM 结构适配 + 平台静态数据,非业务逻辑)。
|
|
8
|
+
* 引擎零业务逻辑红线不受影响:城市 code↔名称表是 zhipin 页面的静态适配数据(等价选择器),
|
|
9
|
+
* 业务编排(何时/哪个城市)仍在 flow.json 与 Agent 侧。
|
|
10
|
+
*
|
|
11
|
+
* DOM 结构(2026-08-29 实探,probe-city-selector.mjs):
|
|
12
|
+
* - 城市按钮:`.city-label`(文本=当前城市)
|
|
13
|
+
* - 城市对话框:`.dialog-wrap.city-select-dialog`(teleport 到 body)
|
|
14
|
+
* - 字母 tab:`ul.city-char-list > li`(热门城市/ABCDE/FGHJ/KLMN/PQRST/WXYZ)
|
|
15
|
+
* - 热门城市列表:`ul.city-list-hot > li`(文本=城市名)
|
|
16
|
+
* - 字母城市列表:`ul.city-list-select > li`(每字母一行,城市名为文本行,\n 分隔)
|
|
17
|
+
* - 选择后 zhipin 把 `city=<code>` 写进 URL → 用 URL 校验 UI 是否真生效(自校验)。
|
|
18
|
+
*/
|
|
19
|
+
/** zhipin 城市 code→名称(紧凑表:UI 选择器按名称点选;缺省 → 回退 URL)。
|
|
20
|
+
* 自校验机制:UI 点选后 URL 必须含目标 code(zhipin 自身写入),不匹配即回退——
|
|
21
|
+
* 即使映射条目有误也安全降级为 URL 导航,不会引入新失败。
|
|
22
|
+
* 2026-08-29 实跑核验 39/39(URL 参数法:?city=<code> → 城市标签一致)。 */
|
|
23
|
+
export declare const ZHIPIN_CITY_NAMES: Record<string, string>;
|
|
24
|
+
/** 从 URL 提取 zhipin 城市 code(query `city` 参数;数字形态才认,防误读其它参数) */
|
|
25
|
+
export declare function cityCodeOfUrl(url: string): string | null;
|
|
26
|
+
/** 是否 zhipin 主机(www.zhipin.com / zhipin.com 子域) */
|
|
27
|
+
export declare function isZhipinHost(url: string): boolean;
|
|
28
|
+
/** 字母 tab 分组(zhipin 拼音首字母分组) */
|
|
29
|
+
export declare const CITY_LETTER_TABS: readonly ["ABCDE", "FGHJ", "KLMN", "PQRST", "WXYZ"];
|
|
30
|
+
/**
|
|
31
|
+
* 城市切换 UI 页面接口(与 CDP 解耦——mock 页面可确定性测试「城市切换 UI 路径」;
|
|
32
|
+
* CdpPage 用真实 CDP client + human 实现,runner mock 基建不参与——本接口即 mock 面)。
|
|
33
|
+
*/
|
|
34
|
+
export interface CitySwitchPage {
|
|
35
|
+
/** 页面求值(__rpaDom 城市辅助表达式;mock 返回脚本化结果) */
|
|
36
|
+
evaluate(expr: string): Promise<unknown>;
|
|
37
|
+
/** 拟人点击坐标(mock 记录调用序列断言) */
|
|
38
|
+
clickAt(x: number, y: number): Promise<void>;
|
|
39
|
+
/** 当前 URL */
|
|
40
|
+
currentUrl(): Promise<string>;
|
|
41
|
+
/** 等待(mock 可空转) */
|
|
42
|
+
sleep(ms: number): Promise<void>;
|
|
43
|
+
/** 成功日志(mock 可收集断言) */
|
|
44
|
+
log(msg: string): void;
|
|
45
|
+
}
|
|
46
|
+
export interface CitySwitchTimeouts {
|
|
47
|
+
idleMs?: number;
|
|
48
|
+
dialogOpenMs?: number;
|
|
49
|
+
urlVerifyMs?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* T012 P0-1 城市切换 UI 决策流(BATCH-D:抽为接口驱动,mock 确定性回归):
|
|
53
|
+
* 非 zhipin / 已是目标城市 → 早退;对话框 idle → 拟人点城市标签 → 对话框打开 →
|
|
54
|
+
* 热门城市 li / 逐字母 tab 定位城市名文本位 → 拟人点城市项 → URL 含目标 code 自校验。
|
|
55
|
+
* 任一步失败/超时 → false(调用方回退 URL 参数导航;导航可靠性优先,不引入新失败)。
|
|
56
|
+
*/
|
|
57
|
+
export declare function runCitySwitchUi(code: string, name: string, page: CitySwitchPage, timeouts?: CitySwitchTimeouts): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* 城市对话框 DOM 辅助(注入到 window.__rpaDom;幂等:已有 cityLabelPos 则跳过)。
|
|
60
|
+
* 全部只读求值 + 返回点击坐标,由引擎侧 human 层做真实拟人点击(轨迹/节奏)。
|
|
61
|
+
* 返回 null 表示该步骤不适用(选择器缺失/对话框未开)→ 调用方回退 URL。
|
|
62
|
+
*/
|
|
63
|
+
export declare const CITY_SWITCH_SOURCE = "\nwindow.__rpaDom = window.__rpaDom || {};\nObject.assign(window.__rpaDom, {\n // \u57CE\u5E02\u6807\u7B7E\uFF08\u5F53\u524D\u57CE\u5E02\u6309\u94AE\uFF09\u4E2D\u5FC3\u70B9\uFF1B\u65E0 \u2192 null\n cityLabelPos: function() {\n const el = document.querySelector('.city-label') || document.querySelector('[class*=\"city-label\"]');\n if (!el) return null;\n const r = el.getBoundingClientRect();\n if (r.width <= 0 || r.height <= 0) return null;\n return { x: Math.round(r.left + r.width / 2), y: Math.round(r.top + r.height / 2) };\n },\n // \u57CE\u5E02\u5BF9\u8BDD\u6846\u662F\u5426\u5DF2\u6253\u5F00\uFF08\u6392\u9664 v-leave \u5173\u95ED\u4E2D\uFF09\n cityDialogVisible: function() {\n const d = document.querySelector('.city-select-dialog');\n if (!d) return false;\n const s = getComputedStyle(d);\n const r = d.getBoundingClientRect();\n if (s.display === 'none' || s.visibility === 'hidden' || r.width <= 0) return false;\n if ((d.className || '').toString().includes('v-leave')) return false;\n return true;\n },\n // \u5BF9\u8BDD\u6846\u6B8B\u7559\u6E05\u7406\u5B8C\u6210\uFF08\u65E0\u6253\u5F00/\u5173\u95ED\u4E2D\u7684\u5BF9\u8BDD\u6846\uFF1B\u9632\u6B62\u65E7 mask \u622A\u83B7\u70B9\u51FB\uFF09\n cityDialogIdle: function() {\n const ds = Array.from(document.querySelectorAll('.city-select-dialog'));\n for (const d of ds) {\n const s = getComputedStyle(d);\n const r = d.getBoundingClientRect();\n if (s.display !== 'none' && s.visibility !== 'hidden' && r.width > 0) return false;\n if ((d.className || '').toString().includes('v-leave')) return false;\n }\n return true;\n },\n // \u70ED\u95E8\u57CE\u5E02 tab \u76F4\u63A5 li\uFF1A\u6587\u672C=\u57CE\u5E02\u540D \u2192 \u4E2D\u5FC3\u70B9\n cityHotItem: function(name) {\n const dlg = document.querySelector('.city-select-dialog');\n if (!dlg) return null;\n const li = Array.from(dlg.querySelectorAll('ul.city-list-hot li')).find((el) => (el.innerText || '').trim() === String(name));\n if (!li) return null;\n const r = li.getBoundingClientRect();\n if (r.width <= 0 || r.height <= 0) return null;\n return { x: Math.round(r.left + r.width / 2), y: Math.round(r.top + r.height / 2) };\n },\n // \u5B57\u6BCD tab \u4F4D\u7F6E\uFF08ABCDE/FGHJ/KLMN/PQRST/WXYZ\uFF09\n cityLetterTabPos: function(letter) {\n const tab = Array.from(document.querySelectorAll('.city-select-dialog ul.city-char-list li')).find((el) => (el.innerText || '').trim() === String(letter));\n if (!tab) return null;\n const r = tab.getBoundingClientRect();\n if (r.width <= 0 || r.height <= 0) return null;\n return { x: Math.round(r.left + r.width / 2), y: Math.round(r.top + r.height / 2) };\n },\n // \u5B57\u6BCD\u7EC4\u5217\u8868\u5185\u57CE\u5E02\u540D \u2192 \u6587\u672C\u4F4D\u70B9\u51FB\u70B9\uFF08\u5185\u90E8\u6EDA\u52A8\u5230\u53EF\u89C1\u540E\u91CD\u53D6\u5750\u6807\uFF09\n cityGroupItem: function(name) {\n const dlg = document.querySelector('.city-select-dialog');\n if (!dlg) return null;\n const needle = String(name);\n const group = Array.from(dlg.querySelectorAll('ul.city-list-select li')).find((el) => {\n const lines = (el.innerText || '').split('\\n').map((s) => s.trim());\n return lines.includes(needle);\n });\n if (!group) return null;\n // \u627E\u5BF9\u8BDD\u6846\u5185\u53EF\u6EDA\u52A8\u5BB9\u5668\uFF0C\u6EDA\u5230\u76EE\u6807\u53EF\u89C1\uFF08\u5BF9\u8BDD\u6846\u5217\u8868\u8D85\u51FA\u89C6\u53E3\u65F6\u6587\u672C\u4F4D\u5728\u5C4F\u5916\uFF09\n let sc = group.parentElement;\n while (sc && sc !== dlg) {\n const s = getComputedStyle(sc);\n if (/(auto|scroll)/.test(s.overflowY)) break;\n sc = sc.parentElement;\n }\n const pos = cityTextPos(group, needle);\n if (!pos) return null;\n if (sc && sc !== dlg) {\n const sr = sc.getBoundingClientRect();\n if (pos.y < sr.top + 40 || pos.y > sr.bottom - 40) {\n sc.scrollTop += pos.y - (sr.top + sr.height / 2);\n }\n }\n const pos2 = cityTextPos(group, needle);\n return pos2 ? { x: pos2.x, y: pos2.y } : null;\n }\n});\nfunction cityTextPos(el, needle) {\n const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);\n let node;\n while ((node = walker.nextNode())) {\n const idx = node.nodeValue.indexOf(needle);\n if (idx >= 0) {\n const range = document.createRange();\n range.setStart(node, idx);\n range.setEnd(node, idx + needle.length);\n const r = range.getBoundingClientRect();\n if (r.width > 0 || r.height > 0) return { x: Math.round(r.left + r.width / 2), y: Math.round(r.top + r.height / 2) };\n }\n }\n return null;\n}\ntrue\n";
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T012 P0-1:地区切换「界面操作优先」——zhipin 城市选择器 UI 路径(URL 参数仅兜底)。
|
|
3
|
+
*
|
|
4
|
+
* 原则(ARCHITECTURE #13):页面交互拟人化优先,CDP/JS 注入仅作失败兜底;导航可靠性优先——
|
|
5
|
+
* UI 任何一步失败都返回 false,由调用方回退 URL 参数导航(绝不因拟人引入新失败)。
|
|
6
|
+
*
|
|
7
|
+
* 本模块 = 页面适配层(与 DOM_SOURCE 同类:机械的 DOM 结构适配 + 平台静态数据,非业务逻辑)。
|
|
8
|
+
* 引擎零业务逻辑红线不受影响:城市 code↔名称表是 zhipin 页面的静态适配数据(等价选择器),
|
|
9
|
+
* 业务编排(何时/哪个城市)仍在 flow.json 与 Agent 侧。
|
|
10
|
+
*
|
|
11
|
+
* DOM 结构(2026-08-29 实探,probe-city-selector.mjs):
|
|
12
|
+
* - 城市按钮:`.city-label`(文本=当前城市)
|
|
13
|
+
* - 城市对话框:`.dialog-wrap.city-select-dialog`(teleport 到 body)
|
|
14
|
+
* - 字母 tab:`ul.city-char-list > li`(热门城市/ABCDE/FGHJ/KLMN/PQRST/WXYZ)
|
|
15
|
+
* - 热门城市列表:`ul.city-list-hot > li`(文本=城市名)
|
|
16
|
+
* - 字母城市列表:`ul.city-list-select > li`(每字母一行,城市名为文本行,\n 分隔)
|
|
17
|
+
* - 选择后 zhipin 把 `city=<code>` 写进 URL → 用 URL 校验 UI 是否真生效(自校验)。
|
|
18
|
+
*/
|
|
19
|
+
/** zhipin 城市 code→名称(紧凑表:UI 选择器按名称点选;缺省 → 回退 URL)。
|
|
20
|
+
* 自校验机制:UI 点选后 URL 必须含目标 code(zhipin 自身写入),不匹配即回退——
|
|
21
|
+
* 即使映射条目有误也安全降级为 URL 导航,不会引入新失败。
|
|
22
|
+
* 2026-08-29 实跑核验 39/39(URL 参数法:?city=<code> → 城市标签一致)。 */
|
|
23
|
+
export const ZHIPIN_CITY_NAMES = {
|
|
24
|
+
'101010100': '北京',
|
|
25
|
+
'101020100': '上海',
|
|
26
|
+
'101030100': '天津',
|
|
27
|
+
'101040100': '重庆',
|
|
28
|
+
'101280100': '广州',
|
|
29
|
+
'101280600': '深圳',
|
|
30
|
+
'101280700': '珠海',
|
|
31
|
+
'101280800': '佛山',
|
|
32
|
+
'101281600': '东莞',
|
|
33
|
+
'101281700': '中山',
|
|
34
|
+
'101280300': '惠州',
|
|
35
|
+
'101210100': '杭州',
|
|
36
|
+
'101190100': '南京',
|
|
37
|
+
'101190400': '苏州',
|
|
38
|
+
'101190200': '无锡',
|
|
39
|
+
'101200100': '武汉',
|
|
40
|
+
'101270100': '成都',
|
|
41
|
+
'101110100': '西安',
|
|
42
|
+
'101250100': '长沙',
|
|
43
|
+
'101180100': '郑州',
|
|
44
|
+
'101120100': '济南',
|
|
45
|
+
'101120200': '青岛',
|
|
46
|
+
'101230100': '福州',
|
|
47
|
+
'101230200': '厦门',
|
|
48
|
+
'101220100': '合肥',
|
|
49
|
+
'101210400': '宁波',
|
|
50
|
+
'101290100': '昆明',
|
|
51
|
+
'101070100': '沈阳',
|
|
52
|
+
'101070200': '大连',
|
|
53
|
+
'101050100': '哈尔滨',
|
|
54
|
+
'101060100': '长春',
|
|
55
|
+
'101090100': '石家庄',
|
|
56
|
+
'101100100': '太原',
|
|
57
|
+
'101240100': '南昌',
|
|
58
|
+
'101300100': '南宁',
|
|
59
|
+
'101260100': '贵阳',
|
|
60
|
+
'101310100': '海口',
|
|
61
|
+
'101160100': '兰州',
|
|
62
|
+
'101130100': '乌鲁木齐',
|
|
63
|
+
};
|
|
64
|
+
/** 从 URL 提取 zhipin 城市 code(query `city` 参数;数字形态才认,防误读其它参数) */
|
|
65
|
+
export function cityCodeOfUrl(url) {
|
|
66
|
+
try {
|
|
67
|
+
const u = new URL(url);
|
|
68
|
+
const c = u.searchParams.get('city');
|
|
69
|
+
if (c && /^[1-9]\d{5,9}$/.test(c))
|
|
70
|
+
return c;
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** 是否 zhipin 主机(www.zhipin.com / zhipin.com 子域) */
|
|
78
|
+
export function isZhipinHost(url) {
|
|
79
|
+
try {
|
|
80
|
+
const h = new URL(url).hostname;
|
|
81
|
+
return h === 'zhipin.com' || h.endsWith('.zhipin.com');
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** 字母 tab 分组(zhipin 拼音首字母分组) */
|
|
88
|
+
export const CITY_LETTER_TABS = ['ABCDE', 'FGHJ', 'KLMN', 'PQRST', 'WXYZ'];
|
|
89
|
+
/**
|
|
90
|
+
* T012 P0-1 城市切换 UI 决策流(BATCH-D:抽为接口驱动,mock 确定性回归):
|
|
91
|
+
* 非 zhipin / 已是目标城市 → 早退;对话框 idle → 拟人点城市标签 → 对话框打开 →
|
|
92
|
+
* 热门城市 li / 逐字母 tab 定位城市名文本位 → 拟人点城市项 → URL 含目标 code 自校验。
|
|
93
|
+
* 任一步失败/超时 → false(调用方回退 URL 参数导航;导航可靠性优先,不引入新失败)。
|
|
94
|
+
*/
|
|
95
|
+
export async function runCitySwitchUi(code, name, page, timeouts) {
|
|
96
|
+
const idleMs = timeouts?.idleMs ?? 1500;
|
|
97
|
+
const dialogOpenMs = timeouts?.dialogOpenMs ?? 3000;
|
|
98
|
+
const urlVerifyMs = timeouts?.urlVerifyMs ?? 6000;
|
|
99
|
+
const cur = await page.currentUrl().catch(() => '');
|
|
100
|
+
// 非 zhipin 页面无法界面操作 → 回退
|
|
101
|
+
if (!isZhipinHost(cur))
|
|
102
|
+
return false;
|
|
103
|
+
// 已是目标城市(URL 已带相同 city)→ 无需切换/导航
|
|
104
|
+
if (cityCodeOfUrl(cur) === code)
|
|
105
|
+
return true;
|
|
106
|
+
// 残留对话框清理(旧 mask 会截获点击)
|
|
107
|
+
const idle = await waitEvalTrue(page, 'window.__rpaDom.cityDialogIdle()', idleMs);
|
|
108
|
+
if (!idle)
|
|
109
|
+
return false;
|
|
110
|
+
// 拟人点击城市标签打开对话框
|
|
111
|
+
const labelPos = await evalPoint(page, 'window.__rpaDom.cityLabelPos()');
|
|
112
|
+
if (!labelPos)
|
|
113
|
+
return false;
|
|
114
|
+
await page.clickAt(labelPos.x, labelPos.y);
|
|
115
|
+
const open = await waitEvalTrue(page, 'window.__rpaDom.cityDialogVisible()', dialogOpenMs);
|
|
116
|
+
if (!open)
|
|
117
|
+
return false;
|
|
118
|
+
// 热门城市 tab 直接 li
|
|
119
|
+
let hit = await evalPoint(page, `window.__rpaDom.cityHotItem(${JSON.stringify(name)})`);
|
|
120
|
+
// 逐字母 tab(城市名按拼音首字母分组)
|
|
121
|
+
if (!hit) {
|
|
122
|
+
for (const letter of CITY_LETTER_TABS) {
|
|
123
|
+
const tabPos = await evalPoint(page, `window.__rpaDom.cityLetterTabPos(${JSON.stringify(letter)})`);
|
|
124
|
+
if (!tabPos)
|
|
125
|
+
continue;
|
|
126
|
+
await page.clickAt(tabPos.x, tabPos.y);
|
|
127
|
+
await page.sleep(500);
|
|
128
|
+
hit = await evalPoint(page, `window.__rpaDom.cityGroupItem(${JSON.stringify(name)})`);
|
|
129
|
+
if (hit)
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (!hit)
|
|
134
|
+
return false;
|
|
135
|
+
// 拟人点击城市项
|
|
136
|
+
await page.clickAt(hit.x, hit.y);
|
|
137
|
+
// 自校验:URL 必须含目标 city code(zhipin 选择后写入)——不匹配即回退
|
|
138
|
+
const ok = await waitForUrlCity(page, code, urlVerifyMs);
|
|
139
|
+
if (ok)
|
|
140
|
+
page.log(`地区切换(界面操作): ${name} (${code})`);
|
|
141
|
+
return ok;
|
|
142
|
+
}
|
|
143
|
+
/** 求值并规范化坐标点(非 {x,y} → null) */
|
|
144
|
+
async function evalPoint(page, expr) {
|
|
145
|
+
const v = await page.evaluate(expr).catch(() => null);
|
|
146
|
+
if (v && typeof v === 'object' && typeof v.x === 'number' && typeof v.y === 'number') {
|
|
147
|
+
return { x: v.x, y: v.y };
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
/** 轮询页面求值直到 true(超时返回 false) */
|
|
152
|
+
async function waitEvalTrue(page, expr, timeoutMs) {
|
|
153
|
+
const deadline = Date.now() + timeoutMs;
|
|
154
|
+
for (;;) {
|
|
155
|
+
const v = await page.evaluate(expr).catch(() => false);
|
|
156
|
+
if (v === true)
|
|
157
|
+
return true;
|
|
158
|
+
if (Date.now() >= deadline)
|
|
159
|
+
return false;
|
|
160
|
+
await page.sleep(200);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/** 轮询 URL 直到含目标 city code(超时返回 false;UI 切换自校验) */
|
|
164
|
+
async function waitForUrlCity(page, code, timeoutMs) {
|
|
165
|
+
const deadline = Date.now() + timeoutMs;
|
|
166
|
+
for (;;) {
|
|
167
|
+
const u = await page.currentUrl().catch(() => '');
|
|
168
|
+
if (cityCodeOfUrl(u) === code)
|
|
169
|
+
return true;
|
|
170
|
+
if (Date.now() >= deadline)
|
|
171
|
+
return false;
|
|
172
|
+
await page.sleep(250);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* 城市对话框 DOM 辅助(注入到 window.__rpaDom;幂等:已有 cityLabelPos 则跳过)。
|
|
177
|
+
* 全部只读求值 + 返回点击坐标,由引擎侧 human 层做真实拟人点击(轨迹/节奏)。
|
|
178
|
+
* 返回 null 表示该步骤不适用(选择器缺失/对话框未开)→ 调用方回退 URL。
|
|
179
|
+
*/
|
|
180
|
+
export const CITY_SWITCH_SOURCE = `
|
|
181
|
+
window.__rpaDom = window.__rpaDom || {};
|
|
182
|
+
Object.assign(window.__rpaDom, {
|
|
183
|
+
// 城市标签(当前城市按钮)中心点;无 → null
|
|
184
|
+
cityLabelPos: function() {
|
|
185
|
+
const el = document.querySelector('.city-label') || document.querySelector('[class*="city-label"]');
|
|
186
|
+
if (!el) return null;
|
|
187
|
+
const r = el.getBoundingClientRect();
|
|
188
|
+
if (r.width <= 0 || r.height <= 0) return null;
|
|
189
|
+
return { x: Math.round(r.left + r.width / 2), y: Math.round(r.top + r.height / 2) };
|
|
190
|
+
},
|
|
191
|
+
// 城市对话框是否已打开(排除 v-leave 关闭中)
|
|
192
|
+
cityDialogVisible: function() {
|
|
193
|
+
const d = document.querySelector('.city-select-dialog');
|
|
194
|
+
if (!d) return false;
|
|
195
|
+
const s = getComputedStyle(d);
|
|
196
|
+
const r = d.getBoundingClientRect();
|
|
197
|
+
if (s.display === 'none' || s.visibility === 'hidden' || r.width <= 0) return false;
|
|
198
|
+
if ((d.className || '').toString().includes('v-leave')) return false;
|
|
199
|
+
return true;
|
|
200
|
+
},
|
|
201
|
+
// 对话框残留清理完成(无打开/关闭中的对话框;防止旧 mask 截获点击)
|
|
202
|
+
cityDialogIdle: function() {
|
|
203
|
+
const ds = Array.from(document.querySelectorAll('.city-select-dialog'));
|
|
204
|
+
for (const d of ds) {
|
|
205
|
+
const s = getComputedStyle(d);
|
|
206
|
+
const r = d.getBoundingClientRect();
|
|
207
|
+
if (s.display !== 'none' && s.visibility !== 'hidden' && r.width > 0) return false;
|
|
208
|
+
if ((d.className || '').toString().includes('v-leave')) return false;
|
|
209
|
+
}
|
|
210
|
+
return true;
|
|
211
|
+
},
|
|
212
|
+
// 热门城市 tab 直接 li:文本=城市名 → 中心点
|
|
213
|
+
cityHotItem: function(name) {
|
|
214
|
+
const dlg = document.querySelector('.city-select-dialog');
|
|
215
|
+
if (!dlg) return null;
|
|
216
|
+
const li = Array.from(dlg.querySelectorAll('ul.city-list-hot li')).find((el) => (el.innerText || '').trim() === String(name));
|
|
217
|
+
if (!li) return null;
|
|
218
|
+
const r = li.getBoundingClientRect();
|
|
219
|
+
if (r.width <= 0 || r.height <= 0) return null;
|
|
220
|
+
return { x: Math.round(r.left + r.width / 2), y: Math.round(r.top + r.height / 2) };
|
|
221
|
+
},
|
|
222
|
+
// 字母 tab 位置(ABCDE/FGHJ/KLMN/PQRST/WXYZ)
|
|
223
|
+
cityLetterTabPos: function(letter) {
|
|
224
|
+
const tab = Array.from(document.querySelectorAll('.city-select-dialog ul.city-char-list li')).find((el) => (el.innerText || '').trim() === String(letter));
|
|
225
|
+
if (!tab) return null;
|
|
226
|
+
const r = tab.getBoundingClientRect();
|
|
227
|
+
if (r.width <= 0 || r.height <= 0) return null;
|
|
228
|
+
return { x: Math.round(r.left + r.width / 2), y: Math.round(r.top + r.height / 2) };
|
|
229
|
+
},
|
|
230
|
+
// 字母组列表内城市名 → 文本位点击点(内部滚动到可见后重取坐标)
|
|
231
|
+
cityGroupItem: function(name) {
|
|
232
|
+
const dlg = document.querySelector('.city-select-dialog');
|
|
233
|
+
if (!dlg) return null;
|
|
234
|
+
const needle = String(name);
|
|
235
|
+
const group = Array.from(dlg.querySelectorAll('ul.city-list-select li')).find((el) => {
|
|
236
|
+
const lines = (el.innerText || '').split('\\n').map((s) => s.trim());
|
|
237
|
+
return lines.includes(needle);
|
|
238
|
+
});
|
|
239
|
+
if (!group) return null;
|
|
240
|
+
// 找对话框内可滚动容器,滚到目标可见(对话框列表超出视口时文本位在屏外)
|
|
241
|
+
let sc = group.parentElement;
|
|
242
|
+
while (sc && sc !== dlg) {
|
|
243
|
+
const s = getComputedStyle(sc);
|
|
244
|
+
if (/(auto|scroll)/.test(s.overflowY)) break;
|
|
245
|
+
sc = sc.parentElement;
|
|
246
|
+
}
|
|
247
|
+
const pos = cityTextPos(group, needle);
|
|
248
|
+
if (!pos) return null;
|
|
249
|
+
if (sc && sc !== dlg) {
|
|
250
|
+
const sr = sc.getBoundingClientRect();
|
|
251
|
+
if (pos.y < sr.top + 40 || pos.y > sr.bottom - 40) {
|
|
252
|
+
sc.scrollTop += pos.y - (sr.top + sr.height / 2);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
const pos2 = cityTextPos(group, needle);
|
|
256
|
+
return pos2 ? { x: pos2.x, y: pos2.y } : null;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
function cityTextPos(el, needle) {
|
|
260
|
+
const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);
|
|
261
|
+
let node;
|
|
262
|
+
while ((node = walker.nextNode())) {
|
|
263
|
+
const idx = node.nodeValue.indexOf(needle);
|
|
264
|
+
if (idx >= 0) {
|
|
265
|
+
const range = document.createRange();
|
|
266
|
+
range.setStart(node, idx);
|
|
267
|
+
range.setEnd(node, idx + needle.length);
|
|
268
|
+
const r = range.getBoundingClientRect();
|
|
269
|
+
if (r.width > 0 || r.height > 0) return { x: Math.round(r.left + r.width / 2), y: Math.round(r.top + r.height / 2) };
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
true
|
|
275
|
+
`;
|
|
276
|
+
//# sourceMappingURL=city-switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"city-switch.js","sourceRoot":"","sources":["../../src/cdp/city-switch.ts"],"names":[],"mappings":"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"}
|