@skrillex1224/playwright-toolkit 3.0.38 → 3.0.39

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/index.js CHANGED
@@ -227,7 +227,7 @@ var ActorInfo = {
227
227
  erine: createActorInfo({
228
228
  key: "erine",
229
229
  name: "\u6587\u5FC3\u4E00\u8A00",
230
- domain: "wenxin.baidu.com",
230
+ domain: "xiaoyan.baidu.com",
231
231
  path: "/",
232
232
  share: {
233
233
  mode: "custom",
@@ -377,18 +377,18 @@ var fallbackLog = {
377
377
  error: (...args) => console.error(...args),
378
378
  debug: (...args) => console.debug ? console.debug(...args) : console.log(...args)
379
379
  };
380
- var resolveLogMethod = (logger18, name) => {
381
- if (logger18 && typeof logger18[name] === "function") {
382
- return logger18[name].bind(logger18);
380
+ var resolveLogMethod = (logger17, name) => {
381
+ if (logger17 && typeof logger17[name] === "function") {
382
+ return logger17[name].bind(logger17);
383
383
  }
384
- if (name === "warning" && logger18 && typeof logger18.warn === "function") {
385
- return logger18.warn.bind(logger18);
384
+ if (name === "warning" && logger17 && typeof logger17.warn === "function") {
385
+ return logger17.warn.bind(logger17);
386
386
  }
387
387
  return fallbackLog[name];
388
388
  };
389
389
  var defaultLogger = null;
390
- var setDefaultLogger = (logger18) => {
391
- defaultLogger = logger18;
390
+ var setDefaultLogger = (logger17) => {
391
+ defaultLogger = logger17;
392
392
  };
393
393
  var resolveLogger = (explicitLogger) => {
394
394
  if (explicitLogger && typeof explicitLogger.info === "function") {
@@ -415,8 +415,8 @@ var colorize = (text, color) => {
415
415
  var createBaseLogger = (prefix = "", explicitLogger) => {
416
416
  const name = prefix ? String(prefix) : "";
417
417
  const dispatch = (methodName, icon, message, color) => {
418
- const logger18 = resolveLogger(explicitLogger);
419
- const logFn = resolveLogMethod(logger18, methodName);
418
+ const logger17 = resolveLogger(explicitLogger);
419
+ const logFn = resolveLogMethod(logger17, methodName);
420
420
  const timestamp = colorize(`[${formatTimestamp()}]`, ANSI.gray);
421
421
  const line = formatLine(name, icon, message);
422
422
  const coloredLine = colorize(line, color);
@@ -1593,16 +1593,12 @@ var ProxyMeterRuntime = {
1593
1593
  getProxyMeterSnapshot
1594
1594
  };
1595
1595
 
1596
- // src/runtime-env.js
1597
- import picomatch from "picomatch";
1598
-
1599
1596
  // src/internals/constants.js
1600
1597
  var PageRuntimeStateKey = "__playwright_toolkit_runtime_state__";
1601
1598
 
1602
1599
  // src/runtime-env.js
1603
1600
  var BROWSER_PROFILE_SCHEMA_VERSION = 1;
1604
1601
  var SUPPORTED_CLOAK_FINGERPRINT_PLATFORMS = /* @__PURE__ */ new Set(["linux", "macos", "windows"]);
1605
- var logger3 = createInternalLogger("RuntimeEnv");
1606
1602
  var rememberedRuntimeState = null;
1607
1603
  var isPlainObject = (value) => value && typeof value === "object" && !Array.isArray(value);
1608
1604
  var normalizeKnownDevice = (value) => {
@@ -1759,18 +1755,6 @@ var uniqueStrings = (value) => {
1759
1755
  });
1760
1756
  return result;
1761
1757
  };
1762
- var buildApplyExcludeMatcher = (patterns = []) => {
1763
- const normalized = (Array.isArray(patterns) ? patterns : []).map((pattern) => String(pattern || "").trim()).filter(Boolean);
1764
- return normalized.length > 0 ? picomatch(normalized, { nocase: true }) : () => false;
1765
- };
1766
- var filterApplyEntries = (entries = {}, matcher = () => false) => Object.entries(entries || {}).reduce((acc, [key, value]) => {
1767
- if (matcher(key)) acc.skipped.push(key);
1768
- else acc.payload[key] = value;
1769
- return acc;
1770
- }, { payload: {}, skipped: [] });
1771
- var logApplySkipped = (type, keys = []) => {
1772
- if (keys.length > 0) logger3.info(`applyToPage \u8DF3\u8FC7\u6CE8\u5165 ${type}: ${keys.join(", ")}`);
1773
- };
1774
1758
  var normalizeHttpUrlList = (value) => uniqueStrings(
1775
1759
  (Array.isArray(value) ? value : [value]).map((item) => normalizeHttpUrl(item)).filter(Boolean)
1776
1760
  );
@@ -2242,24 +2226,9 @@ var RuntimeEnv = {
2242
2226
  writable: true,
2243
2227
  value: state2
2244
2228
  });
2245
- const exclude = options?.exclude || {};
2246
- const localStorageResult = filterApplyEntries(
2247
- state2.localStorage || {},
2248
- buildApplyExcludeMatcher(exclude.local_storage)
2249
- );
2250
- const sessionStorageResult = filterApplyEntries(
2251
- state2.sessionStorage || {},
2252
- buildApplyExcludeMatcher(exclude.session_storage)
2253
- );
2254
- const cookieMatcher = buildApplyExcludeMatcher(exclude.cookies);
2255
- const skippedCookies = [];
2256
- const localStorage = localStorageResult.payload;
2257
- const sessionStorage = sessionStorageResult.payload;
2258
- const cookies = (state2.cookies || []).filter((cookie) => {
2259
- if (!cookieMatcher(cookie?.name)) return true;
2260
- skippedCookies.push(cookie.name);
2261
- return false;
2262
- }).map((cookie) => {
2229
+ const localStorage = state2.localStorage || {};
2230
+ const sessionStorage = state2.sessionStorage || {};
2231
+ const cookies = (state2.cookies || []).map((cookie) => {
2263
2232
  const normalized = { ...cookie };
2264
2233
  if (!normalized.path) {
2265
2234
  normalized.path = "/";
@@ -2269,9 +2238,6 @@ var RuntimeEnv = {
2269
2238
  }
2270
2239
  return normalized;
2271
2240
  }).filter(Boolean);
2272
- logApplySkipped("cookies", skippedCookies);
2273
- logApplySkipped("local_storage", localStorageResult.skipped);
2274
- logApplySkipped("session_storage", sessionStorageResult.skipped);
2275
2241
  if (cookies.length > 0) {
2276
2242
  await page.context().addCookies(cookies);
2277
2243
  }
@@ -2331,7 +2297,7 @@ var RuntimeEnv = {
2331
2297
  };
2332
2298
 
2333
2299
  // src/apify-kit.js
2334
- var logger4 = createInternalLogger("ApifyKit");
2300
+ var logger3 = createInternalLogger("ApifyKit");
2335
2301
  var hasFleetAtHomeFlag = () => String(process.env.FLEET_AT_HOME || "").trim() !== "";
2336
2302
  var resolveRuntimeContext = (input) => {
2337
2303
  const rememberedState = RuntimeEnv.peekRememberedState();
@@ -2417,7 +2383,7 @@ var captureAutoEnvPatch = async (page, runtimeContext) => {
2417
2383
  { actor: runtimeContext.actor }
2418
2384
  );
2419
2385
  } catch (error) {
2420
- logger4.warn(`\u81EA\u52A8\u91C7\u96C6 env_patch \u5931\u8D25: ${error?.message || error}`);
2386
+ logger3.warn(`\u81EA\u52A8\u91C7\u96C6 env_patch \u5931\u8D25: ${error?.message || error}`);
2421
2387
  return null;
2422
2388
  }
2423
2389
  };
@@ -2462,29 +2428,29 @@ async function createApifyKit() {
2462
2428
  const { times: retryTimes = 0, mode: retryMode = "direct", before: beforeRetry } = retry;
2463
2429
  const executeAction = async (attemptNumber) => {
2464
2430
  const attemptLabel = attemptNumber > 0 ? ` (\u91CD\u8BD5 #${attemptNumber})` : "";
2465
- logger4.start(`[Step] ${step}${attemptLabel}`);
2431
+ logger3.start(`[Step] ${step}${attemptLabel}`);
2466
2432
  try {
2467
2433
  const result = await actionFn();
2468
- logger4.success(`[Step] ${step}${attemptLabel}`);
2434
+ logger3.success(`[Step] ${step}${attemptLabel}`);
2469
2435
  return { success: true, result };
2470
2436
  } catch (error) {
2471
- logger4.fail(`[Step] ${step}${attemptLabel}`, error);
2437
+ logger3.fail(`[Step] ${step}${attemptLabel}`, error);
2472
2438
  return { success: false, error };
2473
2439
  }
2474
2440
  };
2475
2441
  const prepareForRetry = async (attemptNumber) => {
2476
2442
  if (typeof beforeRetry === "function") {
2477
- logger4.start(`[RetryStep] \u6267\u884C\u81EA\u5B9A\u4E49 before \u94A9\u5B50 (\u7B2C ${attemptNumber} \u6B21\u91CD\u8BD5)`);
2443
+ logger3.start(`[RetryStep] \u6267\u884C\u81EA\u5B9A\u4E49 before \u94A9\u5B50 (\u7B2C ${attemptNumber} \u6B21\u91CD\u8BD5)`);
2478
2444
  await beforeRetry(page, attemptNumber);
2479
- logger4.success(`[RetryStep] before \u94A9\u5B50\u5B8C\u6210`);
2445
+ logger3.success(`[RetryStep] before \u94A9\u5B50\u5B8C\u6210`);
2480
2446
  } else if (retryMode === "refresh") {
2481
- logger4.start(`[RetryStep] \u5237\u65B0\u9875\u9762 (\u7B2C ${attemptNumber} \u6B21\u91CD\u8BD5)`);
2447
+ logger3.start(`[RetryStep] \u5237\u65B0\u9875\u9762 (\u7B2C ${attemptNumber} \u6B21\u91CD\u8BD5)`);
2482
2448
  await page.reload({ waitUntil: "commit" });
2483
- logger4.success(`[RetryStep] \u9875\u9762\u5237\u65B0\u5B8C\u6210`);
2449
+ logger3.success(`[RetryStep] \u9875\u9762\u5237\u65B0\u5B8C\u6210`);
2484
2450
  } else {
2485
- logger4.start(`[RetryStep] \u7B49\u5F85 3 \u79D2 (\u7B2C ${attemptNumber} \u6B21\u91CD\u8BD5)`);
2451
+ logger3.start(`[RetryStep] \u7B49\u5F85 3 \u79D2 (\u7B2C ${attemptNumber} \u6B21\u91CD\u8BD5)`);
2486
2452
  await new Promise((resolve) => setTimeout(resolve, 3e3));
2487
- logger4.success(`[RetryStep] \u7B49\u5F85\u5B8C\u6210`);
2453
+ logger3.success(`[RetryStep] \u7B49\u5F85\u5B8C\u6210`);
2488
2454
  }
2489
2455
  };
2490
2456
  let lastResult = await executeAction(0);
@@ -2492,11 +2458,11 @@ async function createApifyKit() {
2492
2458
  return lastResult.result;
2493
2459
  }
2494
2460
  for (let attempt = 1; attempt <= retryTimes; attempt++) {
2495
- logger4.start(`[RetryStep] \u51C6\u5907\u7B2C ${attempt}/${retryTimes} \u6B21\u91CD\u8BD5: ${step}`);
2461
+ logger3.start(`[RetryStep] \u51C6\u5907\u7B2C ${attempt}/${retryTimes} \u6B21\u91CD\u8BD5: ${step}`);
2496
2462
  try {
2497
2463
  await prepareForRetry(attempt);
2498
2464
  } catch (prepareError) {
2499
- logger4.warn(`[RetryStep] \u91CD\u8BD5\u51C6\u5907\u5931\u8D25: ${prepareError.message}`);
2465
+ logger3.warn(`[RetryStep] \u91CD\u8BD5\u51C6\u5907\u5931\u8D25: ${prepareError.message}`);
2500
2466
  continue;
2501
2467
  }
2502
2468
  lastResult = await executeAction(attempt);
@@ -2512,7 +2478,7 @@ async function createApifyKit() {
2512
2478
  try {
2513
2479
  html = await page.content();
2514
2480
  } catch (htmlErr) {
2515
- logger4.warn(`HTML \u91C7\u96C6\u5931\u8D25: ${htmlErr.message}`);
2481
+ logger3.warn(`HTML \u91C7\u96C6\u5931\u8D25: ${htmlErr.message}`);
2516
2482
  }
2517
2483
  }
2518
2484
  try {
@@ -2525,7 +2491,7 @@ async function createApifyKit() {
2525
2491
  base64 = `data:image/jpeg;base64,${buffer.toString("base64")}`;
2526
2492
  }
2527
2493
  } catch (snapErr) {
2528
- logger4.warn(`\u622A\u56FE\u751F\u6210\u5931\u8D25: ${snapErr.message}`);
2494
+ logger3.warn(`\u622A\u56FE\u751F\u6210\u5931\u8D25: ${snapErr.message}`);
2529
2495
  }
2530
2496
  await this.pushFailed(
2531
2497
  finalError,
@@ -2598,7 +2564,7 @@ async function createApifyKit() {
2598
2564
  await Actor2.pushData({
2599
2565
  ...payload
2600
2566
  });
2601
- logger4.success("pushSuccess", "Data pushed");
2567
+ logger3.success("pushSuccess", "Data pushed");
2602
2568
  },
2603
2569
  /**
2604
2570
  * 推送失败数据的通用方法(私有方法,仅供 runStep 内部使用)。
@@ -2639,7 +2605,7 @@ async function createApifyKit() {
2639
2605
  await Actor2.pushData({
2640
2606
  ...payload
2641
2607
  });
2642
- logger4.success("pushFailed", "Error data pushed");
2608
+ logger3.success("pushFailed", "Error data pushed");
2643
2609
  }
2644
2610
  };
2645
2611
  }
@@ -2655,7 +2621,7 @@ var ApifyKit = {
2655
2621
  };
2656
2622
 
2657
2623
  // src/internals/utils.js
2658
- var logger5 = createInternalLogger("InternalUtils");
2624
+ var logger4 = createInternalLogger("InternalUtils");
2659
2625
  var parseCookies = (cookieString, domain) => {
2660
2626
  const cookies = [];
2661
2627
  const pairs = cookieString.split(";").map((c) => c.trim());
@@ -2673,7 +2639,7 @@ var parseCookies = (cookieString, domain) => {
2673
2639
  cookies.push(cookie);
2674
2640
  }
2675
2641
  }
2676
- logger5.success("parseCookies", `parsed ${cookies.length} cookies`);
2642
+ logger4.success("parseCookies", `parsed ${cookies.length} cookies`);
2677
2643
  return cookies;
2678
2644
  };
2679
2645
 
@@ -3511,7 +3477,7 @@ import delay4 from "delay";
3511
3477
  // src/internals/humanize/desktop.js
3512
3478
  import delay2 from "delay";
3513
3479
  import { createCursor } from "ghost-cursor-playwright";
3514
- var logger6 = createInternalLogger("Humanize");
3480
+ var logger5 = createInternalLogger("Humanize");
3515
3481
  var $CursorWeakMap = /* @__PURE__ */ new WeakMap();
3516
3482
  function $GetCursor(page) {
3517
3483
  const cursor = $CursorWeakMap.get(page);
@@ -3539,13 +3505,13 @@ var Humanize = {
3539
3505
  */
3540
3506
  async initializeCursor(page) {
3541
3507
  if ($CursorWeakMap.has(page)) {
3542
- logger6.debug("initializeCursor: cursor already exists, skipping");
3508
+ logger5.debug("initializeCursor: cursor already exists, skipping");
3543
3509
  return;
3544
3510
  }
3545
- logger6.start("initializeCursor", "creating cursor");
3511
+ logger5.start("initializeCursor", "creating cursor");
3546
3512
  const cursor = await createCursor(page);
3547
3513
  $CursorWeakMap.set(page, cursor);
3548
- logger6.success("initializeCursor", "cursor initialized");
3514
+ logger5.success("initializeCursor", "cursor initialized");
3549
3515
  },
3550
3516
  /**
3551
3517
  * 人类化鼠标移动 - 使用 ghost-cursor 移动到指定位置或元素
@@ -3555,17 +3521,17 @@ var Humanize = {
3555
3521
  */
3556
3522
  async humanMove(page, target) {
3557
3523
  const cursor = $GetCursor(page);
3558
- logger6.start("humanMove", `target=${typeof target === "string" ? target : "element/coords"}`);
3524
+ logger5.start("humanMove", `target=${typeof target === "string" ? target : "element/coords"}`);
3559
3525
  try {
3560
3526
  if (typeof target === "string") {
3561
3527
  const element = await page.$(target);
3562
3528
  if (!element) {
3563
- logger6.warn(`humanMove: \u5143\u7D20\u4E0D\u5B58\u5728 ${target}`);
3529
+ logger5.warn(`humanMove: \u5143\u7D20\u4E0D\u5B58\u5728 ${target}`);
3564
3530
  return false;
3565
3531
  }
3566
3532
  const box = await element.boundingBox();
3567
3533
  if (!box) {
3568
- logger6.warn(`humanMove: \u65E0\u6CD5\u83B7\u53D6\u4F4D\u7F6E ${target}`);
3534
+ logger5.warn(`humanMove: \u65E0\u6CD5\u83B7\u53D6\u4F4D\u7F6E ${target}`);
3569
3535
  return false;
3570
3536
  }
3571
3537
  const x = box.x + box.width / 2 + (Math.random() - 0.5) * box.width * 0.2;
@@ -3581,10 +3547,10 @@ var Humanize = {
3581
3547
  await cursor.actions.move({ x, y });
3582
3548
  }
3583
3549
  }
3584
- logger6.success("humanMove");
3550
+ logger5.success("humanMove");
3585
3551
  return true;
3586
3552
  } catch (error) {
3587
- logger6.fail("humanMove", error);
3553
+ logger5.fail("humanMove", error);
3588
3554
  throw error;
3589
3555
  }
3590
3556
  },
@@ -3608,12 +3574,12 @@ var Humanize = {
3608
3574
  maxDurationMs = maxSteps * 220 + 800
3609
3575
  } = options;
3610
3576
  const targetDesc = typeof target === "string" ? target : "ElementHandle";
3611
- logger6.start("humanScroll", `target=${targetDesc}`);
3577
+ logger5.start("humanScroll", `target=${targetDesc}`);
3612
3578
  let element;
3613
3579
  if (typeof target === "string") {
3614
3580
  element = await page.$(target);
3615
3581
  if (!element) {
3616
- logger6.warn(`humanScroll | \u5143\u7D20\u672A\u627E\u5230: ${target}`);
3582
+ logger5.warn(`humanScroll | \u5143\u7D20\u672A\u627E\u5230: ${target}`);
3617
3583
  return { element: null, didScroll: false };
3618
3584
  }
3619
3585
  } else {
@@ -3688,26 +3654,26 @@ var Humanize = {
3688
3654
  try {
3689
3655
  for (let i = 0; i < maxSteps; i++) {
3690
3656
  if (Date.now() - startTime > maxDurationMs) {
3691
- logger6.warn(`humanScroll | \u8D85\u65F6\u4FDD\u62A4\u89E6\u53D1 (${maxDurationMs}ms)`);
3657
+ logger5.warn(`humanScroll | \u8D85\u65F6\u4FDD\u62A4\u89E6\u53D1 (${maxDurationMs}ms)`);
3692
3658
  return { element, didScroll };
3693
3659
  }
3694
3660
  const status = await checkVisibility();
3695
3661
  if (status.code === "VISIBLE") {
3696
3662
  if (status.isFixed) {
3697
- logger6.info("humanScroll | fixed \u5BB9\u5668\u5185\uFF0C\u8DF3\u8FC7\u6EDA\u52A8");
3663
+ logger5.info("humanScroll | fixed \u5BB9\u5668\u5185\uFF0C\u8DF3\u8FC7\u6EDA\u52A8");
3698
3664
  } else {
3699
- logger6.debug("humanScroll | \u5143\u7D20\u53EF\u89C1\u4E14\u65E0\u906E\u6321");
3665
+ logger5.debug("humanScroll | \u5143\u7D20\u53EF\u89C1\u4E14\u65E0\u906E\u6321");
3700
3666
  }
3701
- logger6.success("humanScroll", didScroll ? "\u5DF2\u6EDA\u52A8" : "\u65E0\u9700\u6EDA\u52A8");
3667
+ logger5.success("humanScroll", didScroll ? "\u5DF2\u6EDA\u52A8" : "\u65E0\u9700\u6EDA\u52A8");
3702
3668
  return { element, didScroll };
3703
3669
  }
3704
- logger6.debug(`humanScroll | \u6B65\u9AA4 ${i + 1}/${maxSteps}: ${status.reason} ${status.direction ? `(${status.direction})` : ""}`);
3670
+ logger5.debug(`humanScroll | \u6B65\u9AA4 ${i + 1}/${maxSteps}: ${status.reason} ${status.direction ? `(${status.direction})` : ""}`);
3705
3671
  if (status.code === "OBSTRUCTED" && status.obstruction) {
3706
- logger6.debug(`humanScroll | \u88AB\u4EE5\u4E0B\u5143\u7D20\u906E\u6321 <${status.obstruction.tag} id="${status.obstruction.id}">`);
3672
+ logger5.debug(`humanScroll | \u88AB\u4EE5\u4E0B\u5143\u7D20\u906E\u6321 <${status.obstruction.tag} id="${status.obstruction.id}">`);
3707
3673
  }
3708
3674
  const scrollRect = await getScrollableRect2();
3709
3675
  if (!scrollRect && status.isFixed) {
3710
- logger6.warn("humanScroll | fixed \u5BB9\u5668\u5185\u4E14\u65E0\u53EF\u6EDA\u52A8\u7956\u5148\uFF0C\u8DF3\u8FC7\u6EDA\u52A8");
3676
+ logger5.warn("humanScroll | fixed \u5BB9\u5668\u5185\u4E14\u65E0\u53EF\u6EDA\u52A8\u7956\u5148\uFF0C\u8DF3\u8FC7\u6EDA\u52A8");
3711
3677
  return { element, didScroll };
3712
3678
  }
3713
3679
  const stepMin = scrollRect ? Math.min(minStep, Math.max(60, scrollRect.height * 0.4)) : minStep;
@@ -3743,10 +3709,10 @@ var Humanize = {
3743
3709
  didScroll = true;
3744
3710
  await delay2(this.jitterMs(20 + Math.random() * 40, 0.2));
3745
3711
  }
3746
- logger6.warn(`humanScroll | \u5728 ${maxSteps} \u6B65\u540E\u65E0\u6CD5\u786E\u4FDD\u53EF\u89C1\u6027`);
3712
+ logger5.warn(`humanScroll | \u5728 ${maxSteps} \u6B65\u540E\u65E0\u6CD5\u786E\u4FDD\u53EF\u89C1\u6027`);
3747
3713
  return { element, didScroll };
3748
3714
  } catch (error) {
3749
- logger6.fail("humanScroll", error);
3715
+ logger5.fail("humanScroll", error);
3750
3716
  throw error;
3751
3717
  }
3752
3718
  },
@@ -3764,7 +3730,7 @@ var Humanize = {
3764
3730
  const cursor = $GetCursor(page);
3765
3731
  const { reactionDelay = 250, throwOnMissing = true, scrollIfNeeded = true, restore = false } = options;
3766
3732
  const targetDesc = target == null ? "Current Position" : typeof target === "string" ? target : "ElementHandle";
3767
- logger6.start("humanClick", `target=${targetDesc}`);
3733
+ logger5.start("humanClick", `target=${targetDesc}`);
3768
3734
  const restoreOnce = async () => {
3769
3735
  if (restoreOnce.restored) return;
3770
3736
  restoreOnce.restored = true;
@@ -3773,14 +3739,14 @@ var Humanize = {
3773
3739
  await delay2(this.jitterMs(1e3));
3774
3740
  await restoreOnce.do();
3775
3741
  } catch (restoreError) {
3776
- logger6.warn(`humanClick: \u6062\u590D\u6EDA\u52A8\u4F4D\u7F6E\u5931\u8D25: ${restoreError.message}`);
3742
+ logger5.warn(`humanClick: \u6062\u590D\u6EDA\u52A8\u4F4D\u7F6E\u5931\u8D25: ${restoreError.message}`);
3777
3743
  }
3778
3744
  };
3779
3745
  try {
3780
3746
  if (target == null) {
3781
3747
  await delay2(this.jitterMs(reactionDelay, 0.4));
3782
3748
  await cursor.actions.click();
3783
- logger6.success("humanClick", "Clicked current position");
3749
+ logger5.success("humanClick", "Clicked current position");
3784
3750
  return true;
3785
3751
  }
3786
3752
  let element;
@@ -3790,7 +3756,7 @@ var Humanize = {
3790
3756
  if (throwOnMissing) {
3791
3757
  throw new Error(`\u627E\u4E0D\u5230\u5143\u7D20 ${target}`);
3792
3758
  }
3793
- logger6.warn(`humanClick: \u5143\u7D20\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u70B9\u51FB ${target}`);
3759
+ logger5.warn(`humanClick: \u5143\u7D20\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u70B9\u51FB ${target}`);
3794
3760
  return false;
3795
3761
  }
3796
3762
  } else {
@@ -3806,7 +3772,7 @@ var Humanize = {
3806
3772
  if (throwOnMissing) {
3807
3773
  throw new Error("\u65E0\u6CD5\u83B7\u53D6\u5143\u7D20\u4F4D\u7F6E");
3808
3774
  }
3809
- logger6.warn("humanClick: \u65E0\u6CD5\u83B7\u53D6\u4F4D\u7F6E\uFF0C\u8DF3\u8FC7\u70B9\u51FB");
3775
+ logger5.warn("humanClick: \u65E0\u6CD5\u83B7\u53D6\u4F4D\u7F6E\uFF0C\u8DF3\u8FC7\u70B9\u51FB");
3810
3776
  return false;
3811
3777
  }
3812
3778
  const x = box.x + box.width / 2 + (Math.random() - 0.5) * box.width * 0.3;
@@ -3815,11 +3781,11 @@ var Humanize = {
3815
3781
  await delay2(this.jitterMs(reactionDelay, 0.4));
3816
3782
  await cursor.actions.click();
3817
3783
  await restoreOnce();
3818
- logger6.success("humanClick");
3784
+ logger5.success("humanClick");
3819
3785
  return true;
3820
3786
  } catch (error) {
3821
3787
  await restoreOnce();
3822
- logger6.fail("humanClick", error);
3788
+ logger5.fail("humanClick", error);
3823
3789
  throw error;
3824
3790
  }
3825
3791
  },
@@ -3830,9 +3796,9 @@ var Humanize = {
3830
3796
  */
3831
3797
  async randomSleep(baseMs, jitterPercent = 0.3) {
3832
3798
  const ms = this.jitterMs(baseMs, jitterPercent);
3833
- logger6.start("randomSleep", `base=${baseMs}, actual=${ms}ms`);
3799
+ logger5.start("randomSleep", `base=${baseMs}, actual=${ms}ms`);
3834
3800
  await delay2(ms);
3835
- logger6.success("randomSleep");
3801
+ logger5.success("randomSleep");
3836
3802
  },
3837
3803
  /**
3838
3804
  * 模拟人类"注视"或"阅读"行为:鼠标在页面上随机微动
@@ -3842,7 +3808,7 @@ var Humanize = {
3842
3808
  async simulateGaze(page, baseDurationMs = 2500) {
3843
3809
  const cursor = $GetCursor(page);
3844
3810
  const durationMs = this.jitterMs(baseDurationMs, 0.4);
3845
- logger6.start("simulateGaze", `duration=${durationMs}ms`);
3811
+ logger5.start("simulateGaze", `duration=${durationMs}ms`);
3846
3812
  const startTime = Date.now();
3847
3813
  const viewportSize = page.viewportSize() || { width: 1920, height: 1080 };
3848
3814
  while (Date.now() - startTime < durationMs) {
@@ -3851,7 +3817,7 @@ var Humanize = {
3851
3817
  await cursor.actions.move({ x, y });
3852
3818
  await delay2(this.jitterMs(600, 0.5));
3853
3819
  }
3854
- logger6.success("simulateGaze");
3820
+ logger5.success("simulateGaze");
3855
3821
  },
3856
3822
  /**
3857
3823
  * 人类化输入 - 带节奏变化(快-慢-停顿-偶尔加速)
@@ -3864,7 +3830,7 @@ var Humanize = {
3864
3830
  * @param {number} [options.pauseBase=800] - 停顿时长基础值 (ms),实际 ±50% 抖动
3865
3831
  */
3866
3832
  async humanType(page, selector, text, options = {}) {
3867
- logger6.start("humanType", `selector=${selector}, textLen=${text.length}`);
3833
+ logger5.start("humanType", `selector=${selector}, textLen=${text.length}`);
3868
3834
  const {
3869
3835
  baseDelay = 180,
3870
3836
  pauseProbability = 0.08,
@@ -3888,13 +3854,13 @@ var Humanize = {
3888
3854
  await delay2(charDelay);
3889
3855
  if (Math.random() < pauseProbability && i < text.length - 1) {
3890
3856
  const pauseTime = this.jitterMs(pauseBase, 0.5);
3891
- logger6.debug(`\u505C\u987F ${pauseTime}ms...`);
3857
+ logger5.debug(`\u505C\u987F ${pauseTime}ms...`);
3892
3858
  await delay2(pauseTime);
3893
3859
  }
3894
3860
  }
3895
- logger6.success("humanType");
3861
+ logger5.success("humanType");
3896
3862
  } catch (error) {
3897
- logger6.fail("humanType", error);
3863
+ logger5.fail("humanType", error);
3898
3864
  throw error;
3899
3865
  }
3900
3866
  },
@@ -3918,7 +3884,7 @@ var Humanize = {
3918
3884
  keyboardOptions = {}
3919
3885
  } = pressOptions || {};
3920
3886
  const targetDesc = hasTarget ? typeof targetOrKey === "string" ? targetOrKey : "ElementHandle" : "current focus";
3921
- logger6.start("humanPress", `key=${key}, target=${targetDesc}`);
3887
+ logger5.start("humanPress", `key=${key}, target=${targetDesc}`);
3922
3888
  try {
3923
3889
  if (hasTarget) {
3924
3890
  await this.humanClick(page, targetOrKey, { reactionDelay: focusDelay, scrollIfNeeded, throwOnMissing });
@@ -3928,10 +3894,10 @@ var Humanize = {
3928
3894
  ...keyboardOptions,
3929
3895
  delay: this.jitterMs(holdDelay, 0.5)
3930
3896
  });
3931
- logger6.success("humanPress");
3897
+ logger5.success("humanPress");
3932
3898
  return true;
3933
3899
  } catch (error) {
3934
- logger6.fail("humanPress", error);
3900
+ logger5.fail("humanPress", error);
3935
3901
  throw error;
3936
3902
  }
3937
3903
  },
@@ -3941,22 +3907,22 @@ var Humanize = {
3941
3907
  * @param {string} selector - 输入框选择器
3942
3908
  */
3943
3909
  async humanClear(page, selector) {
3944
- logger6.start("humanClear", `selector=${selector}`);
3910
+ logger5.start("humanClear", `selector=${selector}`);
3945
3911
  try {
3946
3912
  const locator = page.locator(selector);
3947
3913
  await locator.click();
3948
3914
  await delay2(this.jitterMs(200, 0.4));
3949
3915
  const currentValue = await locator.inputValue();
3950
3916
  if (!currentValue || currentValue.length === 0) {
3951
- logger6.success("humanClear", "already empty");
3917
+ logger5.success("humanClear", "already empty");
3952
3918
  return;
3953
3919
  }
3954
3920
  await page.keyboard.press("Meta+A");
3955
3921
  await delay2(this.jitterMs(100, 0.4));
3956
3922
  await page.keyboard.press("Backspace");
3957
- logger6.success("humanClear");
3923
+ logger5.success("humanClear");
3958
3924
  } catch (error) {
3959
- logger6.fail("humanClear", error);
3925
+ logger5.fail("humanClear", error);
3960
3926
  throw error;
3961
3927
  }
3962
3928
  },
@@ -3968,7 +3934,7 @@ var Humanize = {
3968
3934
  async warmUpBrowsing(page, baseDuration = 3500) {
3969
3935
  const cursor = $GetCursor(page);
3970
3936
  const durationMs = this.jitterMs(baseDuration, 0.4);
3971
- logger6.start("warmUpBrowsing", `duration=${durationMs}ms`);
3937
+ logger5.start("warmUpBrowsing", `duration=${durationMs}ms`);
3972
3938
  const startTime = Date.now();
3973
3939
  const viewportSize = page.viewportSize() || { width: 1920, height: 1080 };
3974
3940
  try {
@@ -3979,13 +3945,17 @@ var Humanize = {
3979
3945
  const y = 100 + Math.random() * (viewportSize.height - 200);
3980
3946
  await cursor.actions.move({ x, y });
3981
3947
  await delay2(this.jitterMs(350, 0.4));
3948
+ } else if (action < 0.7) {
3949
+ const scrollY = (Math.random() - 0.5) * 200;
3950
+ await page.mouse.wheel(0, scrollY);
3951
+ await delay2(this.jitterMs(500, 0.4));
3982
3952
  } else {
3983
3953
  await delay2(this.jitterMs(800, 0.5));
3984
3954
  }
3985
3955
  }
3986
- logger6.success("warmUpBrowsing");
3956
+ logger5.success("warmUpBrowsing");
3987
3957
  } catch (error) {
3988
- logger6.fail("warmUpBrowsing", error);
3958
+ logger5.fail("warmUpBrowsing", error);
3989
3959
  throw error;
3990
3960
  }
3991
3961
  },
@@ -3999,7 +3969,7 @@ var Humanize = {
3999
3969
  async naturalScroll(page, direction = "down", distance = 300, baseSteps = 5) {
4000
3970
  const steps = Math.max(3, baseSteps + Math.floor(Math.random() * 3) - 1);
4001
3971
  const actualDistance = this.jitterMs(distance, 0.15);
4002
- logger6.start("naturalScroll", `dir=${direction}, dist=${actualDistance}, steps=${steps}`);
3972
+ logger5.start("naturalScroll", `dir=${direction}, dist=${actualDistance}, steps=${steps}`);
4003
3973
  const sign = direction === "down" ? 1 : -1;
4004
3974
  const stepDistance = actualDistance / steps;
4005
3975
  try {
@@ -4011,9 +3981,9 @@ var Humanize = {
4011
3981
  const baseDelay = 60 + i * 25;
4012
3982
  await delay2(this.jitterMs(baseDelay, 0.3));
4013
3983
  }
4014
- logger6.success("naturalScroll");
3984
+ logger5.success("naturalScroll");
4015
3985
  } catch (error) {
4016
- logger6.fail("naturalScroll", error);
3986
+ logger5.fail("naturalScroll", error);
4017
3987
  throw error;
4018
3988
  }
4019
3989
  }
@@ -4042,7 +4012,7 @@ var resolveElement = async (page, target, { throwOnMissing = true } = {}) => {
4042
4012
  var waitJitter = (base, jitterPercent = 0.3) => delay3(jitterMs(base, jitterPercent));
4043
4013
 
4044
4014
  // src/internals/humanize/mobile.js
4045
- var logger7 = createInternalLogger("Humanize.Mobile");
4015
+ var logger6 = createInternalLogger("Humanize.Mobile");
4046
4016
  var initializedPages = /* @__PURE__ */ new WeakSet();
4047
4017
  var DEFAULT_TAP_TIMEOUT_MS = 2500;
4048
4018
  var DEFAULT_MOUSE_TAP_FALLBACK_TIMEOUT_MS = 1200;
@@ -4499,7 +4469,7 @@ var dispatchTouchSwipe = async (page, deltaY, options = {}) => {
4499
4469
  }
4500
4470
  return true;
4501
4471
  } catch (error) {
4502
- logger7.debug(`touch swipe fallback: ${error?.message || error}`);
4472
+ logger6.debug(`touch swipe fallback: ${error?.message || error}`);
4503
4473
  try {
4504
4474
  await page.evaluate((amount) => window.scrollBy(0, amount), deltaY);
4505
4475
  await waitJitter(120, 0.35);
@@ -4533,7 +4503,7 @@ var tapPoint = async (page, point, options = {}) => {
4533
4503
  );
4534
4504
  return { method: "touchscreen" };
4535
4505
  } catch (error) {
4536
- logger7.warn(`tapPoint | touchscreen.tap \u5931\u8D25\u6216\u8D85\u65F6\uFF0C\u5C1D\u8BD5\u9F20\u6807\u515C\u5E95: ${error?.message || error}`);
4506
+ logger6.warn(`tapPoint | touchscreen.tap \u5931\u8D25\u6216\u8D85\u65F6\uFF0C\u5C1D\u8BD5\u9F20\u6807\u515C\u5E95: ${error?.message || error}`);
4537
4507
  if (!allowMouseFallback) throw error;
4538
4508
  }
4539
4509
  }
@@ -4549,10 +4519,10 @@ var MobileHumanize = {
4549
4519
  async initializeCursor(page) {
4550
4520
  if (initializedPages.has(page)) return;
4551
4521
  initializedPages.add(page);
4552
- logger7.debug("initializeCursor: mobile mode uses touch gestures, cursor init skipped");
4522
+ logger6.debug("initializeCursor: mobile mode uses touch gestures, cursor init skipped");
4553
4523
  },
4554
4524
  async humanMove(page, target) {
4555
- logger7.debug(`humanMove: mobile no-op target=${typeof target === "string" ? target : "element/coords"}`);
4525
+ logger6.debug(`humanMove: mobile no-op target=${typeof target === "string" ? target : "element/coords"}`);
4556
4526
  if (typeof target === "string" || target && typeof target.boundingBox === "function") {
4557
4527
  const element = await resolveElement(page, target, { throwOnMissing: false });
4558
4528
  if (!element) {
@@ -4571,10 +4541,10 @@ var MobileHumanize = {
4571
4541
  throwOnMissing = false
4572
4542
  } = options;
4573
4543
  const targetDesc = describeTarget(target);
4574
- logger7.start("humanScroll", `target=${targetDesc}`);
4544
+ logger6.start("humanScroll", `target=${targetDesc}`);
4575
4545
  const element = await resolveElement(page, target, { throwOnMissing });
4576
4546
  if (!element) {
4577
- logger7.warn(`humanScroll | \u5143\u7D20\u672A\u627E\u5230: ${targetDesc}`);
4547
+ logger6.warn(`humanScroll | \u5143\u7D20\u672A\u627E\u5230: ${targetDesc}`);
4578
4548
  return { element: null, didScroll: false, restore: null };
4579
4549
  }
4580
4550
  const startTime = Date.now();
@@ -4583,42 +4553,42 @@ var MobileHumanize = {
4583
4553
  const status = await checkElementVisibility(element);
4584
4554
  if (status.code === "VISIBLE") {
4585
4555
  if (status.isFixed) {
4586
- logger7.info("humanScroll | fixed/sticky \u5BB9\u5668\u5185\uFF0C\u8DF3\u8FC7\u6EDA\u52A8");
4556
+ logger6.info("humanScroll | fixed/sticky \u5BB9\u5668\u5185\uFF0C\u8DF3\u8FC7\u6EDA\u52A8");
4587
4557
  } else {
4588
- logger7.debug("humanScroll | \u5143\u7D20\u53EF\u89C1\u4E14\u65E0\u906E\u6321");
4558
+ logger6.debug("humanScroll | \u5143\u7D20\u53EF\u89C1\u4E14\u65E0\u906E\u6321");
4589
4559
  }
4590
- logger7.success("humanScroll", didScroll ? "\u5DF2\u6EDA\u52A8" : "\u65E0\u9700\u6EDA\u52A8");
4560
+ logger6.success("humanScroll", didScroll ? "\u5DF2\u6EDA\u52A8" : "\u65E0\u9700\u6EDA\u52A8");
4591
4561
  return { element, didScroll, restore: null };
4592
4562
  }
4593
4563
  if (status.code === "ZERO_DIMENSIONS" || status.code === "NOT_INTERACTABLE") {
4594
- logger7.warn(`humanScroll | \u5143\u7D20\u4E0D\u53EF\u6EDA\u52A8\u81F3\u53EF\u70B9\u51FB\u72B6\u6001: ${status.reason || status.code}`);
4564
+ logger6.warn(`humanScroll | \u5143\u7D20\u4E0D\u53EF\u6EDA\u52A8\u81F3\u53EF\u70B9\u51FB\u72B6\u6001: ${status.reason || status.code}`);
4595
4565
  return { element, didScroll, restore: null };
4596
4566
  }
4597
4567
  const scrollRect = await getScrollableRect(element);
4598
4568
  if (!scrollRect && status.isFixed && status.code === "OUT_OF_VIEWPORT") {
4599
- logger7.warn(`humanScroll | fixed/sticky \u76EE\u6807\u4E0D\u5728\u89C6\u53E3\u5185\uFF0C\u9875\u9762\u6EDA\u52A8\u65E0\u6CD5\u6539\u53D8\u5176\u4F4D\u7F6E (direction=${status.direction || "unknown"})`);
4569
+ logger6.warn(`humanScroll | fixed/sticky \u76EE\u6807\u4E0D\u5728\u89C6\u53E3\u5185\uFF0C\u9875\u9762\u6EDA\u52A8\u65E0\u6CD5\u6539\u53D8\u5176\u4F4D\u7F6E (direction=${status.direction || "unknown"})`);
4600
4570
  return { element, didScroll, restore: null, unscrollable: true };
4601
4571
  }
4602
4572
  if (!scrollRect && status.isFixed && status.code === "OBSTRUCTED") {
4603
- logger7.warn(`humanScroll | fixed/sticky \u76EE\u6807\u88AB\u906E\u6321\uFF0C\u6EDA\u52A8\u65E0\u6CD5\u89E3\u9664 (${status.obstruction?.tag || "unknown"})`);
4573
+ logger6.warn(`humanScroll | fixed/sticky \u76EE\u6807\u88AB\u906E\u6321\uFF0C\u6EDA\u52A8\u65E0\u6CD5\u89E3\u9664 (${status.obstruction?.tag || "unknown"})`);
4604
4574
  return { element, didScroll, restore: null, unscrollable: true };
4605
4575
  }
4606
4576
  if (scrollRect && status.code === "OBSTRUCTED" && status.obstruction?.isFixed) {
4607
4577
  const moved = await scrollAwayFromObstruction(element, status);
4608
4578
  if (moved.moved) {
4609
- logger7.debug(`humanScroll | sticky/fixed \u906E\u6321\u8865\u507F\u6EDA\u52A8 top=${Math.round(moved.scrollTop || 0)}`);
4579
+ logger6.debug(`humanScroll | sticky/fixed \u906E\u6321\u8865\u507F\u6EDA\u52A8 top=${Math.round(moved.scrollTop || 0)}`);
4610
4580
  await waitJitter(90, 0.3);
4611
4581
  didScroll = true;
4612
4582
  continue;
4613
4583
  }
4614
4584
  }
4615
4585
  if (Date.now() - startTime > maxDurationMs) {
4616
- logger7.warn(`humanScroll | mobile timeout (${maxDurationMs}ms, status=${status.code}, direction=${status.direction || "unknown"}, fixed=${Boolean(status.isFixed)})`);
4586
+ logger6.warn(`humanScroll | mobile timeout (${maxDurationMs}ms, status=${status.code}, direction=${status.direction || "unknown"}, fixed=${Boolean(status.isFixed)})`);
4617
4587
  return { element, didScroll, restore: null };
4618
4588
  }
4619
4589
  const stepMin = scrollRect ? Math.min(minStep, Math.max(60, scrollRect.height * 0.4)) : minStep;
4620
4590
  const stepMax = scrollRect ? Math.min(maxStep, Math.max(stepMin + 40, scrollRect.height * 0.8)) : maxStep;
4621
- logger7.debug(`humanScroll | \u6B65\u9AA4 ${i + 1}/${maxSteps}: ${status.reason || status.code} ${status.direction ? `(${status.direction})` : ""}`);
4591
+ logger6.debug(`humanScroll | \u6B65\u9AA4 ${i + 1}/${maxSteps}: ${status.reason || status.code} ${status.direction ? `(${status.direction})` : ""}`);
4622
4592
  const distance = stepMin + Math.random() * Math.max(1, stepMax - stepMin);
4623
4593
  let deltaY = status.direction === "up" ? -distance : distance;
4624
4594
  if (status.code === "OBSTRUCTED") {
@@ -4659,7 +4629,7 @@ var MobileHumanize = {
4659
4629
  const afterWindowState = await page.evaluate(() => ({ x: window.scrollX, y: window.scrollY }));
4660
4630
  if (Math.abs(afterWindowState.x - beforeWindowState.x) > 2 || Math.abs(afterWindowState.y - beforeWindowState.y) > 2) {
4661
4631
  await page.evaluate((state2) => window.scrollTo(state2.x, state2.y), beforeWindowState);
4662
- logger7.debug(`humanScroll | \u7A97\u53E3\u6EDA\u52A8\u56DE\u6536 from=${Math.round(afterWindowState.y)} to=${Math.round(beforeWindowState.y)}`);
4632
+ logger6.debug(`humanScroll | \u7A97\u53E3\u6EDA\u52A8\u56DE\u6536 from=${Math.round(afterWindowState.y)} to=${Math.round(beforeWindowState.y)}`);
4663
4633
  }
4664
4634
  }
4665
4635
  let afterElementSnapshot = null;
@@ -4673,7 +4643,7 @@ var MobileHumanize = {
4673
4643
  const afterSnapshot = await readAfterElementSnapshot();
4674
4644
  if (isTargetImmobileAfterScroll(beforeElementSnapshot, afterSnapshot)) {
4675
4645
  await restoreWindowFromSnapshot(page, beforeElementSnapshot, afterSnapshot);
4676
- logger7.warn(`humanScroll | \u76EE\u6807\u4E0D\u968F\u9875\u9762\u6EDA\u52A8\u79FB\u52A8\uFF0C\u9875\u9762\u6EDA\u52A8\u65E0\u6CD5\u6539\u53D8\u5176\u4F4D\u7F6E (status=${status.code}, direction=${status.direction || "unknown"})`);
4646
+ logger6.warn(`humanScroll | \u76EE\u6807\u4E0D\u968F\u9875\u9762\u6EDA\u52A8\u79FB\u52A8\uFF0C\u9875\u9762\u6EDA\u52A8\u65E0\u6CD5\u6539\u53D8\u5176\u4F4D\u7F6E (status=${status.code}, direction=${status.direction || "unknown"})`);
4677
4647
  return { element, didScroll, restore: null, unscrollable: true };
4678
4648
  }
4679
4649
  }
@@ -4705,12 +4675,12 @@ var MobileHumanize = {
4705
4675
  const moved = beforeState.kind !== afterState.kind || Math.abs(topDelta) > 2 || Math.abs(leftDelta) > 2;
4706
4676
  if (!moved) {
4707
4677
  const fallback = await scrollScrollableAncestor(element, deltaY);
4708
- logger7.debug(`humanScroll | \u5BB9\u5668\u89E6\u6478\u65E0\u6548\uFF0C\u76F4\u63A5\u6EDA\u52A8 fallback=${fallback.scroller ? "ancestor" : "window"} top=${Math.round(fallback.scrollTop || 0)}`);
4678
+ logger6.debug(`humanScroll | \u5BB9\u5668\u89E6\u6478\u65E0\u6548\uFF0C\u76F4\u63A5\u6EDA\u52A8 fallback=${fallback.scroller ? "ancestor" : "window"} top=${Math.round(fallback.scrollTop || 0)}`);
4709
4679
  } else if (beforeState.kind === afterState.kind && Math.abs(expectedDelta) > 24 && Math.sign(topDelta || expectedDelta) === Math.sign(expectedDelta) && Math.abs(topDelta) < Math.min(Math.abs(expectedDelta) * 0.45, 96)) {
4710
4680
  const residualDelta = expectedDelta - topDelta;
4711
4681
  if (Math.sign(residualDelta) === Math.sign(expectedDelta) && Math.abs(residualDelta) > 24) {
4712
4682
  const fallback = await scrollScrollableAncestor(element, residualDelta);
4713
- logger7.debug(`humanScroll | \u5BB9\u5668\u89E6\u6478\u8DDD\u79BB\u4E0D\u8DB3\uFF0C\u8865\u507F\u6EDA\u52A8 fallback=${fallback.scroller ? "ancestor" : "window"} top=${Math.round(fallback.scrollTop || 0)}`);
4683
+ logger6.debug(`humanScroll | \u5BB9\u5668\u89E6\u6478\u8DDD\u79BB\u4E0D\u8DB3\uFF0C\u8865\u507F\u6EDA\u52A8 fallback=${fallback.scroller ? "ancestor" : "window"} top=${Math.round(fallback.scrollTop || 0)}`);
4714
4684
  }
4715
4685
  }
4716
4686
  }
@@ -4718,7 +4688,7 @@ var MobileHumanize = {
4718
4688
  const afterSnapshot = await getElementViewportSnapshot(element).catch(() => null);
4719
4689
  if (isTargetImmobileAfterScroll(beforeElementSnapshot, afterSnapshot)) {
4720
4690
  await restoreWindowFromSnapshot(page, beforeElementSnapshot, afterSnapshot);
4721
- logger7.warn(`humanScroll | \u76EE\u6807\u4E0D\u968F\u6EDA\u52A8\u5BB9\u5668\u79FB\u52A8\uFF0C\u6EDA\u52A8\u65E0\u6CD5\u6539\u53D8\u5176\u4F4D\u7F6E (status=${status.code}, direction=${status.direction || "unknown"})`);
4691
+ logger6.warn(`humanScroll | \u76EE\u6807\u4E0D\u968F\u6EDA\u52A8\u5BB9\u5668\u79FB\u52A8\uFF0C\u6EDA\u52A8\u65E0\u6CD5\u6539\u53D8\u5176\u4F4D\u7F6E (status=${status.code}, direction=${status.direction || "unknown"})`);
4722
4692
  return { element, didScroll, restore: null, unscrollable: true };
4723
4693
  }
4724
4694
  }
@@ -4729,14 +4699,14 @@ var MobileHumanize = {
4729
4699
  await waitJitter(80, 0.3);
4730
4700
  const finalStatus = await checkElementVisibility(element);
4731
4701
  if (finalStatus.code === "VISIBLE") {
4732
- logger7.info("humanScroll | \u539F\u751F scrollIntoViewIfNeeded \u515C\u5E95\u6210\u529F");
4733
- logger7.success("humanScroll", didScroll ? "\u5DF2\u6EDA\u52A8" : "\u65E0\u9700\u6EDA\u52A8");
4702
+ logger6.info("humanScroll | \u539F\u751F scrollIntoViewIfNeeded \u515C\u5E95\u6210\u529F");
4703
+ logger6.success("humanScroll", didScroll ? "\u5DF2\u6EDA\u52A8" : "\u65E0\u9700\u6EDA\u52A8");
4734
4704
  return { element, didScroll: true, restore: null };
4735
4705
  }
4736
4706
  } catch (fallbackError) {
4737
- logger7.debug(`humanScroll | native fallback failed: ${fallbackError?.message || fallbackError}`);
4707
+ logger6.debug(`humanScroll | native fallback failed: ${fallbackError?.message || fallbackError}`);
4738
4708
  }
4739
- logger7.warn(`humanScroll | \u5728 ${maxSteps} \u6B65\u540E\u65E0\u6CD5\u786E\u4FDD\u53EF\u89C1\u6027`);
4709
+ logger6.warn(`humanScroll | \u5728 ${maxSteps} \u6B65\u540E\u65E0\u6CD5\u786E\u4FDD\u53EF\u89C1\u6027`);
4740
4710
  return { element, didScroll, restore: null };
4741
4711
  },
4742
4712
  async humanClick(page, target, options = {}) {
@@ -4751,7 +4721,7 @@ var MobileHumanize = {
4751
4721
  fallbackDomClickOnTapError = true
4752
4722
  } = options;
4753
4723
  const targetDesc = describeTarget(target);
4754
- logger7.start("humanClick", `target=${targetDesc}`);
4724
+ logger6.start("humanClick", `target=${targetDesc}`);
4755
4725
  try {
4756
4726
  if (target == null) {
4757
4727
  const viewport = resolveViewport(page);
@@ -4763,12 +4733,12 @@ var MobileHumanize = {
4763
4733
  timeoutMs: tapTimeoutMs,
4764
4734
  mouseFallbackTimeoutMs
4765
4735
  });
4766
- logger7.success("humanClick", "Tapped current position");
4736
+ logger6.success("humanClick", "Tapped current position");
4767
4737
  return true;
4768
4738
  }
4769
4739
  const element = await resolveElement(page, target, { throwOnMissing });
4770
4740
  if (!element) {
4771
- logger7.warn(`humanClick: \u5143\u7D20\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u70B9\u51FB ${targetDesc}`);
4741
+ logger6.warn(`humanClick: \u5143\u7D20\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u70B9\u51FB ${targetDesc}`);
4772
4742
  return false;
4773
4743
  }
4774
4744
  const scrollResult = scrollIfNeeded ? await MobileHumanize.humanScroll(page, element, { throwOnMissing }) : null;
@@ -4792,19 +4762,19 @@ var MobileHumanize = {
4792
4762
  ).catch(() => null);
4793
4763
  }
4794
4764
  if (fallback?.activated) {
4795
- logger7.warn(`humanClick: \u4E0D\u53EF\u6EDA\u52A8\u76EE\u6807\u4E0D\u53EF\u7269\u7406\u70B9\u51FB\uFF0C\u5DF2\u7528 ${fallback.method} \u6FC0\u6D3B`);
4765
+ logger6.warn(`humanClick: \u4E0D\u53EF\u6EDA\u52A8\u76EE\u6807\u4E0D\u53EF\u7269\u7406\u70B9\u51FB\uFF0C\u5DF2\u7528 ${fallback.method} \u6FC0\u6D3B`);
4796
4766
  return true;
4797
4767
  }
4798
4768
  }
4799
4769
  const message = `\u5143\u7D20\u4E0D\u53EF\u70B9\u51FB: ${status.reason || status.code}`;
4800
4770
  if (throwOnMissing) throw new Error(message);
4801
- logger7.warn(`humanClick: ${message}\uFF0C\u8DF3\u8FC7\u70B9\u51FB`);
4771
+ logger6.warn(`humanClick: ${message}\uFF0C\u8DF3\u8FC7\u70B9\u51FB`);
4802
4772
  return false;
4803
4773
  }
4804
4774
  const box = await element.boundingBox();
4805
4775
  if (!box) {
4806
4776
  if (throwOnMissing) throw new Error("\u65E0\u6CD5\u83B7\u53D6\u5143\u7D20\u4F4D\u7F6E");
4807
- logger7.warn("humanClick: \u65E0\u6CD5\u83B7\u53D6\u4F4D\u7F6E\uFF0C\u8DF3\u8FC7\u70B9\u51FB");
4777
+ logger6.warn("humanClick: \u65E0\u6CD5\u83B7\u53D6\u4F4D\u7F6E\uFF0C\u8DF3\u8FC7\u70B9\u51FB");
4808
4778
  return false;
4809
4779
  }
4810
4780
  await waitJitter(reactionDelay, 0.45);
@@ -4825,13 +4795,13 @@ var MobileHumanize = {
4825
4795
  "activation fallback"
4826
4796
  ).catch(() => null);
4827
4797
  if (!fallback?.activated) throw tapError;
4828
- logger7.warn(`humanClick: tap \u5931\u8D25\u540E\u5DF2\u7528 ${fallback.method} \u515C\u5E95: ${tapError?.message || tapError}`);
4798
+ logger6.warn(`humanClick: tap \u5931\u8D25\u540E\u5DF2\u7528 ${fallback.method} \u515C\u5E95: ${tapError?.message || tapError}`);
4829
4799
  }
4830
4800
  await waitJitter(120, 0.35);
4831
- logger7.success("humanClick");
4801
+ logger6.success("humanClick");
4832
4802
  return true;
4833
4803
  } catch (error) {
4834
- logger7.fail("humanClick", error);
4804
+ logger6.fail("humanClick", error);
4835
4805
  throw error;
4836
4806
  }
4837
4807
  },
@@ -4884,7 +4854,7 @@ var MobileHumanize = {
4884
4854
  keyboardOptions = {}
4885
4855
  } = pressOptions || {};
4886
4856
  const targetDesc = hasTarget ? describeTarget(targetOrKey) : "current focus";
4887
- logger7.start("humanPress", `key=${key}, target=${targetDesc}`);
4857
+ logger6.start("humanPress", `key=${key}, target=${targetDesc}`);
4888
4858
  try {
4889
4859
  if (hasTarget) {
4890
4860
  await MobileHumanize.humanClick(page, targetOrKey, {
@@ -4898,10 +4868,10 @@ var MobileHumanize = {
4898
4868
  ...keyboardOptions,
4899
4869
  delay: jitterMs(holdDelay, 0.5)
4900
4870
  });
4901
- logger7.success("humanPress");
4871
+ logger6.success("humanPress");
4902
4872
  return true;
4903
4873
  } catch (error) {
4904
- logger7.fail("humanPress", error);
4874
+ logger6.fail("humanPress", error);
4905
4875
  throw error;
4906
4876
  }
4907
4877
  },
@@ -4938,7 +4908,20 @@ var MobileHumanize = {
4938
4908
  const durationMs = jitterMs(baseDuration, 0.4);
4939
4909
  const startTime = Date.now();
4940
4910
  while (Date.now() - startTime < durationMs) {
4941
- await waitJitter(560, 0.55);
4911
+ const action = Math.random();
4912
+ if (action < 0.5) {
4913
+ await dispatchTouchSwipe(page, 120 + Math.random() * 220, {
4914
+ durationMs: 240,
4915
+ steps: 5
4916
+ });
4917
+ } else if (action < 0.7) {
4918
+ await dispatchTouchSwipe(page, -(80 + Math.random() * 160), {
4919
+ durationMs: 220,
4920
+ steps: 4
4921
+ });
4922
+ } else {
4923
+ await waitJitter(560, 0.55);
4924
+ }
4942
4925
  }
4943
4926
  },
4944
4927
  async naturalScroll(page, direction = "down", distance = 300, baseSteps = 5) {
@@ -5047,7 +5030,7 @@ import { FingerprintInjector } from "fingerprint-injector";
5047
5030
  import { chromium as defaultChromiumLauncher } from "playwright";
5048
5031
 
5049
5032
  // src/proxy-bypass.js
5050
- import picomatch2 from "picomatch";
5033
+ import picomatch from "picomatch";
5051
5034
  var normalizeByPassDomains = (domains) => {
5052
5035
  if (!Array.isArray(domains)) return [];
5053
5036
  return domains.map((item) => String(item || "").trim()).filter(Boolean);
@@ -5058,7 +5041,7 @@ var buildByPassDomainRule = (rawPattern) => {
5058
5041
  if (!pattern) return null;
5059
5042
  let matcher;
5060
5043
  try {
5061
- matcher = picomatch2(pattern, { nocase: true });
5044
+ matcher = picomatch(pattern, { nocase: true });
5062
5045
  } catch {
5063
5046
  return null;
5064
5047
  }
@@ -5127,7 +5110,7 @@ var ByPass = {
5127
5110
  };
5128
5111
 
5129
5112
  // src/internals/launch/traffic.js
5130
- var logger8 = createInternalLogger("Launch");
5113
+ var logger7 = createInternalLogger("Launch");
5131
5114
  var normalizeObject = (value) => {
5132
5115
  if (!value || typeof value !== "object" || Array.isArray(value)) {
5133
5116
  return {};
@@ -5176,7 +5159,7 @@ var logLaunchTraffic = ({
5176
5159
  } = {}) => {
5177
5160
  if (!enabled) return;
5178
5161
  if (explicitProxy) {
5179
- logger8.info("[\u4EE3\u7406\u5DF2\u542F\u7528] \u4F7F\u7528\u663E\u5F0F proxy \u914D\u7F6E\uFF0C\u8DF3\u8FC7 toolkit \u672C\u5730\u6D41\u91CF\u89C2\u6D4B");
5162
+ logger7.info("[\u4EE3\u7406\u5DF2\u542F\u7528] \u4F7F\u7528\u663E\u5F0F proxy \u914D\u7F6E\uFF0C\u8DF3\u8FC7 toolkit \u672C\u5730\u6D41\u91CF\u89C2\u6D4B");
5180
5163
  return;
5181
5164
  }
5182
5165
  if (launchProxy) {
@@ -5186,18 +5169,18 @@ var logLaunchTraffic = ({
5186
5169
  upstreamLabel = `${parsedProxyUrl.protocol}//${parsedProxyUrl.host}`;
5187
5170
  } catch {
5188
5171
  }
5189
- logger8.info(
5172
+ logger7.info(
5190
5173
  `[\u4EE3\u7406\u5DF2\u542F\u7528] \u672C\u5730=${launchProxy.server} \u4E0A\u6E38=${upstreamLabel || "-"} \u76F4\u8FDE\u57DF\u540D=${byPassDomains.join(",")}`
5191
5174
  );
5192
- logger8.info(`[\u6D41\u91CF\u89C2\u6D4B] \u9010\u8BF7\u6C42\u8C03\u8BD5=${Boolean(debugMode) ? "\u5F00\u542F" : "\u5173\u95ED"}\uFF08\u6C47\u603B\u59CB\u7EC8\u5F00\u542F\uFF09`);
5175
+ logger7.info(`[\u6D41\u91CF\u89C2\u6D4B] \u9010\u8BF7\u6C42\u8C03\u8BD5=${Boolean(debugMode) ? "\u5F00\u542F" : "\u5173\u95ED"}\uFF08\u6C47\u603B\u59CB\u7EC8\u5F00\u542F\uFF09`);
5193
5176
  return;
5194
5177
  }
5195
5178
  if (enableProxy) {
5196
- logger8.info("[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=true \u4F46 proxy_url \u4E3A\u7A7A");
5179
+ logger7.info("[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=true \u4F46 proxy_url \u4E3A\u7A7A");
5197
5180
  } else if (proxyUrl) {
5198
- logger8.info("[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=false \u4E14 proxy_url \u5DF2\u914D\u7F6E");
5181
+ logger7.info("[\u4EE3\u7406\u672A\u542F\u7528] enable_proxy=false \u4E14 proxy_url \u5DF2\u914D\u7F6E");
5199
5182
  }
5200
- logger8.info(`[\u6D41\u91CF\u89C2\u6D4B] \u9010\u8BF7\u6C42\u8C03\u8BD5=${Boolean(debugMode) ? "\u5F00\u542F" : "\u5173\u95ED"}\uFF08\u6C47\u603B\u59CB\u7EC8\u5F00\u542F\uFF09`);
5183
+ logger7.info(`[\u6D41\u91CF\u89C2\u6D4B] \u9010\u8BF7\u6C42\u8C03\u8BD5=${Boolean(debugMode) ? "\u5F00\u542F" : "\u5173\u95ED"}\uFF08\u6C47\u603B\u59CB\u7EC8\u5F00\u542F\uFF09`);
5201
5184
  };
5202
5185
  var createLaunchTrafficHook = ({
5203
5186
  byPassDomains = [],
@@ -5220,13 +5203,13 @@ var createLaunchTrafficHook = ({
5220
5203
  }
5221
5204
  if (!enabled || byPassDomains.length === 0) return;
5222
5205
  if (!matched || !matched.rule) return;
5223
- logger8.info(`[\u76F4\u8FDE\u547D\u4E2D] \u89C4\u5219=${matched.rule.pattern} \u57DF\u540D=${matched.hostname} \u8D44\u6E90\u7C7B\u578B=${resourceType} \u65B9\u6CD5=${req.method()} \u5730\u5740=${requestUrl}`);
5206
+ logger7.info(`[\u76F4\u8FDE\u547D\u4E2D] \u89C4\u5219=${matched.rule.pattern} \u57DF\u540D=${matched.hostname} \u8D44\u6E90\u7C7B\u578B=${resourceType} \u65B9\u6CD5=${req.method()} \u5730\u5740=${requestUrl}`);
5224
5207
  });
5225
5208
  };
5226
5209
  };
5227
5210
 
5228
5211
  // src/internals/launch/default.js
5229
- var logger9 = createInternalLogger("Launch");
5212
+ var logger8 = createInternalLogger("Launch");
5230
5213
  var injectedContexts = /* @__PURE__ */ new WeakSet();
5231
5214
  var browserMajorVersionCache = /* @__PURE__ */ new Map();
5232
5215
  var DEFAULT_BROWSER_PROFILE_SCHEMA_VERSION = 1;
@@ -5267,7 +5250,7 @@ var detectBrowserMajorVersion = (launcher) => {
5267
5250
  });
5268
5251
  detectedVersion = parseChromeMajorVersion(rawVersion);
5269
5252
  } catch (error) {
5270
- logger9.warn(`\u8BFB\u53D6\u6D4F\u89C8\u5668\u7248\u672C\u5931\u8D25: ${error?.message || error}`);
5253
+ logger8.warn(`\u8BFB\u53D6\u6D4F\u89C8\u5668\u7248\u672C\u5931\u8D25: ${error?.message || error}`);
5271
5254
  }
5272
5255
  browserMajorVersionCache.set(executablePath, detectedVersion);
5273
5256
  return detectedVersion;
@@ -5304,7 +5287,7 @@ var generateFingerprintForCore = ({ locale, browserMajorVersion, device }) => {
5304
5287
  if (requestedBrowserMajorVersion <= 0) {
5305
5288
  throw error;
5306
5289
  }
5307
- logger9.warn(
5290
+ logger8.warn(
5308
5291
  `\u5F53\u524D\u6D4F\u89C8\u5668\u5927\u7248\u672C ${requestedBrowserMajorVersion} \u65E0\u53EF\u7528 strict \u6307\u7EB9\u6837\u672C\uFF0C\u9000\u56DE\u4E0D\u7ED1\u5B9A\u5927\u7248\u672C\u751F\u6210: ${error?.message || error}`
5309
5292
  );
5310
5293
  }
@@ -5350,7 +5333,7 @@ var buildReplayableBrowserProfile = (runtimeState, launcher) => {
5350
5333
  schema_version: DEFAULT_BROWSER_PROFILE_SCHEMA_VERSION
5351
5334
  };
5352
5335
  nextState = RuntimeEnv.setBrowserProfileCore(nextState, browserProfileCore);
5353
- logger9.info(
5336
+ logger8.info(
5354
5337
  `\u5DF2\u751F\u6210\u6D4F\u89C8\u5668\u6307\u7EB9\u771F\u6E90 | env=${String(nextState.envId || "-")} | device=${device} | version=${browserProfileCore.browser_major_version || "-"} | fingerprintVersion=${fingerprintBrowserMajorVersion || "-"} | exactVersion=${generated.exactBrowserMajorVersion ? "true" : "false"} | timezone=${timezoneId}`
5355
5338
  );
5356
5339
  return { runtimeState: nextState, browserProfileCore };
@@ -5537,7 +5520,7 @@ var DefaultLaunch = {
5537
5520
  import { execFile } from "node:child_process";
5538
5521
  import { randomInt } from "node:crypto";
5539
5522
  import { promisify } from "node:util";
5540
- var logger10 = createInternalLogger("Launch");
5523
+ var logger9 = createInternalLogger("Launch");
5541
5524
  var execFileAsync = promisify(execFile);
5542
5525
  var DEFAULT_CLOAK_CRAWLER_BASE_OPTIONS = Object.freeze({
5543
5526
  maxConcurrency: 1,
@@ -5743,7 +5726,7 @@ var resolveReplayableCloakProfile = (runtimeState, { fingerprintPlatform = "", c
5743
5726
  const nextCoreRaw = JSON.stringify(nextBrowserProfileCore);
5744
5727
  if (currentCoreRaw !== nextCoreRaw) {
5745
5728
  nextState = RuntimeEnv.setBrowserProfileCore(nextState, nextBrowserProfileCore);
5746
- logger10.info(
5729
+ logger9.info(
5747
5730
  `\u5DF2\u540C\u6B65 Cloak \u6307\u7EB9\u771F\u6E90 | env=${String(nextState.envId || "-")} | seed=${fingerprintSeed} | platform=${resolvedFingerprintPlatform} | timezone=${timezone || "-"} | locale=${locale || "-"}`
5748
5731
  );
5749
5732
  }
@@ -5830,7 +5813,7 @@ var forceTerminateBrowsersByFingerprintArg = async (fingerprintArg) => {
5830
5813
  if (error?.code === 1 || error?.code === "ENOENT") {
5831
5814
  return;
5832
5815
  }
5833
- logger10.info(`\u5F3A\u5236\u5173\u95ED Cloak \u8FDB\u7A0B\u5931\u8D25\uFF08\u5FFD\u7565\uFF09: ${error?.message || String(error)}`);
5816
+ logger9.info(`\u5F3A\u5236\u5173\u95ED Cloak \u8FDB\u7A0B\u5931\u8D25\uFF08\u5FFD\u7565\uFF09: ${error?.message || String(error)}`);
5834
5817
  });
5835
5818
  };
5836
5819
  var CloakLaunch = {
@@ -5990,7 +5973,7 @@ var Launch = withModeReflect("Launch", launchStrategies);
5990
5973
  // src/live-view.js
5991
5974
  import express from "express";
5992
5975
  import { Actor } from "apify";
5993
- var logger11 = createInternalLogger("LiveView");
5976
+ var logger10 = createInternalLogger("LiveView");
5994
5977
  async function startLiveViewServer(liveViewKey) {
5995
5978
  const app = express();
5996
5979
  app.get("/", async (req, res) => {
@@ -6015,13 +5998,13 @@ async function startLiveViewServer(liveViewKey) {
6015
5998
  </html>
6016
5999
  `);
6017
6000
  } catch (error) {
6018
- logger11.fail("Live View Server", error);
6001
+ logger10.fail("Live View Server", error);
6019
6002
  res.status(500).send(`\u65E0\u6CD5\u52A0\u8F7D\u5C4F\u5E55\u622A\u56FE: ${error.message}`);
6020
6003
  }
6021
6004
  });
6022
6005
  const port = process.env.APIFY_CONTAINER_PORT || 4321;
6023
6006
  app.listen(port, () => {
6024
- logger11.success("startLiveViewServer", `\u76D1\u542C\u7AEF\u53E3 ${port}`);
6007
+ logger10.success("startLiveViewServer", `\u76D1\u542C\u7AEF\u53E3 ${port}`);
6025
6008
  });
6026
6009
  }
6027
6010
  async function takeLiveScreenshot(liveViewKey, page, logMessage) {
@@ -6029,10 +6012,10 @@ async function takeLiveScreenshot(liveViewKey, page, logMessage) {
6029
6012
  const buffer = await capturePageScreenshot(page, { type: "png" });
6030
6013
  await Actor.setValue(liveViewKey, buffer, { contentType: "image/png" });
6031
6014
  if (logMessage) {
6032
- logger11.info(`(\u622A\u56FE): ${logMessage}`);
6015
+ logger10.info(`(\u622A\u56FE): ${logMessage}`);
6033
6016
  }
6034
6017
  } catch (e) {
6035
- logger11.warn(`\u65E0\u6CD5\u6355\u83B7 Live View \u5C4F\u5E55\u622A\u56FE: ${e.message}`);
6018
+ logger10.warn(`\u65E0\u6CD5\u6355\u83B7 Live View \u5C4F\u5E55\u622A\u56FE: ${e.message}`);
6036
6019
  }
6037
6020
  }
6038
6021
  var useLiveView = (liveViewKey = PresetOfLiveViewKey) => {
@@ -6138,7 +6121,7 @@ var dragCaptchaAction = async (page, sourceLocator, targetLocator, options = {})
6138
6121
  };
6139
6122
 
6140
6123
  // src/internals/captcha/bytedance.js
6141
- var logger12 = createInternalLogger("Captcha");
6124
+ var logger11 = createInternalLogger("Captcha");
6142
6125
  var DEFAULT_BYTEDANCE_CAPTCHA_OPTIONS = Object.freeze({
6143
6126
  apiType: "31234",
6144
6127
  maxRetries: 3,
@@ -6270,7 +6253,7 @@ var collectCaptchaDebugInfo = async (page, frame, iframeLocator, attempt, phase,
6270
6253
  }
6271
6254
  await writeFile(infoPath, JSON.stringify(payload, null, 2), "utf8");
6272
6255
  }
6273
- logger12.info(`\u5DF2\u5199\u51FA\u9A8C\u8BC1\u7801\u8C03\u8BD5\u4EA7\u7269\uFF1A${debugDir}`);
6256
+ logger11.info(`\u5DF2\u5199\u51FA\u9A8C\u8BC1\u7801\u8C03\u8BD5\u4EA7\u7269\uFF1A${debugDir}`);
6274
6257
  };
6275
6258
  var maybeCollectCaptchaDebugInfo = async (page, frame, iframeLocator, attempt, phase, options, extra = null) => {
6276
6259
  if (!options.debugArtifacts) {
@@ -6307,14 +6290,14 @@ var getVerifycenterCaptchaContext = async (page, options) => {
6307
6290
  if (!isContainerVisible) {
6308
6291
  return null;
6309
6292
  }
6310
- logger12.info("\u68C0\u6D4B\u5230\u9A8C\u8BC1\u7801\u5BB9\u5668\uFF0C\u5F00\u59CB\u7B49\u5F85 iframe \u52A0\u8F7D\u3002");
6293
+ logger11.info("\u68C0\u6D4B\u5230\u9A8C\u8BC1\u7801\u5BB9\u5668\uFF0C\u5F00\u59CB\u7B49\u5F85 iframe \u52A0\u8F7D\u3002");
6311
6294
  let iframeLocator = page.locator(options.iframeSelector).first();
6312
6295
  let isIframeVisible = await waitForVisible(
6313
6296
  iframeLocator,
6314
6297
  options.iframeVisibleTimeoutMs
6315
6298
  );
6316
6299
  if (!isIframeVisible) {
6317
- logger12.warn("\u672A\u5728\u9884\u671F\u9009\u62E9\u5668\u4E2D\u627E\u5230 verifycenter iframe\uFF0C\u5C1D\u8BD5\u5BB9\u5668\u5185\u4EFB\u610F iframe\u3002");
6300
+ logger11.warn("\u672A\u5728\u9884\u671F\u9009\u62E9\u5668\u4E2D\u627E\u5230 verifycenter iframe\uFF0C\u5C1D\u8BD5\u5BB9\u5668\u5185\u4EFB\u610F iframe\u3002");
6318
6301
  iframeLocator = captchaContainer.locator(options.iframeFallbackSelector).first();
6319
6302
  isIframeVisible = await waitForVisible(
6320
6303
  iframeLocator,
@@ -6324,7 +6307,7 @@ var getVerifycenterCaptchaContext = async (page, options) => {
6324
6307
  if (!isIframeVisible) {
6325
6308
  throw new Error("verifycenter iframe not found inside captcha container.");
6326
6309
  }
6327
- logger12.info("\u9A8C\u8BC1\u7801 iframe \u5DF2\u53EF\u89C1\uFF0C\u5F00\u59CB\u89E3\u6790\u5185\u5BB9 frame\u3002");
6310
+ logger11.info("\u9A8C\u8BC1\u7801 iframe \u5DF2\u53EF\u89C1\uFF0C\u5F00\u59CB\u89E3\u6790\u5185\u5BB9 frame\u3002");
6328
6311
  const frame = await resolveContentFrame(page, iframeLocator, options);
6329
6312
  if (!frame) {
6330
6313
  throw new Error("Failed to resolve verifycenter iframe content frame.");
@@ -6440,11 +6423,11 @@ var refreshCaptcha = async (page, frame, options) => {
6440
6423
  const clicked = await clickCaptchaAction(frame, options.refreshTexts, {
6441
6424
  ...options,
6442
6425
  page,
6443
- logger: logger12,
6426
+ logger: logger11,
6444
6427
  forceMouse: true
6445
6428
  }).catch(() => false);
6446
6429
  if (!clicked) {
6447
- logger12.warn("Refresh button not found.");
6430
+ logger11.warn("Refresh button not found.");
6448
6431
  return false;
6449
6432
  }
6450
6433
  await page.waitForTimeout(options.refreshWaitMs);
@@ -6475,24 +6458,24 @@ var waitForCaptchaChallengeReady = async (page, frame, options) => {
6475
6458
  const hasGuideMaskVisible = options.guideMaskSelector ? await frame.locator(options.guideMaskSelector).first().isVisible({ timeout: options.loadingIndicatorVisibleTimeoutMs }).catch(() => false) : false;
6476
6459
  hasSeenGuideMask = hasSeenGuideMask || hasGuideMaskVisible;
6477
6460
  if (hasGuideMaskVisible && !hasLoggedGuideMask) {
6478
- logger12.info("\u68C0\u6D4B\u5230\u9A8C\u8BC1\u7801\u64CD\u4F5C\u5F15\u5BFC\u5C42\uFF0C\u7B49\u5F85\u5176\u6D88\u5931\u540E\u518D\u5F00\u59CB\u8BC6\u522B\u3002");
6461
+ logger11.info("\u68C0\u6D4B\u5230\u9A8C\u8BC1\u7801\u64CD\u4F5C\u5F15\u5BFC\u5C42\uFF0C\u7B49\u5F85\u5176\u6D88\u5931\u540E\u518D\u5F00\u59CB\u8BC6\u522B\u3002");
6479
6462
  hasLoggedGuideMask = true;
6480
6463
  }
6481
6464
  if (!isLoadingVisible && hasVisibleSourceImage && hasVisibleDropTarget && !hasGuideMaskVisible) {
6482
- logger12.info(
6465
+ logger11.info(
6483
6466
  hasSeenGuideMask ? "\u9A8C\u8BC1\u7801\u56FE\u7247\u548C\u62D6\u62FD\u533A\u57DF\u5DF2\u5C31\u7EEA\uFF0C\u5F15\u5BFC\u5C42\u5DF2\u6D88\u5931\u3002" : hasSeenLoading ? "\u9A8C\u8BC1\u7801\u56FE\u7247\u5DF2\u52A0\u8F7D\u5B8C\u6210\u3002" : "\u9A8C\u8BC1\u7801\u56FE\u7247\u5DF2\u5C31\u7EEA\u3002"
6484
6467
  );
6485
6468
  return;
6486
6469
  }
6487
6470
  if (hasErrorTextVisible) {
6488
- logger12.warn("\u9A8C\u8BC1\u7801\u9762\u677F\u51FA\u73B0\u7F51\u7EDC\u5F02\u5E38\u6587\u6848\uFF0C\u5C1D\u8BD5\u7ACB\u5373\u5237\u65B0\u9898\u76EE\u3002");
6471
+ logger11.warn("\u9A8C\u8BC1\u7801\u9762\u677F\u51FA\u73B0\u7F51\u7EDC\u5F02\u5E38\u6587\u6848\uFF0C\u5C1D\u8BD5\u7ACB\u5373\u5237\u65B0\u9898\u76EE\u3002");
6489
6472
  await refreshCaptcha(page, frame, options);
6490
6473
  refreshDeadline = Date.now() + options.challengeReadyRefreshTimeoutMs;
6491
6474
  hasSeenLoading = false;
6492
6475
  continue;
6493
6476
  }
6494
6477
  if ((!hasVisibleSourceImage || !hasVisibleDropTarget) && Date.now() >= refreshDeadline) {
6495
- logger12.warn(`\u9A8C\u8BC1\u7801\u9898\u76EE\u8D85\u8FC7 ${options.challengeReadyRefreshTimeoutMs}ms \u4ECD\u672A\u51C6\u5907\u597D\uFF0C\u5C1D\u8BD5\u5237\u65B0\u9898\u76EE\u3002`);
6478
+ logger11.warn(`\u9A8C\u8BC1\u7801\u9898\u76EE\u8D85\u8FC7 ${options.challengeReadyRefreshTimeoutMs}ms \u4ECD\u672A\u51C6\u5907\u597D\uFF0C\u5C1D\u8BD5\u5237\u65B0\u9898\u76EE\u3002`);
6496
6479
  await refreshCaptcha(page, frame, options);
6497
6480
  refreshDeadline = Date.now() + options.challengeReadyRefreshTimeoutMs;
6498
6481
  hasSeenLoading = false;
@@ -6540,7 +6523,7 @@ var dragPromptCaptchaImage = async (page, frame, iframeLocator, sourceLocator, d
6540
6523
  accepted
6541
6524
  };
6542
6525
  dragAttempts.push(attemptInfo);
6543
- logger12.info(
6526
+ logger11.info(
6544
6527
  `\u9A8C\u8BC1\u7801\u62D6\u62FD\u7B2C ${visualIndex + 1} \u5F20\uFF0C\u65B9\u6848 ${plan.name}\uFF0Cbadge ${baselineState.badgeCount} -> ${afterState.badgeCount}\uFF0Cselected ${baselineState.selectedCount} -> ${afterState.selectedCount}`
6545
6528
  );
6546
6529
  if (accepted) {
@@ -6558,7 +6541,7 @@ var dragPromptCaptchaImage = async (page, frame, iframeLocator, sourceLocator, d
6558
6541
  dragAttempts,
6559
6542
  finalState: await readPromptCaptchaState(frame, options)
6560
6543
  }).catch((error) => {
6561
- logger12.warn(`\u9A8C\u8BC1\u7801\u62D6\u62FD\u5931\u8D25\u8C03\u8BD5\u6293\u53D6\u5931\u8D25\uFF1A${error?.message || error}`);
6544
+ logger11.warn(`\u9A8C\u8BC1\u7801\u62D6\u62FD\u5931\u8D25\u8C03\u8BD5\u6293\u53D6\u5931\u8D25\uFF1A${error?.message || error}`);
6562
6545
  });
6563
6546
  return {
6564
6547
  accepted: false,
@@ -6575,16 +6558,16 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6575
6558
  ...options
6576
6559
  };
6577
6560
  if (!config.token) {
6578
- logger12.warn("\u7F3A\u5C11\u9A8C\u8BC1\u7801 token\uFF0C\u8DF3\u8FC7\u81EA\u52A8\u8BC6\u522B\u3002");
6561
+ logger11.warn("\u7F3A\u5C11\u9A8C\u8BC1\u7801 token\uFF0C\u8DF3\u8FC7\u81EA\u52A8\u8BC6\u522B\u3002");
6579
6562
  return false;
6580
6563
  }
6581
- logger12.info("\u5F53\u524D\u4F7F\u7528\u672Ctool\u2014\u2014\u6D4B\u8BD5\u7248\u672C");
6564
+ logger11.info("\u5F53\u524D\u4F7F\u7528\u672Ctool\u2014\u2014\u6D4B\u8BD5\u7248\u672C");
6582
6565
  for (let attempt = 1; attempt <= config.maxRetries; attempt += 1) {
6583
- logger12.info(`\u5F00\u59CB\u7B2C ${attempt}/${config.maxRetries} \u6B21 verifycenter \u9A8C\u8BC1\u7801\u8BC6\u522B\u3002`);
6566
+ logger11.info(`\u5F00\u59CB\u7B2C ${attempt}/${config.maxRetries} \u6B21 verifycenter \u9A8C\u8BC1\u7801\u8BC6\u522B\u3002`);
6584
6567
  try {
6585
6568
  const captchaContext = await getVerifycenterCaptchaContext(page, config);
6586
6569
  if (!captchaContext) {
6587
- logger12.info("Captcha container is not visible anymore.");
6570
+ logger11.info("Captcha container is not visible anymore.");
6588
6571
  return true;
6589
6572
  }
6590
6573
  const { iframeLocator, frame } = captchaContext;
@@ -6597,7 +6580,7 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6597
6580
  "ready",
6598
6581
  config
6599
6582
  ).catch((error) => {
6600
- logger12.warn(`\u9A8C\u8BC1\u7801\u8C03\u8BD5\u6293\u53D6\u5931\u8D25\uFF1A${error?.message || error}`);
6583
+ logger11.warn(`\u9A8C\u8BC1\u7801\u8C03\u8BD5\u6293\u53D6\u5931\u8D25\uFF1A${error?.message || error}`);
6601
6584
  });
6602
6585
  await page.waitForTimeout(config.recognitionDelayMs);
6603
6586
  const screenshotBuffer = await iframeLocator.screenshot();
@@ -6609,16 +6592,16 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6609
6592
  });
6610
6593
  const serialNumbers = extractCaptchaSerialNumbers(apiResponse);
6611
6594
  if (apiResponse?.code !== config.recognitionSuccessCode || serialNumbers.length === 0) {
6612
- logger12.warn(
6595
+ logger11.warn(
6613
6596
  `\u9A8C\u8BC1\u7801\u8BC6\u522B\u5931\u8D25\u3002code=${apiResponse?.code}, msg=${apiResponse?.msg || "unknown"}`
6614
6597
  );
6615
6598
  await refreshCaptcha(page, frame, config);
6616
6599
  continue;
6617
6600
  }
6618
- logger12.info(`\u9A8C\u8BC1\u7801\u8BC6\u522B\u6210\u529F\uFF0C\u5E8F\u53F7\uFF1A${serialNumbers.join(", ")}`);
6601
+ logger11.info(`\u9A8C\u8BC1\u7801\u8BC6\u522B\u6210\u529F\uFF0C\u5E8F\u53F7\uFF1A${serialNumbers.join(", ")}`);
6619
6602
  const dropTarget = await findCaptchaDropTarget(frame, config);
6620
6603
  if (!dropTarget) {
6621
- logger12.warn("\u672A\u627E\u5230\u9A8C\u8BC1\u7801\u62D6\u62FD\u76EE\u6807\u533A\u57DF\u3002");
6604
+ logger11.warn("\u672A\u627E\u5230\u9A8C\u8BC1\u7801\u62D6\u62FD\u76EE\u6807\u533A\u57DF\u3002");
6622
6605
  await refreshCaptcha(page, frame, config);
6623
6606
  continue;
6624
6607
  }
@@ -6629,7 +6612,7 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6629
6612
  `Captcha image indexes could not be normalized. raw=${serialNumbers.join(", ")}, count=${orderedSourceImages.length}`
6630
6613
  );
6631
6614
  }
6632
- logger12.info(`\u9A8C\u8BC1\u7801\u89C6\u89C9\u4F4D\u5E8F\u6620\u5C04\uFF1A${normalizedIndexes.map((index) => index + 1).join(", ")}`);
6615
+ logger11.info(`\u9A8C\u8BC1\u7801\u89C6\u89C9\u4F4D\u5E8F\u6620\u5C04\uFF1A${normalizedIndexes.map((index) => index + 1).join(", ")}`);
6633
6616
  for (const imageIndex of normalizedIndexes) {
6634
6617
  if (imageIndex < 0 || imageIndex >= orderedSourceImages.length) {
6635
6618
  throw new Error(
@@ -6661,52 +6644,52 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6661
6644
  }
6662
6645
  }
6663
6646
  const beforeSubmitState = await readPromptCaptchaState(frame, config);
6664
- logger12.info(
6647
+ logger11.info(
6665
6648
  `\u63D0\u4EA4\u524D\u9A8C\u8BC1\u7801\u72B6\u6001\uFF1Abadge=${beforeSubmitState.badgeCount}, selected=${beforeSubmitState.selectedCount}, submitDisabled=${beforeSubmitState.submitDisabled}`
6666
6649
  );
6667
6650
  const submitted = await clickCaptchaAction(frame, config.submitTexts, {
6668
6651
  ...config,
6669
6652
  page,
6670
- logger: logger12,
6653
+ logger: logger11,
6671
6654
  forceMouse: true,
6672
6655
  actionVisibleTimeoutMs: config.submitReadyTimeoutMs
6673
6656
  }).catch(() => false);
6674
6657
  if (!submitted) {
6675
- logger12.warn("\u672A\u627E\u5230\u63D0\u4EA4\u6309\u94AE\uFF0C\u53EF\u80FD\u4F1A\u81EA\u52A8\u63D0\u4EA4\u3002");
6658
+ logger11.warn("\u672A\u627E\u5230\u63D0\u4EA4\u6309\u94AE\uFF0C\u53EF\u80FD\u4F1A\u81EA\u52A8\u63D0\u4EA4\u3002");
6676
6659
  }
6677
6660
  await page.waitForTimeout(config.submitWaitMs);
6678
6661
  const afterSubmitState = await readPromptCaptchaState(frame, config);
6679
- logger12.info(
6662
+ logger11.info(
6680
6663
  `\u63D0\u4EA4\u540E\u9A8C\u8BC1\u7801\u72B6\u6001\uFF1Abadge=${afterSubmitState.badgeCount}, selected=${afterSubmitState.selectedCount}, submitDisabled=${afterSubmitState.submitDisabled}`
6681
6664
  );
6682
6665
  const stillVisible = await iframeLocator.isVisible({ timeout: config.containerVisibleTimeoutMs }).catch(() => false);
6683
6666
  if (!stillVisible) {
6684
- logger12.info("\u9A8C\u8BC1\u7801\u8BC6\u522B\u5E76\u63D0\u4EA4\u6210\u529F\u3002");
6667
+ logger11.info("\u9A8C\u8BC1\u7801\u8BC6\u522B\u5E76\u63D0\u4EA4\u6210\u529F\u3002");
6685
6668
  return true;
6686
6669
  }
6687
6670
  await maybeCollectCaptchaDebugInfo(page, frame, iframeLocator, attempt, "submit-still-visible", config, {
6688
6671
  beforeSubmitState,
6689
6672
  afterSubmitState
6690
6673
  }).catch((error) => {
6691
- logger12.warn(`\u63D0\u4EA4\u540E\u9A8C\u8BC1\u7801\u8C03\u8BD5\u6293\u53D6\u5931\u8D25\uFF1A${error?.message || error}`);
6674
+ logger11.warn(`\u63D0\u4EA4\u540E\u9A8C\u8BC1\u7801\u8C03\u8BD5\u6293\u53D6\u5931\u8D25\uFF1A${error?.message || error}`);
6692
6675
  });
6693
- logger12.warn("\u63D0\u4EA4\u540E\u9A8C\u8BC1\u7801 iframe \u4ECD\u7136\u53EF\u89C1\uFF0C\u51C6\u5907\u5237\u65B0\u540E\u91CD\u8BD5\u3002");
6676
+ logger11.warn("\u63D0\u4EA4\u540E\u9A8C\u8BC1\u7801 iframe \u4ECD\u7136\u53EF\u89C1\uFF0C\u51C6\u5907\u5237\u65B0\u540E\u91CD\u8BD5\u3002");
6694
6677
  await page.waitForTimeout(2e3);
6695
6678
  await refreshCaptcha(page, frame, config);
6696
6679
  } catch (error) {
6697
- logger12.error(`\u7B2C ${attempt}/${config.maxRetries} \u6B21\u9A8C\u8BC1\u7801\u8BC6\u522B\u5931\u8D25\uFF1A${error?.message || error}`);
6680
+ logger11.error(`\u7B2C ${attempt}/${config.maxRetries} \u6B21\u9A8C\u8BC1\u7801\u8BC6\u522B\u5931\u8D25\uFF1A${error?.message || error}`);
6698
6681
  }
6699
6682
  if (attempt < config.maxRetries) {
6700
6683
  await page.waitForTimeout(config.retryDelayBaseMs + attempt * config.retryDelayStepMs);
6701
6684
  }
6702
6685
  }
6703
- logger12.error(`\u91CD\u8BD5 ${config.maxRetries} \u6B21\u540E\uFF0C\u9A8C\u8BC1\u7801\u4ECD\u672A\u8BC6\u522B\u6210\u529F\u3002`);
6686
+ logger11.error(`\u91CD\u8BD5 ${config.maxRetries} \u6B21\u540E\uFF0C\u9A8C\u8BC1\u7801\u4ECD\u672A\u8BC6\u522B\u6210\u529F\u3002`);
6704
6687
  return false;
6705
6688
  }
6706
6689
  var sloveCaptcha = solveCaptcha;
6707
6690
 
6708
6691
  // src/chaptcha.js
6709
- var logger13 = createInternalLogger("Captcha");
6692
+ var logger12 = createInternalLogger("Captcha");
6710
6693
  var DOM_MONITOR_WAIT_TIMEOUT_MS = 1e3;
6711
6694
  var DOM_MONITOR_POST_DETECT_HIDDEN_WAIT_MS = 300;
6712
6695
  var DOM_MONITOR_RECOVERY_WAIT_MS = 100;
@@ -6781,7 +6764,7 @@ function useCaptchaMonitor(page, options) {
6781
6764
  await sleep(DOM_MONITOR_RECOVERY_WAIT_MS);
6782
6765
  continue;
6783
6766
  }
6784
- logger13.warning(
6767
+ logger12.warning(
6785
6768
  "useCaptchaMonitor",
6786
6769
  `DOM \u76D1\u63A7\u51FA\u73B0\u5F02\u5E38\uFF08\u7EE7\u7EED\u91CD\u8BD5\uFF09: selector=${domSelector}, error=${getErrorMessage(error)}`
6787
6770
  );
@@ -6789,7 +6772,7 @@ function useCaptchaMonitor(page, options) {
6789
6772
  }
6790
6773
  }
6791
6774
  })();
6792
- logger13.success("useCaptchaMonitor", `DOM \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${domSelector}`);
6775
+ logger12.success("useCaptchaMonitor", `DOM \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${domSelector}`);
6793
6776
  cleanupFns.push(async () => {
6794
6777
  await domMonitorTask?.catch(() => {
6795
6778
  });
@@ -6806,7 +6789,7 @@ function useCaptchaMonitor(page, options) {
6806
6789
  }
6807
6790
  };
6808
6791
  page.on("framenavigated", frameHandler);
6809
- logger13.success("useCaptchaMonitor", `URL \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${urlPattern}`);
6792
+ logger12.success("useCaptchaMonitor", `URL \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${urlPattern}`);
6810
6793
  Promise.resolve().then(async () => {
6811
6794
  if (!isStopped && page.url().includes(urlPattern)) {
6812
6795
  await triggerDetected();
@@ -6819,7 +6802,7 @@ function useCaptchaMonitor(page, options) {
6819
6802
  }
6820
6803
  return {
6821
6804
  stop: async () => {
6822
- logger13.info("\u6B63\u5728\u505C\u6B62\u9A8C\u8BC1\u7801\u76D1\u63A7...");
6805
+ logger12.info("\u6B63\u5728\u505C\u6B62\u9A8C\u8BC1\u7801\u76D1\u63A7...");
6823
6806
  isStopped = true;
6824
6807
  for (const fn of cleanupFns) {
6825
6808
  await fn();
@@ -6858,7 +6841,7 @@ async function solveCaptchaWithStrategy(strategyName, page, options = {}) {
6858
6841
  );
6859
6842
  return strategy.sloveCaptcha(page, resolvedOptions, {
6860
6843
  callCaptchaRecognitionApi,
6861
- logger: logger13
6844
+ logger: logger12
6862
6845
  });
6863
6846
  }
6864
6847
  var Captcha = {
@@ -6869,7 +6852,7 @@ var Captcha = {
6869
6852
  // src/mutation.js
6870
6853
  import { createHash } from "node:crypto";
6871
6854
  import { v4 as uuidv4 } from "uuid";
6872
- var logger14 = createInternalLogger("Mutation");
6855
+ var logger13 = createInternalLogger("Mutation");
6873
6856
  var MUTATION_MONITOR_MODE = Object.freeze({
6874
6857
  Added: "added",
6875
6858
  Changed: "changed",
@@ -6902,14 +6885,14 @@ var Mutation = {
6902
6885
  const stableTime = options.stableTime ?? 5 * 1e3;
6903
6886
  const timeout = options.timeout ?? 120 * 1e3;
6904
6887
  const onMutation = options.onMutation;
6905
- logger14.start("waitForStable", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, \u7A33\u5B9A\u65F6\u95F4=${stableTime}ms`);
6888
+ logger13.start("waitForStable", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, \u7A33\u5B9A\u65F6\u95F4=${stableTime}ms`);
6906
6889
  if (initialTimeout > 0) {
6907
6890
  const selectorQuery = selectorList.join(",");
6908
6891
  try {
6909
6892
  await page.waitForSelector(selectorQuery, { timeout: initialTimeout });
6910
- logger14.info(`waitForStable \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
6893
+ logger13.info(`waitForStable \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
6911
6894
  } catch (e) {
6912
- logger14.warning(`waitForStable \u521D\u59CB\u7B49\u5F85\u8D85\u65F6 (${initialTimeout}ms): ${selectorQuery}`);
6895
+ logger13.warning(`waitForStable \u521D\u59CB\u7B49\u5F85\u8D85\u65F6 (${initialTimeout}ms): ${selectorQuery}`);
6913
6896
  throw e;
6914
6897
  }
6915
6898
  }
@@ -6925,7 +6908,7 @@ var Mutation = {
6925
6908
  return "__CONTINUE__";
6926
6909
  }
6927
6910
  });
6928
- logger14.info("waitForStable \u5DF2\u542F\u7528 onMutation \u56DE\u8C03");
6911
+ logger13.info("waitForStable \u5DF2\u542F\u7528 onMutation \u56DE\u8C03");
6929
6912
  } catch (e) {
6930
6913
  }
6931
6914
  }
@@ -7040,9 +7023,9 @@ var Mutation = {
7040
7023
  { selectorList, stableTime, timeout, callbackName, hasCallback: !!onMutation }
7041
7024
  );
7042
7025
  if (result.mutationCount === 0 && result.stableTime === 0) {
7043
- logger14.warning("waitForStable \u672A\u627E\u5230\u53EF\u76D1\u63A7\u7684\u5143\u7D20");
7026
+ logger13.warning("waitForStable \u672A\u627E\u5230\u53EF\u76D1\u63A7\u7684\u5143\u7D20");
7044
7027
  }
7045
- logger14.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316${result.wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
7028
+ logger13.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316${result.wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
7046
7029
  return result;
7047
7030
  },
7048
7031
  /**
@@ -7214,22 +7197,22 @@ var Mutation = {
7214
7197
  return "__CONTINUE__";
7215
7198
  }
7216
7199
  };
7217
- logger14.start(
7200
+ logger13.start(
7218
7201
  "waitForStableAcrossRoots",
7219
7202
  `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668(\u8DE8 root), \u7A33\u5B9A\u65F6\u95F4=${waitForStableTime}ms`
7220
7203
  );
7221
7204
  if (initialTimeout > 0) {
7222
7205
  try {
7223
7206
  await page.waitForSelector(selectorQuery, { timeout: initialTimeout });
7224
- logger14.info(`waitForStableAcrossRoots \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
7207
+ logger13.info(`waitForStableAcrossRoots \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
7225
7208
  } catch (e) {
7226
- logger14.warning(`waitForStableAcrossRoots \u521D\u59CB\u7B49\u5F85\u8D85\u65F6 (${initialTimeout}ms): ${selectorQuery}`);
7209
+ logger13.warning(`waitForStableAcrossRoots \u521D\u59CB\u7B49\u5F85\u8D85\u65F6 (${initialTimeout}ms): ${selectorQuery}`);
7227
7210
  throw e;
7228
7211
  }
7229
7212
  }
7230
7213
  let state2 = await buildState();
7231
7214
  if (!state2?.hasMatched) {
7232
- logger14.warning("waitForStableAcrossRoots \u672A\u627E\u5230\u53EF\u76D1\u63A7\u7684\u5143\u7D20");
7215
+ logger13.warning("waitForStableAcrossRoots \u672A\u627E\u5230\u53EF\u76D1\u63A7\u7684\u5143\u7D20");
7233
7216
  return { mutationCount: 0, stableTime: 0, wasPaused: false };
7234
7217
  }
7235
7218
  let mutationCount = 0;
@@ -7266,7 +7249,7 @@ var Mutation = {
7266
7249
  if (lastState.snapshotKey !== lastSnapshotKey) {
7267
7250
  lastSnapshotKey = lastState.snapshotKey;
7268
7251
  mutationCount += 1;
7269
- logger14.info(
7252
+ logger13.info(
7270
7253
  `waitForStableAcrossRoots \u53D8\u5316#${mutationCount}, len=${lastState.snapshotLength}, path=${lastState.primaryPath || "unknown"}, preview="${truncate(lastState.text, 120)}"`
7271
7254
  );
7272
7255
  const signal = await invokeMutationCallback({
@@ -7279,7 +7262,7 @@ var Mutation = {
7279
7262
  continue;
7280
7263
  }
7281
7264
  if (!isPaused && stableSince > 0 && Date.now() - stableSince >= waitForStableTime) {
7282
- logger14.success("waitForStableAcrossRoots", `DOM \u7A33\u5B9A, \u603B\u5171 ${mutationCount} \u6B21\u53D8\u5316${wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
7265
+ logger13.success("waitForStableAcrossRoots", `DOM \u7A33\u5B9A, \u603B\u5171 ${mutationCount} \u6B21\u53D8\u5316${wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
7283
7266
  return {
7284
7267
  mutationCount,
7285
7268
  stableTime: waitForStableTime,
@@ -7306,7 +7289,7 @@ var Mutation = {
7306
7289
  const onMutation = options.onMutation;
7307
7290
  const rawMode = String(options.mode || MUTATION_MONITOR_MODE.Added).toLowerCase();
7308
7291
  const mode2 = [MUTATION_MONITOR_MODE.Added, MUTATION_MONITOR_MODE.Changed, MUTATION_MONITOR_MODE.All].includes(rawMode) ? rawMode : MUTATION_MONITOR_MODE.Added;
7309
- logger14.start("useMonitor", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, mode=${mode2}`);
7292
+ logger13.start("useMonitor", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, mode=${mode2}`);
7310
7293
  const monitorKey = generateKey("pk_mon");
7311
7294
  const callbackName = generateKey("pk_mon_cb");
7312
7295
  const cleanerName = generateKey("pk_mon_clean");
@@ -7449,7 +7432,7 @@ var Mutation = {
7449
7432
  return total;
7450
7433
  };
7451
7434
  }, { selectorList, monitorKey, callbackName, cleanerName, hasCallback: !!onMutation, mode: mode2 });
7452
- logger14.success("useMonitor", "\u76D1\u63A7\u5668\u5DF2\u542F\u52A8");
7435
+ logger13.success("useMonitor", "\u76D1\u63A7\u5668\u5DF2\u542F\u52A8");
7453
7436
  return {
7454
7437
  stop: async () => {
7455
7438
  let totalMutations = 0;
@@ -7462,7 +7445,7 @@ var Mutation = {
7462
7445
  }, cleanerName);
7463
7446
  } catch (e) {
7464
7447
  }
7465
- logger14.success("useMonitor.stop", `\u76D1\u63A7\u5DF2\u505C\u6B62, \u5171 ${totalMutations} \u6B21\u53D8\u5316`);
7448
+ logger13.success("useMonitor.stop", `\u76D1\u63A7\u5DF2\u505C\u6B62, \u5171 ${totalMutations} \u6B21\u53D8\u5316`);
7466
7449
  return { totalMutations };
7467
7450
  }
7468
7451
  };
@@ -8331,7 +8314,7 @@ var createTemplateLogger = (baseLogger = createBaseLogger()) => {
8331
8314
  };
8332
8315
  var getDefaultBaseLogger = () => createBaseLogger("");
8333
8316
  var Logger = {
8334
- setLogger: (logger18) => setDefaultLogger(logger18),
8317
+ setLogger: (logger17) => setDefaultLogger(logger17),
8335
8318
  info: (message) => getDefaultBaseLogger().info(message),
8336
8319
  success: (message) => getDefaultBaseLogger().success(message),
8337
8320
  warning: (message) => getDefaultBaseLogger().warning(message),
@@ -8339,8 +8322,8 @@ var Logger = {
8339
8322
  error: (message) => getDefaultBaseLogger().error(message),
8340
8323
  debug: (message) => getDefaultBaseLogger().debug(message),
8341
8324
  start: (message) => getDefaultBaseLogger().start(message),
8342
- useTemplate: (logger18) => {
8343
- if (logger18) return createTemplateLogger(createBaseLogger("", logger18));
8325
+ useTemplate: (logger17) => {
8326
+ if (logger17) return createTemplateLogger(createBaseLogger("", logger17));
8344
8327
  return createTemplateLogger();
8345
8328
  }
8346
8329
  };
@@ -8414,7 +8397,7 @@ var LOCATION_NETWORK_SUFFIX_PATTERNS = [
8414
8397
  ];
8415
8398
  var cachedStripLogoSrcPromise = null;
8416
8399
  var cachedEnrichmentByContext = /* @__PURE__ */ new WeakMap();
8417
- var logger15 = createInternalLogger("Watermarkify");
8400
+ var logger14 = createInternalLogger("Watermarkify");
8418
8401
  var normalizeText2 = (value) => String(value || "").trim();
8419
8402
  var toInline = (value, maxLen = 200) => {
8420
8403
  const text = normalizeText2(value);
@@ -8656,9 +8639,9 @@ var resolveWithCustomResolver = async (page, baseMeta, options = {}) => {
8656
8639
  location: toInline(resolved.location, 80)
8657
8640
  };
8658
8641
  if (enrichment.ip || enrichment.location) {
8659
- logger15.info(`\u81EA\u5B9A\u4E49 resolver \u547D\u4E2D: ip=${enrichment.ip || "-"}, loc=${enrichment.location || "-"}`);
8642
+ logger14.info(`\u81EA\u5B9A\u4E49 resolver \u547D\u4E2D: ip=${enrichment.ip || "-"}, loc=${enrichment.location || "-"}`);
8660
8643
  } else {
8661
- logger15.warning("\u81EA\u5B9A\u4E49 resolver \u5DF2\u6267\u884C\uFF0C\u4F46\u672A\u8FD4\u56DE IP/Loc");
8644
+ logger14.warning("\u81EA\u5B9A\u4E49 resolver \u5DF2\u6267\u884C\uFF0C\u4F46\u672A\u8FD4\u56DE IP/Loc");
8662
8645
  }
8663
8646
  return enrichment;
8664
8647
  } finally {
@@ -8847,12 +8830,12 @@ var normalizeWatermarkifyRenderMode = (value) => {
8847
8830
  };
8848
8831
  var composeScreenshotBufferWithBrowser = async (page, buffer, overlaySvg, imageInfo = {}, options = {}) => {
8849
8832
  if (!page || typeof page.context !== "function") {
8850
- logger15.warning("watermarkify \u6D4F\u89C8\u5668\u5408\u6210\u8DF3\u8FC7: \u7F3A\u5C11\u53EF\u7528 page");
8833
+ logger14.warning("watermarkify \u6D4F\u89C8\u5668\u5408\u6210\u8DF3\u8FC7: \u7F3A\u5C11\u53EF\u7528 page");
8851
8834
  return buffer;
8852
8835
  }
8853
8836
  const renderScope = await openProbePage(page);
8854
8837
  if (!renderScope?.page) {
8855
- logger15.warning("watermarkify \u6D4F\u89C8\u5668\u5408\u6210\u8DF3\u8FC7: \u65E0\u6CD5\u521B\u5EFA render page");
8838
+ logger14.warning("watermarkify \u6D4F\u89C8\u5668\u5408\u6210\u8DF3\u8FC7: \u65E0\u6CD5\u521B\u5EFA render page");
8856
8839
  return buffer;
8857
8840
  }
8858
8841
  try {
@@ -8917,13 +8900,13 @@ var composeScreenshotBufferWithBrowser = async (page, buffer, overlaySvg, imageI
8917
8900
  fullPage: true,
8918
8901
  animations: "disabled"
8919
8902
  }).catch((error) => {
8920
- logger15.warning(`watermarkify \u6D4F\u89C8\u5668\u5408\u6210\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
8903
+ logger14.warning(`watermarkify \u6D4F\u89C8\u5668\u5408\u6210\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
8921
8904
  return null;
8922
8905
  });
8923
8906
  if (Buffer.isBuffer(composed) && composed.length > 0) {
8924
8907
  return composed;
8925
8908
  }
8926
- logger15.warning("watermarkify \u6D4F\u89C8\u5668\u5408\u6210\u5931\u8D25: \u672A\u5F97\u5230\u6709\u6548\u622A\u56FE\u7ED3\u679C");
8909
+ logger14.warning("watermarkify \u6D4F\u89C8\u5668\u5408\u6210\u5931\u8D25: \u672A\u5F97\u5230\u6709\u6548\u622A\u56FE\u7ED3\u679C");
8927
8910
  return buffer;
8928
8911
  } finally {
8929
8912
  await renderScope.close().catch(() => {
@@ -8936,7 +8919,7 @@ var resolveWithIpLookup = async (page, options = {}) => {
8936
8919
  }
8937
8920
  const probeScope = await openProbePage(page);
8938
8921
  if (!probeScope?.page) {
8939
- logger15.warning("ipLookup \u8DF3\u8FC7: \u65E0\u6CD5\u521B\u5EFA probe page");
8922
+ logger14.warning("ipLookup \u8DF3\u8FC7: \u65E0\u6CD5\u521B\u5EFA probe page");
8940
8923
  return null;
8941
8924
  }
8942
8925
  const timeoutMs = Math.max(
@@ -8945,12 +8928,12 @@ var resolveWithIpLookup = async (page, options = {}) => {
8945
8928
  );
8946
8929
  try {
8947
8930
  const probePage = probeScope.page;
8948
- logger15.info(`ipLookup \u5C1D\u8BD5: url=${DEFAULT_IP_LOOKUP_URL}, timeoutMs=${timeoutMs}`);
8931
+ logger14.info(`ipLookup \u5C1D\u8BD5: url=${DEFAULT_IP_LOOKUP_URL}, timeoutMs=${timeoutMs}`);
8949
8932
  const response = await probePage.goto(DEFAULT_IP_LOOKUP_URL, {
8950
8933
  waitUntil: "commit",
8951
8934
  timeout: timeoutMs
8952
8935
  }).catch((error) => {
8953
- logger15.warning(`ipLookup \u8BF7\u6C42\u5931\u8D25: url=${DEFAULT_IP_LOOKUP_URL}, error=${error instanceof Error ? error.message : String(error)}`);
8936
+ logger14.warning(`ipLookup \u8BF7\u6C42\u5931\u8D25: url=${DEFAULT_IP_LOOKUP_URL}, error=${error instanceof Error ? error.message : String(error)}`);
8954
8937
  return null;
8955
8938
  });
8956
8939
  const status = response && typeof response.status === "function" ? response.status() : 0;
@@ -8972,13 +8955,13 @@ var resolveWithIpLookup = async (page, options = {}) => {
8972
8955
  }
8973
8956
  const parsed = parseIpIpJsonResponse(rawText);
8974
8957
  if (parsed?.ip || parsed?.location) {
8975
- logger15.info(`ipLookup \u6210\u529F: url=${DEFAULT_IP_LOOKUP_URL}, status=${status || "-"}, contentType=${contentType || "-"}, ip=${parsed.ip || "-"}, loc=${parsed.location || "-"}`);
8958
+ logger14.info(`ipLookup \u6210\u529F: url=${DEFAULT_IP_LOOKUP_URL}, status=${status || "-"}, contentType=${contentType || "-"}, ip=${parsed.ip || "-"}, loc=${parsed.location || "-"}`);
8976
8959
  return parsed;
8977
8960
  }
8978
- logger15.warning(`ipLookup \u672A\u89E3\u6790\u51FA IP/Loc: url=${DEFAULT_IP_LOOKUP_URL}, status=${status || "-"}, contentType=${contentType || "-"}, preview=${shortenTail(rawText, 120) || "[empty]"}`);
8961
+ logger14.warning(`ipLookup \u672A\u89E3\u6790\u51FA IP/Loc: url=${DEFAULT_IP_LOOKUP_URL}, status=${status || "-"}, contentType=${contentType || "-"}, preview=${shortenTail(rawText, 120) || "[empty]"}`);
8979
8962
  return null;
8980
8963
  } catch (error) {
8981
- logger15.warning(`ipLookup \u6267\u884C\u5F02\u5E38\uFF0C\u672A\u83B7\u5F97 IP/Loc: ${error instanceof Error ? error.message : String(error)}`);
8964
+ logger14.warning(`ipLookup \u6267\u884C\u5F02\u5E38\uFF0C\u672A\u83B7\u5F97 IP/Loc: ${error instanceof Error ? error.message : String(error)}`);
8982
8965
  return null;
8983
8966
  } finally {
8984
8967
  await probeScope.close().catch(() => {
@@ -8992,10 +8975,10 @@ var resolveEnrichment = async (page, baseMeta, options) => {
8992
8975
  ip: toInline(options.ip, 80),
8993
8976
  location: toInline(options.location, 80)
8994
8977
  };
8995
- logger15.info(`enrichment \u5F00\u59CB: host=${baseMeta.hostname || "-"}, hasPresetIp=${Boolean(merged.ip)}, hasPresetLoc=${Boolean(merged.location)}, ipLookup=${options.ipLookup !== false}`);
8978
+ logger14.info(`enrichment \u5F00\u59CB: host=${baseMeta.hostname || "-"}, hasPresetIp=${Boolean(merged.ip)}, hasPresetLoc=${Boolean(merged.location)}, ipLookup=${options.ipLookup !== false}`);
8996
8979
  if (!merged.ip || !merged.location) {
8997
8980
  if (cached?.ip || cached?.location) {
8998
- logger15.info(`enrichment \u547D\u4E2D\u4E0A\u4E0B\u6587\u7F13\u5B58: ip=${cached.ip || "-"}, loc=${cached.location || "-"}`);
8981
+ logger14.info(`enrichment \u547D\u4E2D\u4E0A\u4E0B\u6587\u7F13\u5B58: ip=${cached.ip || "-"}, loc=${cached.location || "-"}`);
8999
8982
  }
9000
8983
  fillEnrichment(merged, cached);
9001
8984
  }
@@ -9019,15 +9002,15 @@ var resolveEnrichment = async (page, baseMeta, options) => {
9019
9002
  "x-geo-country"
9020
9003
  ]), 80);
9021
9004
  if (!merged.location || isWeakLocationValue(merged.location) && headerLocation) {
9022
- logger15.info(`enrichment \u4F7F\u7528\u54CD\u5E94\u5934\u8865\u5145 Loc: ${headerLocation || "-"}`);
9005
+ logger14.info(`enrichment \u4F7F\u7528\u54CD\u5E94\u5934\u8865\u5145 Loc: ${headerLocation || "-"}`);
9023
9006
  merged.location = headerLocation || merged.location;
9024
9007
  }
9025
9008
  }
9026
9009
  writeCachedEnrichment(page, merged);
9027
9010
  if (merged.ip || merged.location) {
9028
- logger15.info(`enrichment \u5B8C\u6210: ip=${merged.ip || "-"}, loc=${merged.location || "-"}`);
9011
+ logger14.info(`enrichment \u5B8C\u6210: ip=${merged.ip || "-"}, loc=${merged.location || "-"}`);
9029
9012
  } else {
9030
- logger15.warning("enrichment \u5B8C\u6210: \u672A\u83B7\u5F97 IP/Loc");
9013
+ logger14.warning("enrichment \u5B8C\u6210: \u672A\u83B7\u5F97 IP/Loc");
9031
9014
  }
9032
9015
  return merged;
9033
9016
  };
@@ -9840,7 +9823,7 @@ var watermarkifyScreenshotBuffer = async (buffer, meta, page = null, options = {
9840
9823
  }
9841
9824
  const imageInfo = readImageInfo(buffer);
9842
9825
  if (!imageInfo.width || !imageInfo.height || !imageInfo.mimeType) {
9843
- logger15.warning("watermarkify \u8DF3\u8FC7: \u65E0\u6CD5\u89E3\u6790\u622A\u56FE\u5C3A\u5BF8\u6216\u683C\u5F0F");
9826
+ logger14.warning("watermarkify \u8DF3\u8FC7: \u65E0\u6CD5\u89E3\u6790\u622A\u56FE\u5C3A\u5BF8\u6216\u683C\u5F0F");
9844
9827
  return buffer;
9845
9828
  }
9846
9829
  const isMobileStrip = normalizeDevice(meta.device) === Device.Mobile && hasStrip;
@@ -9858,7 +9841,7 @@ var watermarkifyScreenshotBuffer = async (buffer, meta, page = null, options = {
9858
9841
 
9859
9842
  // src/internals/compression.js
9860
9843
  import { Jimp as Jimp2, JimpMime, ResizeStrategy } from "jimp";
9861
- var logger16 = createInternalLogger("Compression");
9844
+ var logger15 = createInternalLogger("Compression");
9862
9845
  var DEFAULT_SCREENSHOT_MAX_BYTES = 5 * 1024 * 1024;
9863
9846
  var DEFAULT_SCREENSHOT_OUTPUT_TYPE = "jpeg";
9864
9847
  var DEFAULT_SCREENSHOT_QUALITY = 0.72;
@@ -9977,18 +9960,18 @@ var compressImageBufferToBase64 = async (buffer, compression) => {
9977
9960
  return buffer.toString("base64");
9978
9961
  }
9979
9962
  const result = await compressImageBuffer(buffer, compression).catch((error) => {
9980
- logger16.warning(`captureScreen \u538B\u7F29\u5931\u8D25\uFF0C\u8FD4\u56DE\u539F\u56FE: ${error instanceof Error ? error.message : String(error)}`);
9963
+ logger15.warning(`captureScreen \u538B\u7F29\u5931\u8D25\uFF0C\u8FD4\u56DE\u539F\u56FE: ${error instanceof Error ? error.message : String(error)}`);
9981
9964
  return null;
9982
9965
  });
9983
9966
  if (!result?.buffer) {
9984
9967
  return buffer.toString("base64");
9985
9968
  }
9986
9969
  if (result.withinLimit) {
9987
- logger16.info(
9970
+ logger15.info(
9988
9971
  `captureScreen \u5DF2\u538B\u7F29: ${originalBytes} -> ${result.bytes} bytes, format=${result.format}, quality=${result.quality}, scale=${result.scale}, size=${result.width}x${result.height}`
9989
9972
  );
9990
9973
  } else {
9991
- logger16.warning(
9974
+ logger15.warning(
9992
9975
  `captureScreen \u538B\u7F29\u540E\u4ECD\u8D85\u8FC7\u76EE\u6807: ${originalBytes} -> ${result.bytes} bytes, maxBytes=${compression.maxBytes}, format=${result.format}, quality=${result.quality}, scale=${result.scale}`
9993
9976
  );
9994
9977
  }
@@ -9996,7 +9979,7 @@ var compressImageBufferToBase64 = async (buffer, compression) => {
9996
9979
  };
9997
9980
 
9998
9981
  // src/share.js
9999
- var logger17 = createInternalLogger("Share");
9982
+ var logger16 = createInternalLogger("Share");
10000
9983
  var DEFAULT_TIMEOUT_MS2 = 50 * 1e3;
10001
9984
  var DEFAULT_PAYLOAD_SNAPSHOT_MAX_LEN = 500;
10002
9985
  var DEFAULT_POLL_INTERVAL_MS = 120;
@@ -10133,7 +10116,7 @@ var createDomShareMonitor = async (page, options = {}) => {
10133
10116
  const onMatch = typeof options.onMatch === "function" ? options.onMatch : null;
10134
10117
  const onTelemetry = typeof options.onTelemetry === "function" ? options.onTelemetry : null;
10135
10118
  let matched = false;
10136
- logger17.info(`DOM \u76D1\u542C\u51C6\u5907\u6302\u8F7D: selectors=${toJsonInline(selectors, 120)}, mode=${mode2}`);
10119
+ logger16.info(`DOM \u76D1\u542C\u51C6\u5907\u6302\u8F7D: selectors=${toJsonInline(selectors, 120)}, mode=${mode2}`);
10137
10120
  const monitor = await Mutation.useMonitor(page, selectors, {
10138
10121
  mode: mode2,
10139
10122
  onMutation: (context = {}) => {
@@ -10151,12 +10134,12 @@ ${text}`;
10151
10134
  });
10152
10135
  }
10153
10136
  if (mutationCount <= 5 || mutationCount % 50 === 0) {
10154
- logger17.info(`DOM \u53D8\u5316\u5DF2\u6355\u83B7: mutationCount=${mutationCount}, mutationNodes=${mutationNodes.length}`);
10137
+ logger16.info(`DOM \u53D8\u5316\u5DF2\u6355\u83B7: mutationCount=${mutationCount}, mutationNodes=${mutationNodes.length}`);
10155
10138
  }
10156
10139
  const [candidate] = Utils.parseLinks(rawDom, { prefix }) || [];
10157
10140
  if (!candidate) return;
10158
10141
  matched = true;
10159
- logger17.success("captureLink.domHit", `DOM \u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: mutationCount=${mutationCount}, link=${candidate}`);
10142
+ logger16.success("captureLink.domHit", `DOM \u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: mutationCount=${mutationCount}, link=${candidate}`);
10160
10143
  if (onMatch) {
10161
10144
  onMatch({
10162
10145
  link: candidate,
@@ -10172,7 +10155,7 @@ ${text}`;
10172
10155
  return {
10173
10156
  stop: async () => {
10174
10157
  const result = await monitor.stop();
10175
- logger17.info(`DOM \u76D1\u542C\u5DF2\u505C\u6B62: totalMutations=${result?.totalMutations || 0}`);
10158
+ logger16.info(`DOM \u76D1\u542C\u5DF2\u505C\u6B62: totalMutations=${result?.totalMutations || 0}`);
10176
10159
  return result;
10177
10160
  }
10178
10161
  };
@@ -10221,8 +10204,8 @@ var Share = {
10221
10204
  if (share.mode === "response" && apiMatchers.length === 0) {
10222
10205
  throw new Error("Share.captureLink requires share.xurl[0] api matcher when mode=response");
10223
10206
  }
10224
- logger17.start("captureLink", `mode=${share.mode}, timeoutMs=${timeoutDisabled ? "disabled" : timeoutMs}, prefix=${share.prefix}`);
10225
- logger17.info(`captureLink \u914D\u7F6E: xurl=${toJsonInline(share.xurl)}, domMode=${domMode}, domSelectors=${toJsonInline(domSelectors, 120)}`);
10207
+ logger16.start("captureLink", `mode=${share.mode}, timeoutMs=${timeoutDisabled ? "disabled" : timeoutMs}, prefix=${share.prefix}`);
10208
+ logger16.info(`captureLink \u914D\u7F6E: xurl=${toJsonInline(share.xurl)}, domMode=${domMode}, domSelectors=${toJsonInline(domSelectors, 120)}`);
10226
10209
  const stats = {
10227
10210
  actionTimedOut: false,
10228
10211
  domMutationCount: 0,
@@ -10234,7 +10217,7 @@ var Share = {
10234
10217
  responseSampleUrls: []
10235
10218
  };
10236
10219
  if (isAborted()) {
10237
- logger17.warning(`captureLink \u5DF2\u53D6\u6D88: ${abortReason()}`);
10220
+ logger16.warning(`captureLink \u5DF2\u53D6\u6D88: ${abortReason()}`);
10238
10221
  return {
10239
10222
  link: null,
10240
10223
  payloadText: "",
@@ -10257,7 +10240,7 @@ var Share = {
10257
10240
  link: validated,
10258
10241
  payloadText: String(payloadText || "")
10259
10242
  };
10260
- logger17.info(`\u5019\u9009\u94FE\u63A5\u5DF2\u786E\u8BA4: source=${source}, link=${validated}`);
10243
+ logger16.info(`\u5019\u9009\u94FE\u63A5\u5DF2\u786E\u8BA4: source=${source}, link=${validated}`);
10261
10244
  return true;
10262
10245
  };
10263
10246
  const resolveResponseCandidate = (responseText) => {
@@ -10292,7 +10275,7 @@ var Share = {
10292
10275
  try {
10293
10276
  await monitor.stop();
10294
10277
  } catch (error) {
10295
- logger17.warning(`\u505C\u6B62 DOM \u76D1\u542C\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
10278
+ logger16.warning(`\u505C\u6B62 DOM \u76D1\u542C\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
10296
10279
  }
10297
10280
  };
10298
10281
  const onResponse = async (response) => {
@@ -10306,29 +10289,29 @@ var Share = {
10306
10289
  stats.responseSampleUrls.push(url);
10307
10290
  }
10308
10291
  if (stats.responseObserved <= 5) {
10309
- logger17.info(`\u63A5\u53E3\u54CD\u5E94\u91C7\u6837(${stats.responseObserved}): ${url}`);
10292
+ logger16.info(`\u63A5\u53E3\u54CD\u5E94\u91C7\u6837(${stats.responseObserved}): ${url}`);
10310
10293
  }
10311
10294
  if (!apiMatchers.some((matcher) => url.includes(matcher))) return;
10312
10295
  stats.responseMatched += 1;
10313
10296
  stats.lastMatchedUrl = url;
10314
- logger17.info(`\u63A5\u53E3\u547D\u4E2D\u5339\u914D(${stats.responseMatched}): ${url}`);
10297
+ logger16.info(`\u63A5\u53E3\u547D\u4E2D\u5339\u914D(${stats.responseMatched}): ${url}`);
10315
10298
  const text = await response.text();
10316
10299
  const hit = resolveResponseCandidate(text);
10317
10300
  if (!hit?.link) {
10318
10301
  if (stats.responseMatched <= 3) {
10319
- logger17.info(`\u63A5\u53E3\u89E3\u6790\u5B8C\u6210\u4F46\u672A\u63D0\u53D6\u5230\u5206\u4EAB\u94FE\u63A5: payloadSize=${text.length}`);
10302
+ logger16.info(`\u63A5\u53E3\u89E3\u6790\u5B8C\u6210\u4F46\u672A\u63D0\u53D6\u5230\u5206\u4EAB\u94FE\u63A5: payloadSize=${text.length}`);
10320
10303
  }
10321
10304
  return;
10322
10305
  }
10323
10306
  stats.responseResolved += 1;
10324
- logger17.success("captureLink.responseHit", `\u63A5\u53E3\u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: url=${url}, link=${hit.link}`);
10307
+ logger16.success("captureLink.responseHit", `\u63A5\u53E3\u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: url=${url}, link=${hit.link}`);
10325
10308
  setCandidate("response", hit.link, hit.payloadText);
10326
10309
  } catch (error) {
10327
- logger17.warning(`\u63A5\u53E3\u54CD\u5E94\u5904\u7406\u5F02\u5E38: ${error instanceof Error ? error.message : String(error)}`);
10310
+ logger16.warning(`\u63A5\u53E3\u54CD\u5E94\u5904\u7406\u5F02\u5E38: ${error instanceof Error ? error.message : String(error)}`);
10328
10311
  }
10329
10312
  };
10330
10313
  if (share.mode === "dom") {
10331
- logger17.info("\u5F53\u524D\u4E3A DOM \u6A21\u5F0F\uFF0C\u4EC5\u542F\u7528 DOM \u76D1\u542C");
10314
+ logger16.info("\u5F53\u524D\u4E3A DOM \u6A21\u5F0F\uFF0C\u4EC5\u542F\u7528 DOM \u76D1\u542C");
10332
10315
  domMonitor = await createDomShareMonitor(page, {
10333
10316
  prefix: share.prefix,
10334
10317
  selectors: domSelectors,
@@ -10343,17 +10326,17 @@ var Share = {
10343
10326
  });
10344
10327
  }
10345
10328
  if (share.mode === "response") {
10346
- logger17.info(`\u5F53\u524D\u4E3A\u63A5\u53E3\u6A21\u5F0F\uFF0C\u6302\u8F7D response \u76D1\u542C: apiMatchers=${toJsonInline(apiMatchers, 160)}`);
10329
+ logger16.info(`\u5F53\u524D\u4E3A\u63A5\u53E3\u6A21\u5F0F\uFF0C\u6302\u8F7D response \u76D1\u542C: apiMatchers=${toJsonInline(apiMatchers, 160)}`);
10347
10330
  page.on("response", onResponse);
10348
10331
  }
10349
10332
  if (share.mode === "custom") {
10350
- logger17.info("\u5F53\u524D\u4E3A custom \u6A21\u5F0F\uFF0C\u5C06\u4F7F\u7528 performActions \u8FD4\u56DE\u503C");
10333
+ logger16.info("\u5F53\u524D\u4E3A custom \u6A21\u5F0F\uFF0C\u5C06\u4F7F\u7528 performActions \u8FD4\u56DE\u503C");
10351
10334
  }
10352
10335
  const deadline = timeoutDisabled ? Infinity : Date.now() + timeoutMs;
10353
10336
  const getRemainingMs = () => timeoutDisabled ? Infinity : Math.max(0, deadline - Date.now());
10354
10337
  try {
10355
10338
  const actionTimeout = getRemainingMs();
10356
- logger17.start("captureLink.performActions", `\u6267\u884C\u52A8\u4F5C\u9884\u7B97=${timeoutDisabled ? "disabled" : `${actionTimeout}ms`}`);
10339
+ logger16.start("captureLink.performActions", `\u6267\u884C\u52A8\u4F5C\u9884\u7B97=${timeoutDisabled ? "disabled" : `${actionTimeout}ms`}`);
10357
10340
  let actionValue;
10358
10341
  if (!isAborted() && actionTimeout > 0) {
10359
10342
  let timer = null;
@@ -10366,30 +10349,30 @@ var Share = {
10366
10349
  ]);
10367
10350
  if (timer) clearTimeout(timer);
10368
10351
  if (actionResult.type === "error") {
10369
- logger17.fail("captureLink.performActions", actionResult.error);
10352
+ logger16.fail("captureLink.performActions", actionResult.error);
10370
10353
  throw actionResult.error;
10371
10354
  }
10372
10355
  if (actionResult.type === "timeout") {
10373
10356
  stats.actionTimedOut = true;
10374
- logger17.warning(`performActions \u5DF2\u8D85\u65F6 (${actionTimeout}ms)\uFF0C\u52A8\u4F5C\u53EF\u80FD\u4ECD\u5728\u5F02\u6B65\u6267\u884C`);
10357
+ logger16.warning(`performActions \u5DF2\u8D85\u65F6 (${actionTimeout}ms)\uFF0C\u52A8\u4F5C\u53EF\u80FD\u4ECD\u5728\u5F02\u6B65\u6267\u884C`);
10375
10358
  } else {
10376
10359
  actionValue = actionResult.result;
10377
- logger17.success("captureLink.performActions", "\u6267\u884C\u52A8\u4F5C\u5B8C\u6210");
10360
+ logger16.success("captureLink.performActions", "\u6267\u884C\u52A8\u4F5C\u5B8C\u6210");
10378
10361
  }
10379
10362
  }
10380
10363
  if (share.mode === "custom") {
10381
10364
  const customLink = typeof actionValue === "string" ? actionValue : actionValue?.link || actionValue?.payloadText;
10382
10365
  const customPayloadText = typeof actionValue === "string" ? actionValue : actionValue?.payloadText;
10383
10366
  if (setCandidate("custom", customLink, customPayloadText)) {
10384
- logger17.success("captureLink.customResult", `custom \u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: link=${candidates.custom.link}`);
10367
+ logger16.success("captureLink.customResult", `custom \u547D\u4E2D\u5206\u4EAB\u94FE\u63A5: link=${candidates.custom.link}`);
10385
10368
  } else {
10386
- logger17.warning("performActions \u6267\u884C\u5B8C\u6210\u4F46\u672A\u8FD4\u56DE\u6709\u6548\u5206\u4EAB\u94FE\u63A5");
10369
+ logger16.warning("performActions \u6267\u884C\u5B8C\u6210\u4F46\u672A\u8FD4\u56DE\u6709\u6548\u5206\u4EAB\u94FE\u63A5");
10387
10370
  }
10388
10371
  }
10389
10372
  let nextProgressLogTs = Date.now() + 3e3;
10390
10373
  while (true) {
10391
10374
  if (isAborted()) {
10392
- logger17.warning(`captureLink \u5DF2\u53D6\u6D88: ${abortReason()}`);
10375
+ logger16.warning(`captureLink \u5DF2\u53D6\u6D88: ${abortReason()}`);
10393
10376
  return {
10394
10377
  link: null,
10395
10378
  payloadText: "",
@@ -10399,7 +10382,7 @@ var Share = {
10399
10382
  }
10400
10383
  const selected = candidates[share.mode];
10401
10384
  if (selected?.link) {
10402
- logger17.success("captureLink", `\u6355\u83B7\u6210\u529F: source=${share.mode}, link=${selected.link}`);
10385
+ logger16.success("captureLink", `\u6355\u83B7\u6210\u529F: source=${share.mode}, link=${selected.link}`);
10403
10386
  return {
10404
10387
  link: selected.link,
10405
10388
  payloadText: selected.payloadText,
@@ -10412,7 +10395,7 @@ var Share = {
10412
10395
  if (remaining <= 0) break;
10413
10396
  const now = Date.now();
10414
10397
  if (now >= nextProgressLogTs) {
10415
- logger17.info(
10398
+ logger16.info(
10416
10399
  `captureLink \u7B49\u5F85\u4E2D: remaining=${timeoutDisabled ? "disabled" : `${remaining}ms`}, domMutationCount=${stats.domMutationCount}, responseMatched=${stats.responseMatched}`
10417
10400
  );
10418
10401
  nextProgressLogTs = now + 5e3;
@@ -10420,11 +10403,11 @@ var Share = {
10420
10403
  await delay5(Math.max(0, Math.min(DEFAULT_POLL_INTERVAL_MS, remaining)));
10421
10404
  }
10422
10405
  if (!timeoutDisabled && share.mode === "response" && stats.responseMatched === 0) {
10423
- logger17.warning(
10406
+ logger16.warning(
10424
10407
  `\u63A5\u53E3\u76D1\u542C\u672A\u547D\u4E2D: apiMatchers=${toJsonInline(apiMatchers, 220)}, \u54CD\u5E94\u6837\u672CURLs=${toJsonInline(stats.responseSampleUrls, 420)}`
10425
10408
  );
10426
10409
  }
10427
- logger17.warning(
10410
+ logger16.warning(
10428
10411
  `captureLink ${timeoutDisabled ? "\u672A\u62FF\u5230\u94FE\u63A5" : "\u8D85\u65F6\u672A\u62FF\u5230\u94FE\u63A5"}: mode=${share.mode}, actionTimedOut=${stats.actionTimedOut}, domMutationCount=${stats.domMutationCount}, responseObserved=${stats.responseObserved}, responseMatched=${stats.responseMatched}, lastMatchedUrl=${stats.lastMatchedUrl || "none"}`
10429
10412
  );
10430
10413
  return {
@@ -10436,7 +10419,7 @@ var Share = {
10436
10419
  } finally {
10437
10420
  if (share.mode === "response") {
10438
10421
  page.off("response", onResponse);
10439
- logger17.info("response \u76D1\u542C\u5DF2\u5378\u8F7D");
10422
+ logger16.info("response \u76D1\u542C\u5DF2\u5378\u8F7D");
10440
10423
  }
10441
10424
  await stopDomMonitor();
10442
10425
  }