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.
@@ -1,13 +1,12 @@
1
1
  import type { Browser, BrowserContext, Page } from "playwright-core";
2
2
  export interface HumanizeOptions {
3
- /** Route clicks/moves/scroll through the engine's humanized (bezier, trusted) input. */
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 (Node treats a bare arrow
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>;
@@ -1 +1 @@
1
- {"version":3,"file":"humanize.d.ts","sourceRoot":"","sources":["../src/humanize.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAc,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEjF,MAAM,WAAW,eAAe;IAC9B,wFAAwF;IACxF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;gEAEgE;AAChE,eAAO,MAAM,cAAc,o5BAerB,CAAC;AAUP,mFAAmF;AACnF,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GvG;AAED,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"}
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` — routes page.click/hover/mouse.move/mouse.click through the engine's
4
- // `Browser.humanizedClick` CDP command (real trusted WebMouseEvent along a cubic-bezier path,
5
- // isTrusted===true, navigator.webdriver stays false), and eases mouse.wheel SDK-side.
6
- // `showCursor: true` — injects a red cursor dot that follows the real mousemove events the engine
7
- // fires, so you can watch the motion (cross-platform; no native overlay needed).
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
- // Requires a Clearcote binary that exposes Browser.humanizedClick (the humanized-input engine
10
- // build). On an older binary the command is absent; humanize falls back to native Playwright input.
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 (Node treats a bare arrow
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
- async function pageTargetId(page) {
32
- const s = await page.context().newCDPSession(page);
33
- const info = await s.send("Target.getTargetInfo");
34
- return info.targetInfo.targetId;
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
- let bsession = null;
48
- let tid = null;
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
- mouse.move = async (x, y, options) => {
73
- if (!(await humanizedMove(x, y, true)))
74
- return nativeMove(x, y, options);
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.click = async (x, y, options) => {
77
- if (!(await humanizedMove(x, y, false)))
78
- return nativeClick(x, y, options);
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 (engine humanizedClick doesn't cover wheel): break into eased chunks
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 nx = Math.round(dx * f), ny = Math.round(dy * f);
88
- await nativeWheel(nx - px, ny - py);
89
- px = nx;
90
- py = ny;
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 new Promise((r) => setTimeout(r, rand(12, 45)));
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: a native Playwright click waits
103
- // for visible+enabled+stable+receives-events; the humanized path dispatches a real OS-level
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
- // stability: a box that's still moving = an animation in flight -> let PW settle it
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
- /* covered-by check best-effort */
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
- if (await humanizedMove(x, y, noClick))
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) {
@@ -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.9.2",
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",