@qing3a/flow-rpa-engine 0.1.0
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/atomic.d.ts +9 -0
- package/dist/atomic.js +32 -0
- package/dist/atomic.js.map +1 -0
- package/dist/bench.d.ts +57 -0
- package/dist/bench.js +112 -0
- package/dist/bench.js.map +1 -0
- package/dist/cdp/client.d.ts +70 -0
- package/dist/cdp/client.js +272 -0
- package/dist/cdp/client.js.map +1 -0
- package/dist/cdp/page.d.ts +93 -0
- package/dist/cdp/page.js +411 -0
- package/dist/cdp/page.js.map +1 -0
- package/dist/executor.d.ts +122 -0
- package/dist/executor.js +399 -0
- package/dist/executor.js.map +1 -0
- package/dist/export.d.ts +128 -0
- package/dist/export.js +234 -0
- package/dist/export.js.map +1 -0
- package/dist/gate.d.ts +56 -0
- package/dist/gate.js +144 -0
- package/dist/gate.js.map +1 -0
- package/dist/hello.d.ts +5 -0
- package/dist/hello.js +13 -0
- package/dist/hello.js.map +1 -0
- package/dist/human.d.ts +162 -0
- package/dist/human.js +506 -0
- package/dist/human.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/learning.d.ts +82 -0
- package/dist/learning.js +240 -0
- package/dist/learning.js.map +1 -0
- package/dist/mask.d.ts +32 -0
- package/dist/mask.js +70 -0
- package/dist/mask.js.map +1 -0
- package/dist/platform.d.ts +66 -0
- package/dist/platform.js +215 -0
- package/dist/platform.js.map +1 -0
- package/dist/record.d.ts +48 -0
- package/dist/record.js +42 -0
- package/dist/record.js.map +1 -0
- package/dist/schema.d.ts +130 -0
- package/dist/schema.js +93 -0
- package/dist/schema.js.map +1 -0
- package/dist/simprofile.d.ts +94 -0
- package/dist/simprofile.js +247 -0
- package/dist/simprofile.js.map +1 -0
- package/dist/storage.d.ts +63 -0
- package/dist/storage.js +138 -0
- package/dist/storage.js.map +1 -0
- package/dist/validate.d.ts +37 -0
- package/dist/validate.js +108 -0
- package/dist/validate.js.map +1 -0
- package/package.json +32 -0
package/dist/human.js
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
import { BASE_SIM, XorShift32 } from './simprofile.js';
|
|
2
|
+
export const point = (x, y) => ({ x, y });
|
|
3
|
+
/** 拟人操作错误 */
|
|
4
|
+
export class HumanError extends Error {
|
|
5
|
+
kind;
|
|
6
|
+
constructor(kind, message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.kind = kind;
|
|
9
|
+
this.name = 'HumanError';
|
|
10
|
+
}
|
|
11
|
+
static sink(msg) {
|
|
12
|
+
return new HumanError('sink', `CDP 命令失败: ${msg}`);
|
|
13
|
+
}
|
|
14
|
+
static timeout(op) {
|
|
15
|
+
return new HumanError('timeout', `${op} 超时`);
|
|
16
|
+
}
|
|
17
|
+
static stopped() {
|
|
18
|
+
return new HumanError('stopped', '操作已停止');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/* ---------------- 基础随机/数学(插件同款) ---------------- */
|
|
22
|
+
/** 插件: clamp(e,t,s){return Math.max(t,Math.min(s,e))} */
|
|
23
|
+
export function clamp(v, min, max) {
|
|
24
|
+
if (v < min)
|
|
25
|
+
return min;
|
|
26
|
+
if (v > max)
|
|
27
|
+
return max;
|
|
28
|
+
return v;
|
|
29
|
+
}
|
|
30
|
+
/** 插件: randBetween(e,t,s=Math.random){return e+s()*(t-e)} */
|
|
31
|
+
export function randBetween(a, b, rng) {
|
|
32
|
+
return a + rng() * (b - a);
|
|
33
|
+
}
|
|
34
|
+
/** 插件: sampleLogNormal —— Box-Muller 对数正态,clamp 8~600ms */
|
|
35
|
+
export function sampleLogNormal(median, sigma, rng) {
|
|
36
|
+
const mu = Math.log(Math.max(1, median));
|
|
37
|
+
let u1 = rng();
|
|
38
|
+
if (u1 === 0)
|
|
39
|
+
u1 = 1e-6; // JS `rng() || 1e-6`
|
|
40
|
+
let u2 = rng();
|
|
41
|
+
if (u2 === 0)
|
|
42
|
+
u2 = 1e-6;
|
|
43
|
+
const gauss = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
|
|
44
|
+
const v = Math.exp(mu + sigma * gauss);
|
|
45
|
+
return clamp(Math.round(v), 8, 600);
|
|
46
|
+
}
|
|
47
|
+
/** 插件: easeInOut(e){return e*e*(3-2*e)} */
|
|
48
|
+
export function easeInOut(t) {
|
|
49
|
+
return t * t * (3 - 2 * t);
|
|
50
|
+
}
|
|
51
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, Math.max(0, Math.round(ms))));
|
|
52
|
+
/* ---------------- 键盘辅助 ---------------- */
|
|
53
|
+
/** 插件 getRandomErrorChar:键盘邻近错键表(1:1 复刻) */
|
|
54
|
+
const ERROR_MAP = {
|
|
55
|
+
a: ['q', 'w', 's', 'z'], b: ['v', 'g', 'h', 'n'], c: ['x', 'd', 'f', 'v'],
|
|
56
|
+
d: ['s', 'e', 'r', 'f', 'c', 'x'], e: ['w', 's', 'd', 'r'], f: ['d', 'r', 't', 'g', 'v', 'c'],
|
|
57
|
+
g: ['f', 't', 'y', 'h', 'b', 'v'], h: ['g', 'y', 'u', 'j', 'n', 'b'], i: ['u', 'j', 'k', 'o'],
|
|
58
|
+
j: ['h', 'u', 'i', 'k', 'm', 'n'], k: ['j', 'i', 'o', 'l', 'm'], l: ['k', 'o', 'p'],
|
|
59
|
+
m: ['n', 'j', 'k'], n: ['b', 'h', 'j', 'm'], o: ['i', 'k', 'l', 'p'],
|
|
60
|
+
p: ['o', 'l'], q: ['w', 'a'], r: ['e', 'd', 'f', 't'],
|
|
61
|
+
s: ['a', 'w', 'e', 'd', 'x', 'z'], t: ['r', 'f', 'g', 'y'], u: ['y', 'h', 'j', 'i'],
|
|
62
|
+
v: ['c', 'f', 'g', 'b'], w: ['q', 'a', 's', 'e'], x: ['z', 's', 'd', 'c'],
|
|
63
|
+
y: ['t', 'g', 'h', 'u'], z: ['a', 's', 'x'],
|
|
64
|
+
};
|
|
65
|
+
export function getRandomErrorChar(ch, rng) {
|
|
66
|
+
const lower = ch.toLowerCase();
|
|
67
|
+
const cands = ERROR_MAP[lower];
|
|
68
|
+
let pick;
|
|
69
|
+
if (cands) {
|
|
70
|
+
pick = cands[Math.floor(rng() * cands.length)];
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const fallback = ['x', 'v', 'n', 'm'];
|
|
74
|
+
pick = fallback[Math.floor(rng() * fallback.length)];
|
|
75
|
+
}
|
|
76
|
+
if (ch === ch.toUpperCase() && ch.toLowerCase() !== ch)
|
|
77
|
+
return pick.toUpperCase();
|
|
78
|
+
return pick;
|
|
79
|
+
}
|
|
80
|
+
/** 拟人操作器:持有 InputSink,行为参数来自 SimProfile(机器差异化) */
|
|
81
|
+
export class Human {
|
|
82
|
+
sink;
|
|
83
|
+
lastPos;
|
|
84
|
+
sim;
|
|
85
|
+
constructor(sink, sim) {
|
|
86
|
+
this.sink = sink;
|
|
87
|
+
this.sim = sim;
|
|
88
|
+
}
|
|
89
|
+
static withDefaultSim(sink) {
|
|
90
|
+
return new Human(sink, BASE_SIM);
|
|
91
|
+
}
|
|
92
|
+
/** 插件 assertPageOk 前置校验(forbidden scheme 检查) */
|
|
93
|
+
async assertPageOk() {
|
|
94
|
+
const url = String(await this.sink.evaluate('location.href').catch(() => '')).toLowerCase();
|
|
95
|
+
const forbidden = ['chrome://', 'edge://', 'about:', 'chrome-extension://', 'devtools://'];
|
|
96
|
+
if (forbidden.some((p) => url.startsWith(p))) {
|
|
97
|
+
throw HumanError.sink(`当前页面(${url})不支持调试协议 (forbidden scheme)`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** 插件 getViewport:Page.getLayoutMetrics.visualViewport,fallback 1440x900 */
|
|
101
|
+
async getViewport() {
|
|
102
|
+
try {
|
|
103
|
+
return await this.sink.viewport();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return [1440, 900];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** 插件 U:坐标 clamp 到视口(输出四舍五入) */
|
|
110
|
+
static clampToViewport(p, w, h) {
|
|
111
|
+
return point(clamp(Math.round(p.x), 0, w), clamp(Math.round(p.y), 0, h));
|
|
112
|
+
}
|
|
113
|
+
checkStop(stop) {
|
|
114
|
+
if (stop?.stopped)
|
|
115
|
+
throw HumanError.stopped();
|
|
116
|
+
}
|
|
117
|
+
/** mouseMove 核心实现 */
|
|
118
|
+
async implMove(to, opts) {
|
|
119
|
+
const [w, h] = await this.getViewport();
|
|
120
|
+
const jitter = opts.jitter ?? this.sim.jitter;
|
|
121
|
+
const rng = opts.seed !== undefined ? seededRng(opts.seed) : rngTime();
|
|
122
|
+
let f = opts.from ?? this.lastPos;
|
|
123
|
+
if (!f) {
|
|
124
|
+
// 无起点:从目标偏移 startOffset 随机方向(插件行为)
|
|
125
|
+
const sx = randBetween(this.sim.startOffsetRange[0], this.sim.startOffsetRange[1], rng);
|
|
126
|
+
const sy = randBetween(this.sim.startOffsetRange[0], this.sim.startOffsetRange[1], rng);
|
|
127
|
+
const ox = (rng() < 0.5 ? -1 : 1) * sx;
|
|
128
|
+
const oy = (rng() < 0.5 ? -1 : 1) * sy;
|
|
129
|
+
f = point(to.x + ox, to.y + oy);
|
|
130
|
+
}
|
|
131
|
+
f = opts.clamp === false ? f : Human.clampToViewport(f, w, h);
|
|
132
|
+
const t = opts.clamp === false ? to : Human.clampToViewport(to, w, h);
|
|
133
|
+
const dx = t.x - f.x;
|
|
134
|
+
const dy = t.y - f.y;
|
|
135
|
+
const dist = Math.hypot(dx, dy);
|
|
136
|
+
const steps = clamp(Math.ceil(dist / 10), 6, 100);
|
|
137
|
+
for (let i = 1; i <= steps; i++) {
|
|
138
|
+
this.checkStop(opts.stop);
|
|
139
|
+
const wt = easeInOut(i / steps);
|
|
140
|
+
const x = f.x + dx * wt + randBetween(-jitter, jitter, rng);
|
|
141
|
+
const y = f.y + dy * wt + randBetween(-jitter, jitter, rng);
|
|
142
|
+
const [rx, ry] = [Math.round(x), Math.round(y)];
|
|
143
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
144
|
+
type: 'mouseMoved', x: rx, y: ry, pointerType: 'mouse', buttons: 0,
|
|
145
|
+
});
|
|
146
|
+
await sleep(sampleLogNormal(this.sim.moveMedianMs, this.sim.moveSigma, rng));
|
|
147
|
+
}
|
|
148
|
+
this.lastPos = t;
|
|
149
|
+
return t;
|
|
150
|
+
}
|
|
151
|
+
/** 插件 mouseMove(公共入口:可选超时) */
|
|
152
|
+
async mouseMove(to, opts = {}) {
|
|
153
|
+
const run = async () => this.implMove(to, opts);
|
|
154
|
+
if (opts.timeoutMs !== undefined) {
|
|
155
|
+
return withTimeout(run(), opts.timeoutMs, 'mouseMove');
|
|
156
|
+
}
|
|
157
|
+
return run();
|
|
158
|
+
}
|
|
159
|
+
/** mouseClick 核心 */
|
|
160
|
+
async implClick(at, opts) {
|
|
161
|
+
const [w, h] = await this.getViewport();
|
|
162
|
+
const target = opts.clamp === false ? at : Human.clampToViewport(at, w, h);
|
|
163
|
+
// 预移动:lastPos 距离 > 6px → 先移动(jitter 用 clickJitter)
|
|
164
|
+
const last = this.lastPos;
|
|
165
|
+
if (last === undefined || Math.hypot(last.x - target.x, last.y - target.y) > 6) {
|
|
166
|
+
this.checkStop(opts.stop);
|
|
167
|
+
await this.implMove(target, {
|
|
168
|
+
from: last, clamp: opts.clamp, jitter: this.sim.clickJitter, seed: opts.seed, stop: opts.stop,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// 悬停(插件 hoverRangeMs [150,400])
|
|
172
|
+
const [hMin, hMax] = opts.hoverRangeMs ?? this.sim.hoverRangeMs;
|
|
173
|
+
const rng = opts.seed !== undefined ? seededRng(opts.seed) : rngTime();
|
|
174
|
+
await sleep(randBetween(hMin, hMax, rng));
|
|
175
|
+
this.checkStop(opts.stop);
|
|
176
|
+
// 过冲(30% 概率,2~6px,随机方向)
|
|
177
|
+
const ovProb = opts.overshootProbability ?? this.sim.overshootProbability;
|
|
178
|
+
if (rng() < ovProb) {
|
|
179
|
+
const [oMin, oMax] = opts.overshootPx ?? this.sim.overshootPx;
|
|
180
|
+
const jx = (rng() < 0.5 ? -1 : 1) * randBetween(oMin, oMax, rng);
|
|
181
|
+
const jy = (rng() < 0.5 ? -1 : 1) * randBetween(oMin, oMax, rng);
|
|
182
|
+
const r = opts.clamp === false ? point(target.x + jx, target.y + jy) : Human.clampToViewport(point(target.x + jx, target.y + jy), w, h);
|
|
183
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
184
|
+
type: 'mouseMoved', x: Math.round(r.x), y: Math.round(r.y), pointerType: 'mouse', buttons: 0,
|
|
185
|
+
});
|
|
186
|
+
await sleep(sampleLogNormal(this.sim.overshootMedianMs, this.sim.overshootSigma, rng));
|
|
187
|
+
this.checkStop(opts.stop);
|
|
188
|
+
}
|
|
189
|
+
const [tx, ty] = [Math.round(target.x), Math.round(target.y)];
|
|
190
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
191
|
+
type: 'mouseMoved', x: tx, y: ty, pointerType: 'mouse', buttons: 0,
|
|
192
|
+
});
|
|
193
|
+
// 修饰键(插件 modBits:alt1/ctrl2/meta4/shift8)
|
|
194
|
+
const modBits = [['alt', 1], ['ctrl', 2], ['meta', 4], ['shift', 8]];
|
|
195
|
+
const modifiers = (opts.keyboard ?? []).reduce((sum, k) => {
|
|
196
|
+
const bit = modBits.find(([n]) => n === k)?.[1];
|
|
197
|
+
return bit === undefined ? sum : sum + bit;
|
|
198
|
+
}, 0);
|
|
199
|
+
// 按下→抬起(插件 pressMedianMs 120, σ.45)
|
|
200
|
+
const pm = opts.pressMedianMs ?? this.sim.pressMedianMs;
|
|
201
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
202
|
+
type: 'mousePressed', button: 'left', buttons: 1, clickCount: 1, x: tx, y: ty, pointerType: 'mouse', modifiers,
|
|
203
|
+
});
|
|
204
|
+
await sleep(sampleLogNormal(pm, this.sim.pressSigma, rng));
|
|
205
|
+
this.checkStop(opts.stop);
|
|
206
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
207
|
+
type: 'mouseReleased', button: 'left', buttons: 0, clickCount: 1, x: tx, y: ty, pointerType: 'mouse', modifiers,
|
|
208
|
+
});
|
|
209
|
+
// 双击(插件可选)
|
|
210
|
+
if (opts.doubleClick || rng() < (opts.doubleClickProbability ?? 0)) {
|
|
211
|
+
const [dMin, dMax] = this.sim.doubleClickRangeMs;
|
|
212
|
+
await sleep(randBetween(dMin, dMax, rng));
|
|
213
|
+
this.checkStop(opts.stop);
|
|
214
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
215
|
+
type: 'mousePressed', button: 'left', buttons: 1, clickCount: 2, x: tx, y: ty, pointerType: 'mouse', modifiers,
|
|
216
|
+
});
|
|
217
|
+
await sleep(sampleLogNormal(pm * 0.85, this.sim.pressSigma, rng));
|
|
218
|
+
this.checkStop(opts.stop);
|
|
219
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
220
|
+
type: 'mouseReleased', button: 'left', buttons: 0, clickCount: 2, x: tx, y: ty, pointerType: 'mouse', modifiers,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
this.lastPos = target;
|
|
224
|
+
return target;
|
|
225
|
+
}
|
|
226
|
+
/** 插件 mouseClick(公共入口) */
|
|
227
|
+
async mouseClick(at, opts = {}) {
|
|
228
|
+
const run = async () => this.implClick(at, opts);
|
|
229
|
+
if (opts.timeoutMs !== undefined)
|
|
230
|
+
return withTimeout(run(), opts.timeoutMs, 'mouseClick');
|
|
231
|
+
return run();
|
|
232
|
+
}
|
|
233
|
+
/** 插件 mouseWheel:惯性递减或均匀,段间 20~60ms,±1px */
|
|
234
|
+
async mouseWheel(delta, opts = {}) {
|
|
235
|
+
const run = async () => {
|
|
236
|
+
const [w, h] = await this.getViewport();
|
|
237
|
+
const rng = opts.seed !== undefined ? seededRng(opts.seed) : rngTime();
|
|
238
|
+
const pos = point(opts.x ?? this.lastPos?.x ?? w / 2, opts.y ?? this.lastPos?.y ?? h / 2);
|
|
239
|
+
const origin = Human.clampToViewport(pos, w, h);
|
|
240
|
+
const dx0 = delta.x;
|
|
241
|
+
const dy0 = delta.y;
|
|
242
|
+
let weights;
|
|
243
|
+
if (opts.inertia !== false) {
|
|
244
|
+
const p = randBetween(this.sim.wheelRatioRange[0], this.sim.wheelRatioRange[1], rng);
|
|
245
|
+
const k = opts.steps !== undefined ? clamp(opts.steps, 4, 16) : Math.round(randBetween(this.sim.wheelInertiaStepsRange[0], this.sim.wheelInertiaStepsRange[1], rng));
|
|
246
|
+
const raw = Array.from({ length: k }, (_, i) => Math.pow(p, i));
|
|
247
|
+
const sum = raw.reduce((a, b) => a + b, 0);
|
|
248
|
+
weights = raw.map((v) => v / sum);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
const k = opts.steps !== undefined ? clamp(opts.steps, 3, 10) : Math.round(randBetween(this.sim.wheelUniformStepsRange[0], this.sim.wheelUniformStepsRange[1], rng));
|
|
252
|
+
weights = Array.from({ length: k }, () => 1 / k);
|
|
253
|
+
}
|
|
254
|
+
for (const wt of weights) {
|
|
255
|
+
this.checkStop(opts.stop);
|
|
256
|
+
const ddx = dx0 * wt + randBetween(-1, 1, rng);
|
|
257
|
+
const ddy = dy0 * wt + randBetween(-1, 1, rng);
|
|
258
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
259
|
+
type: 'mouseWheel', x: Math.round(origin.x), y: Math.round(origin.y), deltaX: ddx, deltaY: ddy, pointerType: 'mouse',
|
|
260
|
+
});
|
|
261
|
+
await sleep(randBetween(this.sim.wheelIntervalMs[0], this.sim.wheelIntervalMs[1], rng));
|
|
262
|
+
}
|
|
263
|
+
this.lastPos = origin;
|
|
264
|
+
return origin;
|
|
265
|
+
};
|
|
266
|
+
if (opts.timeoutMs !== undefined)
|
|
267
|
+
return withTimeout(run(), opts.timeoutMs, 'mouseWheel');
|
|
268
|
+
return run();
|
|
269
|
+
}
|
|
270
|
+
/** 插件 mx:矩形内按 padding 收缩后随机取点 */
|
|
271
|
+
static randomPointIn(rect, padding, rng) {
|
|
272
|
+
const [pl, pt, pr, pb] = padding;
|
|
273
|
+
const x = rect.x + pl;
|
|
274
|
+
const y = rect.y + pt;
|
|
275
|
+
const s = rect.x + rect.w - pr;
|
|
276
|
+
const r = rect.y + rect.h - pb;
|
|
277
|
+
if (s < x || r < y) {
|
|
278
|
+
// 边距收缩后无空间 → 元素中心
|
|
279
|
+
return point(Math.round(rect.x + rect.w / 2), Math.round(rect.y + rect.h / 2));
|
|
280
|
+
}
|
|
281
|
+
return point(Math.round(x + rng() * (s - x)), Math.round(y + rng() * (r - y)));
|
|
282
|
+
}
|
|
283
|
+
/** 插件 mouseDrag(content_to_bg_mouse_drag,1:1 复刻) */
|
|
284
|
+
async mouseDrag(from, to, opts = {}) {
|
|
285
|
+
const run = async () => {
|
|
286
|
+
const [vw, vh] = await this.getViewport();
|
|
287
|
+
const rng = opts.seed !== undefined ? seededRng(opts.seed) : rngTime();
|
|
288
|
+
const p = opts.clamp === false ? from : Human.clampToViewport(from, vw, vh);
|
|
289
|
+
const k = opts.clamp === false ? to : Human.clampToViewport(to, vw, vh);
|
|
290
|
+
this.checkStop(opts.stop);
|
|
291
|
+
// 预移动:从 lastPos(或起点偏移 100px)到 p
|
|
292
|
+
const lp = this.lastPos ?? point(p.x + 100, p.y + 100);
|
|
293
|
+
const pre = Math.max(3, Math.ceil(Math.hypot(p.x - lp.x, p.y - lp.y) / 20));
|
|
294
|
+
const jitter = opts.jitter ?? this.sim.dragJitter;
|
|
295
|
+
for (let i = 0; i <= pre; i++) {
|
|
296
|
+
this.checkStop(opts.stop);
|
|
297
|
+
const t = easeInOut(i / pre);
|
|
298
|
+
const x = lp.x + (p.x - lp.x) * t + (rng() - 0.5) * jitter;
|
|
299
|
+
const y = lp.y + (p.y - lp.y) * t + (rng() - 0.5) * jitter;
|
|
300
|
+
const pt = opts.clamp === false ? point(x, y) : Human.clampToViewport(point(x, y), vw, vh);
|
|
301
|
+
await this.sink.send('Input.dispatchMouseEvent', { type: 'mouseMoved', x: Math.round(pt.x), y: Math.round(pt.y) });
|
|
302
|
+
await sleep(sampleLogNormal(this.sim.dragPreMedianMs, this.sim.dragPreSigma, rng));
|
|
303
|
+
}
|
|
304
|
+
this.lastPos = p;
|
|
305
|
+
this.checkStop(opts.stop);
|
|
306
|
+
// 按下
|
|
307
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
308
|
+
type: 'mousePressed', x: Math.round(p.x), y: Math.round(p.y), button: 'left', clickCount: 1,
|
|
309
|
+
});
|
|
310
|
+
const [pd0, pd1] = opts.pressDelayMs ?? this.sim.pressDelayMs;
|
|
311
|
+
await sleep(randBetween(pd0, pd1, rng));
|
|
312
|
+
this.checkStop(opts.stop);
|
|
313
|
+
// 按住拖动(mouseMoved 携带 button:"left")
|
|
314
|
+
const n = opts.steps ?? Math.max(5, Math.ceil(Math.hypot(k.x - p.x, k.y - p.y) / 15));
|
|
315
|
+
for (let i = 1; i <= n; i++) {
|
|
316
|
+
this.checkStop(opts.stop);
|
|
317
|
+
const t = easeInOut(i / n);
|
|
318
|
+
const x = p.x + (k.x - p.x) * t + (rng() - 0.5) * jitter;
|
|
319
|
+
const y = p.y + (k.y - p.y) * t + (rng() - 0.5) * jitter;
|
|
320
|
+
const pt = opts.clamp === false ? point(x, y) : Human.clampToViewport(point(x, y), vw, vh);
|
|
321
|
+
await this.sink.send('Input.dispatchMouseEvent', { type: 'mouseMoved', x: Math.round(pt.x), y: Math.round(pt.y), button: 'left' });
|
|
322
|
+
await sleep(sampleLogNormal(this.sim.dragMoveMedianMs, this.sim.dragMoveSigma, rng));
|
|
323
|
+
}
|
|
324
|
+
const [rd0, rd1] = opts.releaseDelayMs ?? this.sim.releaseDelayMs;
|
|
325
|
+
await sleep(randBetween(rd0, rd1, rng));
|
|
326
|
+
this.checkStop(opts.stop);
|
|
327
|
+
// 释放
|
|
328
|
+
await this.sink.send('Input.dispatchMouseEvent', {
|
|
329
|
+
type: 'mouseReleased', x: Math.round(k.x), y: Math.round(k.y), button: 'left', clickCount: 1,
|
|
330
|
+
});
|
|
331
|
+
this.lastPos = k;
|
|
332
|
+
return [p, k];
|
|
333
|
+
};
|
|
334
|
+
if (opts.timeoutMs !== undefined)
|
|
335
|
+
return withTimeout(run(), opts.timeoutMs, 'mouseDrag');
|
|
336
|
+
return run();
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* 插件 randomClickIn:随机选元素在其可见矩形内随机点后 mouseClick,1~2 次。
|
|
340
|
+
* 需要页面已注入 DOM_SOURCE(window.__rpaDom.getBySels)。
|
|
341
|
+
*/
|
|
342
|
+
async randomClickIn(selector, maxClicks, intervalMs) {
|
|
343
|
+
const rng = rngTime();
|
|
344
|
+
const sel = JSON.stringify(selector);
|
|
345
|
+
const expr = `(() => {
|
|
346
|
+
const d = window.__rpaDom;
|
|
347
|
+
const nodes = d && d.getBySels ? d.getBySels(${sel}) : [];
|
|
348
|
+
const vw = innerWidth || document.documentElement.clientWidth;
|
|
349
|
+
const vh = innerHeight || document.documentElement.clientHeight;
|
|
350
|
+
const out = [];
|
|
351
|
+
for (const el of nodes) {
|
|
352
|
+
const t = el.getBoundingClientRect();
|
|
353
|
+
const x = Math.max(t.left, 0);
|
|
354
|
+
const y = Math.max(t.top, 0);
|
|
355
|
+
const w = Math.max(0, Math.min(t.right, vw) - x);
|
|
356
|
+
const h = Math.max(0, Math.min(t.bottom, vh) - y);
|
|
357
|
+
if (w > 0 && h > 0) out.push({ x, y, w, h });
|
|
358
|
+
}
|
|
359
|
+
return out;
|
|
360
|
+
})()`;
|
|
361
|
+
let rects = [];
|
|
362
|
+
try {
|
|
363
|
+
const v = await this.sink.evaluate(expr);
|
|
364
|
+
if (Array.isArray(v)) {
|
|
365
|
+
rects = v
|
|
366
|
+
.filter((r) => !!r && typeof r === 'object' &&
|
|
367
|
+
typeof r.x === 'number' && typeof r.y === 'number' &&
|
|
368
|
+
typeof r.w === 'number' && typeof r.h === 'number')
|
|
369
|
+
.map((r) => ({ x: r.x, y: r.y, w: r.w, h: r.h }));
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
rects = [];
|
|
374
|
+
}
|
|
375
|
+
if (rects.length === 0) {
|
|
376
|
+
throw HumanError.sink(`randomClickIn 未找到元素: ${selector}`);
|
|
377
|
+
}
|
|
378
|
+
// 插件:Math.floor(Math.random()*2)+1 次(1~2)
|
|
379
|
+
const times = Math.floor(rng() * Math.max(1, maxClicks ?? this.sim.randomClickMaxClicks)) + 1;
|
|
380
|
+
let clicked = 0;
|
|
381
|
+
for (let i = 0; i < times; i++) {
|
|
382
|
+
const rect = rects[Math.floor(rng() * rects.length)];
|
|
383
|
+
const at = Human.randomPointIn(rect, [2, 2, 2, 2], rng);
|
|
384
|
+
try {
|
|
385
|
+
await this.implClick(at, {});
|
|
386
|
+
clicked++;
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
// 单次点击失败不中断
|
|
390
|
+
}
|
|
391
|
+
if (i < times - 1) {
|
|
392
|
+
await sleep(intervalMs ?? this.sim.randomClickIntervalMs);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return [clicked, times];
|
|
396
|
+
}
|
|
397
|
+
/** 插件 typeCharacter */
|
|
398
|
+
async typeCharacter(ch) {
|
|
399
|
+
await this.sink.send('Input.dispatchKeyEvent', { type: 'char', text: ch, unmodifiedText: ch });
|
|
400
|
+
}
|
|
401
|
+
/** 插件 typeBackspace */
|
|
402
|
+
async typeBackspace() {
|
|
403
|
+
await this.sink.send('Input.dispatchKeyEvent', { type: 'keyDown', windowsVirtualKeyCode: 8 });
|
|
404
|
+
await this.sink.send('Input.dispatchKeyEvent', { type: 'keyUp', windowsVirtualKeyCode: 8 });
|
|
405
|
+
}
|
|
406
|
+
/** 按回车(真实 CDP 键盘事件,isTrusted=true) */
|
|
407
|
+
async pressEnter() {
|
|
408
|
+
await this.sink.send('Input.dispatchKeyEvent', {
|
|
409
|
+
type: 'keyDown', key: 'Enter', code: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13,
|
|
410
|
+
});
|
|
411
|
+
await this.sink.send('Input.dispatchKeyEvent', {
|
|
412
|
+
type: 'keyUp', key: 'Enter', code: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
/** 插件 isThinkingTrigger:标点后思考停顿 */
|
|
416
|
+
static isThinkingTrigger(ch) {
|
|
417
|
+
return ['.', '。', ',', ',', '!', '!', '?', '?', ';', ';', ':', ':'].includes(ch);
|
|
418
|
+
}
|
|
419
|
+
/** 插件 calculateTypingInterval:相邻字符间隔加权,clamp 30~500ms */
|
|
420
|
+
calculateTypingInterval(prev, next, baseMs, rng) {
|
|
421
|
+
let v = sampleLogNormal(baseMs, this.sim.typeSigma, rng);
|
|
422
|
+
if (prev === ' ')
|
|
423
|
+
v *= 1.2;
|
|
424
|
+
if (next === ' ')
|
|
425
|
+
v *= 0.9;
|
|
426
|
+
if (next === next.toUpperCase() && next.toLowerCase() !== next)
|
|
427
|
+
v *= 1.15;
|
|
428
|
+
if (/[0-9!@#$%^&*()_+\-=[\]{}|,.<>?]/.test(next))
|
|
429
|
+
v *= 1.1;
|
|
430
|
+
return clamp(v, 30, 500);
|
|
431
|
+
}
|
|
432
|
+
/** 插件 keyboardInput:WPM 180~280 · 2% 打错重打 · 5% 思考停顿 · 收尾 200ms */
|
|
433
|
+
async keyboardInput(text, opts = {}) {
|
|
434
|
+
const run = async () => {
|
|
435
|
+
const [lo, hi] = opts.wpmRange ?? this.sim.wpmRange;
|
|
436
|
+
const errRate = opts.errorRate ?? this.sim.errorRate;
|
|
437
|
+
const pauseChance = opts.thinkPauseChance ?? this.sim.thinkPauseChance;
|
|
438
|
+
const [pLo, pHi] = opts.thinkPauseRangeMs ?? this.sim.thinkPauseRangeMs;
|
|
439
|
+
const finalPause = opts.finalPauseMs ?? this.sim.finalPauseMs;
|
|
440
|
+
const baseInterval = 60_000 / (((lo + hi) / 2) * 5);
|
|
441
|
+
const rng = opts.seed !== undefined ? seededRng(opts.seed) : rngTime();
|
|
442
|
+
const chars = [...text];
|
|
443
|
+
let typed = 0;
|
|
444
|
+
for (let p = 0; p < chars.length; p++) {
|
|
445
|
+
this.checkStop(opts.stop);
|
|
446
|
+
const ch = chars[p];
|
|
447
|
+
if (rng() < errRate) {
|
|
448
|
+
const wrong = getRandomErrorChar(ch, rng);
|
|
449
|
+
await this.typeCharacter(wrong);
|
|
450
|
+
typed++;
|
|
451
|
+
await sleep(sampleLogNormal(baseInterval * 1.5, this.sim.typeErrSigma, rng));
|
|
452
|
+
this.checkStop(opts.stop);
|
|
453
|
+
await this.typeBackspace();
|
|
454
|
+
await sleep(sampleLogNormal(baseInterval * 0.8, this.sim.typeBackspaceSigma, rng));
|
|
455
|
+
this.checkStop(opts.stop);
|
|
456
|
+
}
|
|
457
|
+
await this.typeCharacter(ch);
|
|
458
|
+
typed++;
|
|
459
|
+
const last = p === chars.length - 1;
|
|
460
|
+
if (!last && (Human.isThinkingTrigger(ch) || rng() < pauseChance)) {
|
|
461
|
+
await sleep(randBetween(pLo, pHi, rng));
|
|
462
|
+
this.checkStop(opts.stop);
|
|
463
|
+
}
|
|
464
|
+
if (!last) {
|
|
465
|
+
const iv = this.calculateTypingInterval(ch, chars[p + 1], baseInterval, rng);
|
|
466
|
+
await sleep(iv);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
if (finalPause > 0)
|
|
470
|
+
await sleep(finalPause);
|
|
471
|
+
return typed;
|
|
472
|
+
};
|
|
473
|
+
if (opts.timeoutMs !== undefined)
|
|
474
|
+
return withTimeout(run(), opts.timeoutMs, 'keyboardInput');
|
|
475
|
+
return run();
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
/* ---------------- 工具 ---------------- */
|
|
479
|
+
/** 时间种子 RNG(不可复现;等价 XorShift32::time_seeded) */
|
|
480
|
+
function rngTime() {
|
|
481
|
+
const s = Number(process.hrtime.bigint() & 0xffffffffn);
|
|
482
|
+
const r = new XorShift32((s ^ 0x5bd1e995) >>> 0);
|
|
483
|
+
return () => r.next();
|
|
484
|
+
}
|
|
485
|
+
/** 种子 RNG(可复现) */
|
|
486
|
+
function seededRng(seed) {
|
|
487
|
+
const r = new XorShift32(seed);
|
|
488
|
+
return () => r.next();
|
|
489
|
+
}
|
|
490
|
+
/** 带超时执行(超时 → HumanError.timeout) */
|
|
491
|
+
async function withTimeout(p, ms, op) {
|
|
492
|
+
let timer;
|
|
493
|
+
try {
|
|
494
|
+
return await Promise.race([
|
|
495
|
+
p,
|
|
496
|
+
new Promise((_, reject) => {
|
|
497
|
+
timer = setTimeout(() => reject(HumanError.timeout(op)), ms);
|
|
498
|
+
}),
|
|
499
|
+
]);
|
|
500
|
+
}
|
|
501
|
+
finally {
|
|
502
|
+
if (timer)
|
|
503
|
+
clearTimeout(timer);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
//# sourceMappingURL=human.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"human.js","sourceRoot":"","sources":["../src/human.ts"],"names":[],"mappings":"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CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC7F,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnF,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACrD,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnF,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACzE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @qing3a/flow-rpa-engine 公共出口(npm 包入口;D-N2)。
|
|
3
|
+
* 外部消费者从 "." 导入;内部(app/测试)仍走子路径 @qing3a/flow-rpa-engine/src/*.js。
|
|
4
|
+
*/
|
|
5
|
+
export { parseFlowJson, FlowSchema, StepSchema, VerifySchema, STEP_TYPES } from './schema.js';
|
|
6
|
+
export type { Flow, Step, StepType, Verify, FlowInput, EnvCheck } from './schema.js';
|
|
7
|
+
export { parseFlow, validate, FlowError, flowParseError, flowInvalidError } from './validate.js';
|
|
8
|
+
export { runFlow, ExecError } from './executor.js';
|
|
9
|
+
export type { PageOps, FlowResult, StepResult, ExtractResult, RunFlowOptions } from './executor.js';
|
|
10
|
+
export { fromFlowResult } from './record.js';
|
|
11
|
+
export type { RunRecord } from './record.js';
|
|
12
|
+
export { RunStore, nowIso } from './storage.js';
|
|
13
|
+
export { SuggestionStore, learnFromRun } from './learning.js';
|
|
14
|
+
export { LocalPlatform, MIN_SAMPLE_THRESHOLD } from './export.js';
|
|
15
|
+
export { PerfGate } from './bench.js';
|
|
16
|
+
export { CooldownGate, SiteGate, hostOf, GLOBAL_INTER_MIN_SECS, waitDurationLabel } from './gate.js';
|
|
17
|
+
export { PlatformClient, pkgUpdate, localFlowVersion, verifyHash } from './platform.js';
|
|
18
|
+
export type { PkgManifest } from './platform.js';
|
|
19
|
+
export { defaultProfileFile, loadSimProfile } from './simprofile.js';
|
|
20
|
+
export type { SimProfile } from './simprofile.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @qing3a/flow-rpa-engine 公共出口(npm 包入口;D-N2)。
|
|
3
|
+
* 外部消费者从 "." 导入;内部(app/测试)仍走子路径 @qing3a/flow-rpa-engine/src/*.js。
|
|
4
|
+
*/
|
|
5
|
+
export { parseFlowJson, FlowSchema, StepSchema, VerifySchema, STEP_TYPES } from './schema.js';
|
|
6
|
+
export { parseFlow, validate, FlowError, flowParseError, flowInvalidError } from './validate.js';
|
|
7
|
+
export { runFlow, ExecError } from './executor.js';
|
|
8
|
+
export { fromFlowResult } from './record.js';
|
|
9
|
+
export { RunStore, nowIso } from './storage.js';
|
|
10
|
+
export { SuggestionStore, learnFromRun } from './learning.js';
|
|
11
|
+
export { LocalPlatform, MIN_SAMPLE_THRESHOLD } from './export.js';
|
|
12
|
+
export { PerfGate } from './bench.js';
|
|
13
|
+
export { CooldownGate, SiteGate, hostOf, GLOBAL_INTER_MIN_SECS, waitDurationLabel } from './gate.js';
|
|
14
|
+
export { PlatformClient, pkgUpdate, localFlowVersion, verifyHash } from './platform.js';
|
|
15
|
+
export { defaultProfileFile, loadSimProfile } from './simprofile.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAEvF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA"}
|