clearcote 0.9.2 → 0.10.1
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/humanize.d.ts +2 -3
- package/dist/humanize.d.ts.map +1 -1
- package/dist/humanize.js +397 -60
- package/dist/humanize.js.map +1 -1
- package/package.json +1 -1
package/dist/humanize.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import type { Browser, BrowserContext, Page } from "playwright-core";
|
|
2
2
|
export interface HumanizeOptions {
|
|
3
|
-
/**
|
|
3
|
+
/** Humanize all input (move/click/drag/scroll/type) as native trusted events. */
|
|
4
4
|
humanize?: boolean;
|
|
5
5
|
/** Show a red cursor dot that tracks the motion (visualization). */
|
|
6
6
|
showCursor?: boolean;
|
|
7
7
|
}
|
|
8
8
|
/** Overlay: a red dot that follows real mousemove events. Idempotent IIFE so it works both as
|
|
9
|
-
* an addInitScript source string AND when passed to page.evaluate
|
|
10
|
-
* string as an uncalled expression — an IIFE actually runs). */
|
|
9
|
+
* an addInitScript source string AND when passed to page.evaluate. */
|
|
11
10
|
export declare const CURSOR_OVERLAY = "(() => {\n if (window.__clearcoteCursor) return; window.__clearcoteCursor = 1;\n const make = () => {\n if (document.getElementById('__clearcote_cursor')) return;\n const d = document.createElement('div'); d.id = '__clearcote_cursor';\n d.style.cssText = 'position:fixed;left:0;top:0;width:20px;height:20px;margin:-10px 0 0 -10px;' +\n 'border-radius:50%;border:2px solid #ff3b3b;background:rgba(255,59,59,.22);' +\n 'box-shadow:0 0 10px rgba(255,59,59,.6);pointer-events:none;z-index:2147483647';\n (document.body || document.documentElement).appendChild(d);\n };\n if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', make); else make();\n document.addEventListener('mousemove', (e) => {\n const d = document.getElementById('__clearcote_cursor');\n if (d) { d.style.left = e.clientX + 'px'; d.style.top = e.clientY + 'px'; }\n }, true);\n})();";
|
|
12
11
|
/** Wrap a single page's input methods + (optionally) inject the cursor overlay. */
|
|
13
12
|
export declare function attachHumanize(browser: Browser, page: Page, opts: HumanizeOptions): Promise<void>;
|
package/dist/humanize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanize.d.ts","sourceRoot":"","sources":["../src/humanize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"humanize.d.ts","sourceRoot":"","sources":["../src/humanize.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAW,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE9E,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;sEACsE;AACtE,eAAO,MAAM,cAAc,o5BAerB,CAAC;AA+BP,mFAAmF;AACnF,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+OvG;AAiGD,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAc7E;AAED,0FAA0F;AAC1F,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GACvE,IAAI,CAQN"}
|
package/dist/humanize.js
CHANGED
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
// Humanized input + cursor visualization.
|
|
2
2
|
//
|
|
3
|
-
// `humanize: true`
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
3
|
+
// `humanize: true` installs ONE consistent human-input standard covering moving, clicking,
|
|
4
|
+
// dragging, scrolling and typing — dispatched as native trusted input (isTrusted===true,
|
|
5
|
+
// navigator.webdriver stays false). It works whether you drive the page directly or via
|
|
6
|
+
// locators:
|
|
7
|
+
// page level — page.click / hover / dblclick / type / fill / press, page.mouse.move /
|
|
8
|
+
// click / wheel and held-button drags (down -> move -> up), page.keyboard.type
|
|
9
|
+
// locator level — locator.click / type / fill / hover / dblclick / press /
|
|
10
|
+
// pressSequentially / clear / check / uncheck / tap / dragTo (routed through
|
|
11
|
+
// the humanized page methods; main-frame locators only, native fallback)
|
|
12
|
+
// `showCursor: true` — injects a red cursor dot that follows the real mousemove events.
|
|
8
13
|
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
14
|
+
// Mouse moves build an eased, slightly bowed cubic-bezier path SDK-side from the tracked cursor
|
|
15
|
+
// position (continuous — no snap back to 0,0) using Playwright's NATIVE mouse.move. Because it is
|
|
16
|
+
// native input, the button state is carried: down() -> move() -> up() is a real held-button drag
|
|
17
|
+
// (slider captchas work) with no separate CDP channel to desync. Typing goes key-by-key through
|
|
18
|
+
// the native keyboard (trusted; shift handled by the engine) with human inter-key timing. No
|
|
19
|
+
// special binary command required.
|
|
11
20
|
/** Overlay: a red dot that follows real mousemove events. Idempotent IIFE so it works both as
|
|
12
|
-
* an addInitScript source string AND when passed to page.evaluate
|
|
13
|
-
* string as an uncalled expression — an IIFE actually runs). */
|
|
21
|
+
* an addInitScript source string AND when passed to page.evaluate. */
|
|
14
22
|
export const CURSOR_OVERLAY = `(() => {
|
|
15
23
|
if (window.__clearcoteCursor) return; window.__clearcoteCursor = 1;
|
|
16
24
|
const make = () => {
|
|
@@ -28,11 +36,33 @@ export const CURSOR_OVERLAY = `(() => {
|
|
|
28
36
|
}, true);
|
|
29
37
|
})();`;
|
|
30
38
|
const rand = (a, b) => a + Math.random() * (b - a);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
40
|
+
// Standard-normal sample (Box–Muller) for sub-pixel path jitter.
|
|
41
|
+
function gauss() {
|
|
42
|
+
let u = 0, v = 0;
|
|
43
|
+
while (u === 0)
|
|
44
|
+
u = Math.random();
|
|
45
|
+
while (v === 0)
|
|
46
|
+
v = Math.random();
|
|
47
|
+
return Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v);
|
|
35
48
|
}
|
|
49
|
+
// Compact keyboard-adjacency map for realistic fat-finger typos.
|
|
50
|
+
const NEARBY = {
|
|
51
|
+
a: "sqwz", b: "vghn", c: "xdfv", d: "sfecx", e: "wrsdf", f: "dgrtcv",
|
|
52
|
+
g: "fhtyb", h: "gjybn", i: "ujko", j: "hkunm", k: "jloi", l: "kop",
|
|
53
|
+
m: "njk", n: "bhjm", o: "iklp", p: "ol", q: "wa", r: "edft",
|
|
54
|
+
s: "awedxz", t: "rfgy", u: "yhji", v: "cfgb", w: "qase", x: "zsdc",
|
|
55
|
+
y: "tghu", z: "asx",
|
|
56
|
+
};
|
|
57
|
+
function nearbyKey(ch) {
|
|
58
|
+
const lo = ch.toLowerCase();
|
|
59
|
+
const n = NEARBY[lo];
|
|
60
|
+
if (!n)
|
|
61
|
+
return ch;
|
|
62
|
+
const w = n[Math.floor(Math.random() * n.length)];
|
|
63
|
+
return ch === ch.toUpperCase() && ch !== ch.toLowerCase() ? w.toUpperCase() : w;
|
|
64
|
+
}
|
|
65
|
+
const SELECT_ALL = "Control+a"; // Clearcote ships a Windows binary; Control is correct.
|
|
36
66
|
/** Wrap a single page's input methods + (optionally) inject the cursor overlay. */
|
|
37
67
|
export async function attachHumanize(browser, page, opts) {
|
|
38
68
|
if (opts.showCursor) {
|
|
@@ -44,66 +74,218 @@ export async function attachHumanize(browser, page, opts) {
|
|
|
44
74
|
}
|
|
45
75
|
if (!opts.humanize)
|
|
46
76
|
return;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
let supported = true;
|
|
50
|
-
const humanizedMove = async (x, y, noClick, duration) => {
|
|
51
|
-
if (!supported)
|
|
52
|
-
return false;
|
|
53
|
-
try {
|
|
54
|
-
bsession ??= await browser.newBrowserCDPSession();
|
|
55
|
-
tid ??= await pageTargetId(page);
|
|
56
|
-
await bsession.send("Browser.humanizedClick", {
|
|
57
|
-
targetId: tid, x: Math.round(x), y: Math.round(y),
|
|
58
|
-
duration: duration ?? rand(0.45, 0.95), noClick,
|
|
59
|
-
});
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
// older binary without the command -> stop trying, fall back to native input
|
|
64
|
-
supported = false;
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
77
|
+
// Tracked cursor position so each move continues from where the last one ended.
|
|
78
|
+
const st = { x: rand(140, 380), y: rand(90, 240) };
|
|
68
79
|
const mouse = page.mouse;
|
|
69
80
|
const nativeMove = mouse.move.bind(mouse);
|
|
70
81
|
const nativeClick = mouse.click.bind(mouse);
|
|
71
82
|
const nativeWheel = mouse.wheel.bind(mouse);
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
83
|
+
// Move from the tracked position to (x, y) along an eased, slightly bowed cubic-bezier path,
|
|
84
|
+
// emitting native (trusted) mousemove events the whole way. Native input means a button pressed
|
|
85
|
+
// via mouse.down() stays pressed across the glide — so the same code powers move AND drag.
|
|
86
|
+
const glide = async (x, y, jitter = 0.6) => {
|
|
87
|
+
const x0 = st.x, y0 = st.y;
|
|
88
|
+
const dx = x - x0, dy = y - y0;
|
|
89
|
+
const dist = Math.hypot(dx, dy);
|
|
90
|
+
const steps = Math.floor(Math.max(10, Math.min(38, dist / 14)));
|
|
91
|
+
const nx = dist > 1e-6 ? -dy / dist : 0;
|
|
92
|
+
const ny = dist > 1e-6 ? dx / dist : 0;
|
|
93
|
+
const bow = (Math.random() * 0.22 - 0.11) * dist;
|
|
94
|
+
const cp1x = x0 + dx * 0.33 + nx * bow, cp1y = y0 + dy * 0.33 + ny * bow;
|
|
95
|
+
const cp2x = x0 + dx * 0.66 + nx * bow, cp2y = y0 + dy * 0.66 + ny * bow;
|
|
96
|
+
for (let i = 1; i <= steps; i++) {
|
|
97
|
+
const t = i / steps;
|
|
98
|
+
const e = t * t * (3 - 2 * t); // smoothstep: slow out of start, slow into target
|
|
99
|
+
const mt = 1 - e;
|
|
100
|
+
const bx = mt * mt * mt * x0 + 3 * mt * mt * e * cp1x + 3 * mt * e * e * cp2x + e * e * e * x;
|
|
101
|
+
const by = mt * mt * mt * y0 + 3 * mt * mt * e * cp1y + 3 * mt * e * e * cp2y + e * e * e * y;
|
|
102
|
+
try {
|
|
103
|
+
await nativeMove(bx + gauss() * jitter, by + gauss() * jitter);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
await sleep(rand(7, 20)); // off-protocol pacing, ~60fps-ish
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
await nativeMove(x, y);
|
|
112
|
+
}
|
|
113
|
+
catch { /* exact landing best-effort */ }
|
|
114
|
+
st.x = x;
|
|
115
|
+
st.y = y;
|
|
75
116
|
};
|
|
76
|
-
mouse.
|
|
77
|
-
|
|
78
|
-
|
|
117
|
+
mouse.move = async (x, y) => { await glide(x, y); };
|
|
118
|
+
mouse.click = async (x, y) => {
|
|
119
|
+
await glide(x, y);
|
|
120
|
+
await sleep(rand(40, 130)); // brief dwell before pressing, like a human
|
|
121
|
+
try {
|
|
122
|
+
await nativeClick(x, y);
|
|
123
|
+
}
|
|
124
|
+
catch { /* best-effort */ }
|
|
79
125
|
};
|
|
80
|
-
// scroll easing
|
|
126
|
+
// scroll easing: break into eased chunks of native wheel deltas
|
|
81
127
|
mouse.wheel = async (dx, dy) => {
|
|
82
128
|
const steps = Math.max(5, Math.min(20, Math.round((Math.abs(dx) + Math.abs(dy)) / 80)));
|
|
83
129
|
const ease = (u) => u * u * (3 - 2 * u);
|
|
84
130
|
let px = 0, py = 0;
|
|
85
131
|
for (let i = 1; i <= steps; i++) {
|
|
86
132
|
const f = ease(i / steps);
|
|
87
|
-
const
|
|
88
|
-
await nativeWheel(
|
|
89
|
-
px =
|
|
90
|
-
py =
|
|
133
|
+
const nxw = Math.round(dx * f), nyw = Math.round(dy * f);
|
|
134
|
+
await nativeWheel(nxw - px, nyw - py);
|
|
135
|
+
px = nxw;
|
|
136
|
+
py = nyw;
|
|
91
137
|
// local sleep, NOT page.waitForTimeout: the latter is a CDP round-trip per call, so it
|
|
92
138
|
// emits protocol traffic bot-detectors (e.g. reCAPTCHA) can score — a self-inflicted tell
|
|
93
139
|
// inside the humanize path. setTimeout is off-protocol.
|
|
94
|
-
await
|
|
140
|
+
await sleep(rand(12, 45));
|
|
95
141
|
}
|
|
96
142
|
if (px !== dx || py !== dy)
|
|
97
143
|
await nativeWheel(dx - px, dy - py);
|
|
98
144
|
};
|
|
145
|
+
// ----------------------------------------------------------------- keyboard
|
|
146
|
+
const keyboard = page.keyboard;
|
|
147
|
+
const nativeKbType = keyboard.type.bind(keyboard);
|
|
148
|
+
const nativeKbPress = keyboard.press.bind(keyboard);
|
|
149
|
+
// Type text key-by-key with human timing. Each char goes through the native keyboard (trusted;
|
|
150
|
+
// shift/symbols handled by the engine), so this stays isTrusted===true.
|
|
151
|
+
const humanTypeText = async (text) => {
|
|
152
|
+
const n = text.length;
|
|
153
|
+
for (let i = 0; i < n; i++) {
|
|
154
|
+
const ch = text[i];
|
|
155
|
+
if (/[a-zA-Z0-9]/.test(ch) && Math.random() < 0.02) {
|
|
156
|
+
try {
|
|
157
|
+
await nativeKbType(nearbyKey(ch));
|
|
158
|
+
await sleep(rand(120, 300));
|
|
159
|
+
await nativeKbPress("Backspace");
|
|
160
|
+
await sleep(rand(80, 200));
|
|
161
|
+
}
|
|
162
|
+
catch { /* typo path best-effort */ }
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
await nativeKbType(ch);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
if (i < n - 1) {
|
|
171
|
+
if (Math.random() < 0.06)
|
|
172
|
+
await sleep(rand(180, 450)); // brief thinking pause
|
|
173
|
+
else
|
|
174
|
+
await sleep(rand(45, 150));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
keyboard.type = async (text) => { await humanTypeText(text); };
|
|
179
|
+
// ------------------------------------------------------- page-level targeted helpers
|
|
180
|
+
const isFocused = async (selector) => {
|
|
181
|
+
try {
|
|
182
|
+
return await page.evaluate((s) => {
|
|
183
|
+
const e = globalThis.document.querySelector(s);
|
|
184
|
+
return !!e && e === globalThis.document.activeElement;
|
|
185
|
+
}, selector);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
const pointFor = async (selector, timeout) => {
|
|
192
|
+
const loc = page.locator(selector).first();
|
|
193
|
+
await loc.waitFor({ state: "visible", timeout });
|
|
194
|
+
await loc.scrollIntoViewIfNeeded({ timeout });
|
|
195
|
+
if (!(await loc.isEnabled()))
|
|
196
|
+
return null;
|
|
197
|
+
let box = await loc.boundingBox();
|
|
198
|
+
if (!box)
|
|
199
|
+
return null;
|
|
200
|
+
await sleep(50); // stability: a box that's still moving = an animation in flight
|
|
201
|
+
const box2 = await loc.boundingBox();
|
|
202
|
+
if (!box2 || Math.abs(box2.x - box.x) > 1 || Math.abs(box2.y - box.y) > 1)
|
|
203
|
+
return null;
|
|
204
|
+
box = box2;
|
|
205
|
+
return { x: box.x + box.width * rand(0.3, 0.7), y: box.y + box.height * rand(0.3, 0.7) };
|
|
206
|
+
};
|
|
207
|
+
const focusClick = async (selector, timeout) => {
|
|
208
|
+
const pt = await pointFor(selector, timeout);
|
|
209
|
+
if (!pt)
|
|
210
|
+
return false;
|
|
211
|
+
await glide(pt.x, pt.y);
|
|
212
|
+
await sleep(rand(40, 130));
|
|
213
|
+
await nativeClick(pt.x, pt.y);
|
|
214
|
+
return true;
|
|
215
|
+
};
|
|
216
|
+
const nativePageType = page.type ? page.type.bind(page) : null;
|
|
217
|
+
const nativePageFill = page.fill.bind(page);
|
|
218
|
+
const nativePagePress = page.press.bind(page);
|
|
219
|
+
const nativePageDblclick = page.dblclick.bind(page);
|
|
220
|
+
page.type = async (selector, text, options = {}) => {
|
|
221
|
+
try {
|
|
222
|
+
const timeout = options.timeout ?? 30000;
|
|
223
|
+
if (!(await isFocused(selector))) {
|
|
224
|
+
if (!(await focusClick(selector, timeout))) {
|
|
225
|
+
return nativePageType ? nativePageType(selector, text, options) : nativePageFill(selector, text, options);
|
|
226
|
+
}
|
|
227
|
+
await sleep(rand(40, 120));
|
|
228
|
+
}
|
|
229
|
+
await humanTypeText(text);
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return nativePageType ? nativePageType(selector, text, options) : nativePageFill(selector, text, options);
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
page.fill = async (selector, value, options = {}) => {
|
|
236
|
+
try {
|
|
237
|
+
const timeout = options.timeout ?? 30000;
|
|
238
|
+
if (value.length > 200)
|
|
239
|
+
return nativePageFill(selector, value, options); // bulk -> atomic
|
|
240
|
+
if (!(await focusClick(selector, timeout)))
|
|
241
|
+
return nativePageFill(selector, value, options);
|
|
242
|
+
await sleep(rand(40, 120));
|
|
243
|
+
try {
|
|
244
|
+
await nativeKbPress(SELECT_ALL);
|
|
245
|
+
await sleep(rand(30, 80));
|
|
246
|
+
await nativeKbPress("Backspace");
|
|
247
|
+
await sleep(rand(40, 120));
|
|
248
|
+
}
|
|
249
|
+
catch { /* clear best-effort */ }
|
|
250
|
+
await humanTypeText(value);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return nativePageFill(selector, value, options);
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
page.dblclick = async (selector, options = {}) => {
|
|
257
|
+
try {
|
|
258
|
+
const timeout = options.timeout ?? 30000;
|
|
259
|
+
const pt = await pointFor(selector, timeout);
|
|
260
|
+
if (!pt)
|
|
261
|
+
return nativePageDblclick(selector, options);
|
|
262
|
+
await glide(pt.x, pt.y);
|
|
263
|
+
await sleep(rand(40, 130));
|
|
264
|
+
await nativeClick(pt.x, pt.y, { clickCount: 2, delay: rand(40, 90) });
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
return nativePageDblclick(selector, options);
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
page.press = async (selector, key, options = {}) => {
|
|
271
|
+
try {
|
|
272
|
+
const timeout = options.timeout ?? 30000;
|
|
273
|
+
if (!(await isFocused(selector))) {
|
|
274
|
+
if (!(await focusClick(selector, timeout)))
|
|
275
|
+
return nativePagePress(selector, key, options);
|
|
276
|
+
await sleep(rand(40, 120));
|
|
277
|
+
}
|
|
278
|
+
await nativeKbPress(key);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return nativePagePress(selector, key, options);
|
|
282
|
+
}
|
|
283
|
+
};
|
|
99
284
|
const wrapTargeted = (name, noClick) => {
|
|
100
285
|
const orig = page[name].bind(page);
|
|
101
286
|
page[name] = async (selector, options = {}) => {
|
|
102
|
-
// Actionability pre-flight before a TRUSTED humanized click:
|
|
103
|
-
//
|
|
104
|
-
// event at a point, so without these checks it could fire under a cookie banner/overlay or
|
|
105
|
-
// mid-animation. Each check falls back to the native click (which has its own actionability
|
|
106
|
-
// waits), so this only improves — it never regresses.
|
|
287
|
+
// Actionability pre-flight before a TRUSTED humanized click: visible+enabled+stable+
|
|
288
|
+
// not-covered, else fall back to the native click (which has its own waits) — only improves.
|
|
107
289
|
try {
|
|
108
290
|
const timeout = options.timeout ?? 30000;
|
|
109
291
|
const loc = page.locator(selector).first();
|
|
@@ -114,8 +296,7 @@ export async function attachHumanize(browser, page, opts) {
|
|
|
114
296
|
let box = await loc.boundingBox();
|
|
115
297
|
if (!box)
|
|
116
298
|
return orig(selector, options);
|
|
117
|
-
|
|
118
|
-
await new Promise((r) => setTimeout(r, 50));
|
|
299
|
+
await sleep(50);
|
|
119
300
|
const box2 = await loc.boundingBox();
|
|
120
301
|
if (!box2 || Math.abs(box2.x - box.x) > 1 || Math.abs(box2.y - box.y) > 1) {
|
|
121
302
|
return orig(selector, options);
|
|
@@ -123,8 +304,6 @@ export async function attachHumanize(browser, page, opts) {
|
|
|
123
304
|
box = box2;
|
|
124
305
|
const x = box.x + box.width * rand(0.3, 0.7);
|
|
125
306
|
const y = box.y + box.height * rand(0.3, 0.7);
|
|
126
|
-
// covered-by: don't fire a trusted click at a point some overlay owns. The callback runs
|
|
127
|
-
// in the browser; this is a Node tsconfig (no DOM lib), so reach document via globalThis.
|
|
128
307
|
try {
|
|
129
308
|
const handle = await loc.elementHandle();
|
|
130
309
|
const covered = handle &&
|
|
@@ -135,12 +314,13 @@ export async function attachHumanize(browser, page, opts) {
|
|
|
135
314
|
if (covered)
|
|
136
315
|
return orig(selector, options); // covered -> let PW wait for it on top
|
|
137
316
|
}
|
|
138
|
-
catch {
|
|
139
|
-
|
|
317
|
+
catch { /* covered-by check best-effort */ }
|
|
318
|
+
await glide(x, y);
|
|
319
|
+
if (!noClick) {
|
|
320
|
+
await sleep(rand(40, 130));
|
|
321
|
+
await nativeClick(x, y);
|
|
140
322
|
}
|
|
141
|
-
|
|
142
|
-
return;
|
|
143
|
-
return orig(selector, options);
|
|
323
|
+
return;
|
|
144
324
|
}
|
|
145
325
|
catch {
|
|
146
326
|
return orig(selector, options);
|
|
@@ -149,6 +329,163 @@ export async function attachHumanize(browser, page, opts) {
|
|
|
149
329
|
};
|
|
150
330
|
wrapTargeted("click", false);
|
|
151
331
|
wrapTargeted("hover", true);
|
|
332
|
+
// Marker the Locator-class patch keys off: humanize is active for THIS page.
|
|
333
|
+
page._clearcoteHumanized = true;
|
|
334
|
+
patchLocatorClass(page.locator("html"));
|
|
335
|
+
}
|
|
336
|
+
// --------------------------------------------------------------------------- locator patch
|
|
337
|
+
let locatorPatched = false;
|
|
338
|
+
/** Patch the Locator prototype once so locator.* interactions route through the humanized page.*
|
|
339
|
+
* methods. Each is a no-op unless the locator's page has humanize active AND the locator targets
|
|
340
|
+
* the main frame; anything else (frame locators, exotic selectors, errors) falls through to the
|
|
341
|
+
* original Playwright behaviour. Composes if another library already patched the prototype. */
|
|
342
|
+
function patchLocatorClass(sample) {
|
|
343
|
+
if (locatorPatched)
|
|
344
|
+
return;
|
|
345
|
+
locatorPatched = true;
|
|
346
|
+
const proto = Object.getPrototypeOf(sample);
|
|
347
|
+
if (!proto)
|
|
348
|
+
return;
|
|
349
|
+
const oFill = proto.fill, oClick = proto.click, oType = proto.type, oDbl = proto.dblclick, oHover = proto.hover, oPress = proto.press, oPressSeq = proto.pressSequentially, oClear = proto.clear, oTap = proto.tap, oCheck = proto.check, oUncheck = proto.uncheck, oDragTo = proto.dragTo;
|
|
350
|
+
const on = (self) => {
|
|
351
|
+
const pg = self.page();
|
|
352
|
+
if (!pg || !pg._clearcoteHumanized)
|
|
353
|
+
return false;
|
|
354
|
+
try {
|
|
355
|
+
return self._frame === pg.mainFrame();
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
const sel = (self) => self._selector;
|
|
362
|
+
const fwd = (kw) => (kw && kw.timeout != null ? { timeout: kw.timeout } : {});
|
|
363
|
+
proto.fill = async function (value, kw = {}) {
|
|
364
|
+
if (on(this)) {
|
|
365
|
+
try {
|
|
366
|
+
return await this.page().fill(sel(this), value, fwd(kw));
|
|
367
|
+
}
|
|
368
|
+
catch { /* fall back */ }
|
|
369
|
+
}
|
|
370
|
+
return oFill.call(this, value, kw);
|
|
371
|
+
};
|
|
372
|
+
proto.click = async function (kw = {}) {
|
|
373
|
+
if (on(this)) {
|
|
374
|
+
try {
|
|
375
|
+
return await this.page().click(sel(this), fwd(kw));
|
|
376
|
+
}
|
|
377
|
+
catch { /* fall back */ }
|
|
378
|
+
}
|
|
379
|
+
return oClick.call(this, kw);
|
|
380
|
+
};
|
|
381
|
+
proto.type = async function (text, kw = {}) {
|
|
382
|
+
if (on(this)) {
|
|
383
|
+
try {
|
|
384
|
+
return await this.page().type(sel(this), text, fwd(kw));
|
|
385
|
+
}
|
|
386
|
+
catch { /* fall back */ }
|
|
387
|
+
}
|
|
388
|
+
return oType.call(this, text, kw);
|
|
389
|
+
};
|
|
390
|
+
proto.dblclick = async function (kw = {}) {
|
|
391
|
+
if (on(this)) {
|
|
392
|
+
try {
|
|
393
|
+
return await this.page().dblclick(sel(this), fwd(kw));
|
|
394
|
+
}
|
|
395
|
+
catch { /* fall back */ }
|
|
396
|
+
}
|
|
397
|
+
return oDbl.call(this, kw);
|
|
398
|
+
};
|
|
399
|
+
proto.hover = async function (kw = {}) {
|
|
400
|
+
if (on(this)) {
|
|
401
|
+
try {
|
|
402
|
+
return await this.page().hover(sel(this), fwd(kw));
|
|
403
|
+
}
|
|
404
|
+
catch { /* fall back */ }
|
|
405
|
+
}
|
|
406
|
+
return oHover.call(this, kw);
|
|
407
|
+
};
|
|
408
|
+
proto.press = async function (key, kw = {}) {
|
|
409
|
+
if (on(this)) {
|
|
410
|
+
try {
|
|
411
|
+
return await this.page().press(sel(this), key, fwd(kw));
|
|
412
|
+
}
|
|
413
|
+
catch { /* fall back */ }
|
|
414
|
+
}
|
|
415
|
+
return oPress.call(this, key, kw);
|
|
416
|
+
};
|
|
417
|
+
proto.pressSequentially = async function (text, kw = {}) {
|
|
418
|
+
if (on(this)) {
|
|
419
|
+
try {
|
|
420
|
+
return await this.page().type(sel(this), text, fwd(kw));
|
|
421
|
+
}
|
|
422
|
+
catch { /* fall back */ }
|
|
423
|
+
}
|
|
424
|
+
return oPressSeq.call(this, text, kw);
|
|
425
|
+
};
|
|
426
|
+
proto.clear = async function (kw = {}) {
|
|
427
|
+
if (on(this)) {
|
|
428
|
+
try {
|
|
429
|
+
return await this.page().fill(sel(this), "", fwd(kw));
|
|
430
|
+
}
|
|
431
|
+
catch { /* fall back */ }
|
|
432
|
+
}
|
|
433
|
+
return oClear.call(this, kw);
|
|
434
|
+
};
|
|
435
|
+
proto.tap = async function (kw = {}) {
|
|
436
|
+
if (on(this)) {
|
|
437
|
+
try {
|
|
438
|
+
return await this.page().click(sel(this), fwd(kw));
|
|
439
|
+
}
|
|
440
|
+
catch { /* fall back */ }
|
|
441
|
+
}
|
|
442
|
+
return oTap.call(this, kw);
|
|
443
|
+
};
|
|
444
|
+
proto.check = async function (kw = {}) {
|
|
445
|
+
if (on(this)) {
|
|
446
|
+
try {
|
|
447
|
+
if (!(await this.isChecked()))
|
|
448
|
+
return await this.page().click(sel(this), fwd(kw));
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
catch { /* fall back */ }
|
|
452
|
+
}
|
|
453
|
+
return oCheck.call(this, kw);
|
|
454
|
+
};
|
|
455
|
+
proto.uncheck = async function (kw = {}) {
|
|
456
|
+
if (on(this)) {
|
|
457
|
+
try {
|
|
458
|
+
if (await this.isChecked())
|
|
459
|
+
return await this.page().click(sel(this), fwd(kw));
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
catch { /* fall back */ }
|
|
463
|
+
}
|
|
464
|
+
return oUncheck.call(this, kw);
|
|
465
|
+
};
|
|
466
|
+
proto.dragTo = async function (target, kw = {}) {
|
|
467
|
+
if (on(this)) {
|
|
468
|
+
try {
|
|
469
|
+
const pg = this.page();
|
|
470
|
+
const sb = await this.boundingBox();
|
|
471
|
+
const tb = await target.boundingBox();
|
|
472
|
+
if (sb && tb) {
|
|
473
|
+
const sx = sb.x + sb.width / 2, sy = sb.y + sb.height / 2;
|
|
474
|
+
const tx = tb.x + tb.width / 2, ty = tb.y + tb.height / 2;
|
|
475
|
+
await pg.mouse.move(sx, sy);
|
|
476
|
+
await sleep(rand(100, 200));
|
|
477
|
+
await pg.mouse.down();
|
|
478
|
+
await sleep(rand(80, 150)); // native -> button held across glide
|
|
479
|
+
await pg.mouse.move(tx, ty);
|
|
480
|
+
await sleep(rand(80, 150)); // humanized held-button drag
|
|
481
|
+
await pg.mouse.up();
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
catch { /* fall back */ }
|
|
486
|
+
}
|
|
487
|
+
return oDragTo.call(this, target, kw);
|
|
488
|
+
};
|
|
152
489
|
}
|
|
153
490
|
/** Install humanize/showCursor on a browser: wraps newPage/newContext so every page is covered. */
|
|
154
491
|
export function installHumanize(browser, opts) {
|
package/dist/humanize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanize.js","sourceRoot":"","sources":["../src/humanize.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"humanize.js","sourceRoot":"","sources":["../src/humanize.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clearcote",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Playwright drop-in for the Clearcote anti-fingerprint Chromium build. launch() returns a standard Playwright Browser backed by the verified Clearcote binary, which is auto-downloaded and SHA-256 checked.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|