@skrillex1224/playwright-toolkit 3.0.37 → 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 {
@@ -3987,9 +3953,9 @@ var Humanize = {
3987
3953
  await delay2(this.jitterMs(800, 0.5));
3988
3954
  }
3989
3955
  }
3990
- logger6.success("warmUpBrowsing");
3956
+ logger5.success("warmUpBrowsing");
3991
3957
  } catch (error) {
3992
- logger6.fail("warmUpBrowsing", error);
3958
+ logger5.fail("warmUpBrowsing", error);
3993
3959
  throw error;
3994
3960
  }
3995
3961
  },
@@ -4003,7 +3969,7 @@ var Humanize = {
4003
3969
  async naturalScroll(page, direction = "down", distance = 300, baseSteps = 5) {
4004
3970
  const steps = Math.max(3, baseSteps + Math.floor(Math.random() * 3) - 1);
4005
3971
  const actualDistance = this.jitterMs(distance, 0.15);
4006
- logger6.start("naturalScroll", `dir=${direction}, dist=${actualDistance}, steps=${steps}`);
3972
+ logger5.start("naturalScroll", `dir=${direction}, dist=${actualDistance}, steps=${steps}`);
4007
3973
  const sign = direction === "down" ? 1 : -1;
4008
3974
  const stepDistance = actualDistance / steps;
4009
3975
  try {
@@ -4015,9 +3981,9 @@ var Humanize = {
4015
3981
  const baseDelay = 60 + i * 25;
4016
3982
  await delay2(this.jitterMs(baseDelay, 0.3));
4017
3983
  }
4018
- logger6.success("naturalScroll");
3984
+ logger5.success("naturalScroll");
4019
3985
  } catch (error) {
4020
- logger6.fail("naturalScroll", error);
3986
+ logger5.fail("naturalScroll", error);
4021
3987
  throw error;
4022
3988
  }
4023
3989
  }
@@ -4046,7 +4012,7 @@ var resolveElement = async (page, target, { throwOnMissing = true } = {}) => {
4046
4012
  var waitJitter = (base, jitterPercent = 0.3) => delay3(jitterMs(base, jitterPercent));
4047
4013
 
4048
4014
  // src/internals/humanize/mobile.js
4049
- var logger7 = createInternalLogger("Humanize.Mobile");
4015
+ var logger6 = createInternalLogger("Humanize.Mobile");
4050
4016
  var initializedPages = /* @__PURE__ */ new WeakSet();
4051
4017
  var DEFAULT_TAP_TIMEOUT_MS = 2500;
4052
4018
  var DEFAULT_MOUSE_TAP_FALLBACK_TIMEOUT_MS = 1200;
@@ -4503,7 +4469,7 @@ var dispatchTouchSwipe = async (page, deltaY, options = {}) => {
4503
4469
  }
4504
4470
  return true;
4505
4471
  } catch (error) {
4506
- logger7.debug(`touch swipe fallback: ${error?.message || error}`);
4472
+ logger6.debug(`touch swipe fallback: ${error?.message || error}`);
4507
4473
  try {
4508
4474
  await page.evaluate((amount) => window.scrollBy(0, amount), deltaY);
4509
4475
  await waitJitter(120, 0.35);
@@ -4537,7 +4503,7 @@ var tapPoint = async (page, point, options = {}) => {
4537
4503
  );
4538
4504
  return { method: "touchscreen" };
4539
4505
  } catch (error) {
4540
- 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}`);
4541
4507
  if (!allowMouseFallback) throw error;
4542
4508
  }
4543
4509
  }
@@ -4553,10 +4519,10 @@ var MobileHumanize = {
4553
4519
  async initializeCursor(page) {
4554
4520
  if (initializedPages.has(page)) return;
4555
4521
  initializedPages.add(page);
4556
- logger7.debug("initializeCursor: mobile mode uses touch gestures, cursor init skipped");
4522
+ logger6.debug("initializeCursor: mobile mode uses touch gestures, cursor init skipped");
4557
4523
  },
4558
4524
  async humanMove(page, target) {
4559
- 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"}`);
4560
4526
  if (typeof target === "string" || target && typeof target.boundingBox === "function") {
4561
4527
  const element = await resolveElement(page, target, { throwOnMissing: false });
4562
4528
  if (!element) {
@@ -4575,10 +4541,10 @@ var MobileHumanize = {
4575
4541
  throwOnMissing = false
4576
4542
  } = options;
4577
4543
  const targetDesc = describeTarget(target);
4578
- logger7.start("humanScroll", `target=${targetDesc}`);
4544
+ logger6.start("humanScroll", `target=${targetDesc}`);
4579
4545
  const element = await resolveElement(page, target, { throwOnMissing });
4580
4546
  if (!element) {
4581
- logger7.warn(`humanScroll | \u5143\u7D20\u672A\u627E\u5230: ${targetDesc}`);
4547
+ logger6.warn(`humanScroll | \u5143\u7D20\u672A\u627E\u5230: ${targetDesc}`);
4582
4548
  return { element: null, didScroll: false, restore: null };
4583
4549
  }
4584
4550
  const startTime = Date.now();
@@ -4587,42 +4553,42 @@ var MobileHumanize = {
4587
4553
  const status = await checkElementVisibility(element);
4588
4554
  if (status.code === "VISIBLE") {
4589
4555
  if (status.isFixed) {
4590
- 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");
4591
4557
  } else {
4592
- logger7.debug("humanScroll | \u5143\u7D20\u53EF\u89C1\u4E14\u65E0\u906E\u6321");
4558
+ logger6.debug("humanScroll | \u5143\u7D20\u53EF\u89C1\u4E14\u65E0\u906E\u6321");
4593
4559
  }
4594
- logger7.success("humanScroll", didScroll ? "\u5DF2\u6EDA\u52A8" : "\u65E0\u9700\u6EDA\u52A8");
4560
+ logger6.success("humanScroll", didScroll ? "\u5DF2\u6EDA\u52A8" : "\u65E0\u9700\u6EDA\u52A8");
4595
4561
  return { element, didScroll, restore: null };
4596
4562
  }
4597
4563
  if (status.code === "ZERO_DIMENSIONS" || status.code === "NOT_INTERACTABLE") {
4598
- 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}`);
4599
4565
  return { element, didScroll, restore: null };
4600
4566
  }
4601
4567
  const scrollRect = await getScrollableRect(element);
4602
4568
  if (!scrollRect && status.isFixed && status.code === "OUT_OF_VIEWPORT") {
4603
- 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"})`);
4604
4570
  return { element, didScroll, restore: null, unscrollable: true };
4605
4571
  }
4606
4572
  if (!scrollRect && status.isFixed && status.code === "OBSTRUCTED") {
4607
- 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"})`);
4608
4574
  return { element, didScroll, restore: null, unscrollable: true };
4609
4575
  }
4610
4576
  if (scrollRect && status.code === "OBSTRUCTED" && status.obstruction?.isFixed) {
4611
4577
  const moved = await scrollAwayFromObstruction(element, status);
4612
4578
  if (moved.moved) {
4613
- 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)}`);
4614
4580
  await waitJitter(90, 0.3);
4615
4581
  didScroll = true;
4616
4582
  continue;
4617
4583
  }
4618
4584
  }
4619
4585
  if (Date.now() - startTime > maxDurationMs) {
4620
- 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)})`);
4621
4587
  return { element, didScroll, restore: null };
4622
4588
  }
4623
4589
  const stepMin = scrollRect ? Math.min(minStep, Math.max(60, scrollRect.height * 0.4)) : minStep;
4624
4590
  const stepMax = scrollRect ? Math.min(maxStep, Math.max(stepMin + 40, scrollRect.height * 0.8)) : maxStep;
4625
- 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})` : ""}`);
4626
4592
  const distance = stepMin + Math.random() * Math.max(1, stepMax - stepMin);
4627
4593
  let deltaY = status.direction === "up" ? -distance : distance;
4628
4594
  if (status.code === "OBSTRUCTED") {
@@ -4663,7 +4629,7 @@ var MobileHumanize = {
4663
4629
  const afterWindowState = await page.evaluate(() => ({ x: window.scrollX, y: window.scrollY }));
4664
4630
  if (Math.abs(afterWindowState.x - beforeWindowState.x) > 2 || Math.abs(afterWindowState.y - beforeWindowState.y) > 2) {
4665
4631
  await page.evaluate((state2) => window.scrollTo(state2.x, state2.y), beforeWindowState);
4666
- 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)}`);
4667
4633
  }
4668
4634
  }
4669
4635
  let afterElementSnapshot = null;
@@ -4677,7 +4643,7 @@ var MobileHumanize = {
4677
4643
  const afterSnapshot = await readAfterElementSnapshot();
4678
4644
  if (isTargetImmobileAfterScroll(beforeElementSnapshot, afterSnapshot)) {
4679
4645
  await restoreWindowFromSnapshot(page, beforeElementSnapshot, afterSnapshot);
4680
- 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"})`);
4681
4647
  return { element, didScroll, restore: null, unscrollable: true };
4682
4648
  }
4683
4649
  }
@@ -4709,12 +4675,12 @@ var MobileHumanize = {
4709
4675
  const moved = beforeState.kind !== afterState.kind || Math.abs(topDelta) > 2 || Math.abs(leftDelta) > 2;
4710
4676
  if (!moved) {
4711
4677
  const fallback = await scrollScrollableAncestor(element, deltaY);
4712
- 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)}`);
4713
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)) {
4714
4680
  const residualDelta = expectedDelta - topDelta;
4715
4681
  if (Math.sign(residualDelta) === Math.sign(expectedDelta) && Math.abs(residualDelta) > 24) {
4716
4682
  const fallback = await scrollScrollableAncestor(element, residualDelta);
4717
- 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)}`);
4718
4684
  }
4719
4685
  }
4720
4686
  }
@@ -4722,7 +4688,7 @@ var MobileHumanize = {
4722
4688
  const afterSnapshot = await getElementViewportSnapshot(element).catch(() => null);
4723
4689
  if (isTargetImmobileAfterScroll(beforeElementSnapshot, afterSnapshot)) {
4724
4690
  await restoreWindowFromSnapshot(page, beforeElementSnapshot, afterSnapshot);
4725
- 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"})`);
4726
4692
  return { element, didScroll, restore: null, unscrollable: true };
4727
4693
  }
4728
4694
  }
@@ -4733,14 +4699,14 @@ var MobileHumanize = {
4733
4699
  await waitJitter(80, 0.3);
4734
4700
  const finalStatus = await checkElementVisibility(element);
4735
4701
  if (finalStatus.code === "VISIBLE") {
4736
- logger7.info("humanScroll | \u539F\u751F scrollIntoViewIfNeeded \u515C\u5E95\u6210\u529F");
4737
- 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");
4738
4704
  return { element, didScroll: true, restore: null };
4739
4705
  }
4740
4706
  } catch (fallbackError) {
4741
- logger7.debug(`humanScroll | native fallback failed: ${fallbackError?.message || fallbackError}`);
4707
+ logger6.debug(`humanScroll | native fallback failed: ${fallbackError?.message || fallbackError}`);
4742
4708
  }
4743
- 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`);
4744
4710
  return { element, didScroll, restore: null };
4745
4711
  },
4746
4712
  async humanClick(page, target, options = {}) {
@@ -4755,7 +4721,7 @@ var MobileHumanize = {
4755
4721
  fallbackDomClickOnTapError = true
4756
4722
  } = options;
4757
4723
  const targetDesc = describeTarget(target);
4758
- logger7.start("humanClick", `target=${targetDesc}`);
4724
+ logger6.start("humanClick", `target=${targetDesc}`);
4759
4725
  try {
4760
4726
  if (target == null) {
4761
4727
  const viewport = resolveViewport(page);
@@ -4767,12 +4733,12 @@ var MobileHumanize = {
4767
4733
  timeoutMs: tapTimeoutMs,
4768
4734
  mouseFallbackTimeoutMs
4769
4735
  });
4770
- logger7.success("humanClick", "Tapped current position");
4736
+ logger6.success("humanClick", "Tapped current position");
4771
4737
  return true;
4772
4738
  }
4773
4739
  const element = await resolveElement(page, target, { throwOnMissing });
4774
4740
  if (!element) {
4775
- 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}`);
4776
4742
  return false;
4777
4743
  }
4778
4744
  const scrollResult = scrollIfNeeded ? await MobileHumanize.humanScroll(page, element, { throwOnMissing }) : null;
@@ -4796,19 +4762,19 @@ var MobileHumanize = {
4796
4762
  ).catch(() => null);
4797
4763
  }
4798
4764
  if (fallback?.activated) {
4799
- 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`);
4800
4766
  return true;
4801
4767
  }
4802
4768
  }
4803
4769
  const message = `\u5143\u7D20\u4E0D\u53EF\u70B9\u51FB: ${status.reason || status.code}`;
4804
4770
  if (throwOnMissing) throw new Error(message);
4805
- logger7.warn(`humanClick: ${message}\uFF0C\u8DF3\u8FC7\u70B9\u51FB`);
4771
+ logger6.warn(`humanClick: ${message}\uFF0C\u8DF3\u8FC7\u70B9\u51FB`);
4806
4772
  return false;
4807
4773
  }
4808
4774
  const box = await element.boundingBox();
4809
4775
  if (!box) {
4810
4776
  if (throwOnMissing) throw new Error("\u65E0\u6CD5\u83B7\u53D6\u5143\u7D20\u4F4D\u7F6E");
4811
- 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");
4812
4778
  return false;
4813
4779
  }
4814
4780
  await waitJitter(reactionDelay, 0.45);
@@ -4829,13 +4795,13 @@ var MobileHumanize = {
4829
4795
  "activation fallback"
4830
4796
  ).catch(() => null);
4831
4797
  if (!fallback?.activated) throw tapError;
4832
- 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}`);
4833
4799
  }
4834
4800
  await waitJitter(120, 0.35);
4835
- logger7.success("humanClick");
4801
+ logger6.success("humanClick");
4836
4802
  return true;
4837
4803
  } catch (error) {
4838
- logger7.fail("humanClick", error);
4804
+ logger6.fail("humanClick", error);
4839
4805
  throw error;
4840
4806
  }
4841
4807
  },
@@ -4888,7 +4854,7 @@ var MobileHumanize = {
4888
4854
  keyboardOptions = {}
4889
4855
  } = pressOptions || {};
4890
4856
  const targetDesc = hasTarget ? describeTarget(targetOrKey) : "current focus";
4891
- logger7.start("humanPress", `key=${key}, target=${targetDesc}`);
4857
+ logger6.start("humanPress", `key=${key}, target=${targetDesc}`);
4892
4858
  try {
4893
4859
  if (hasTarget) {
4894
4860
  await MobileHumanize.humanClick(page, targetOrKey, {
@@ -4902,10 +4868,10 @@ var MobileHumanize = {
4902
4868
  ...keyboardOptions,
4903
4869
  delay: jitterMs(holdDelay, 0.5)
4904
4870
  });
4905
- logger7.success("humanPress");
4871
+ logger6.success("humanPress");
4906
4872
  return true;
4907
4873
  } catch (error) {
4908
- logger7.fail("humanPress", error);
4874
+ logger6.fail("humanPress", error);
4909
4875
  throw error;
4910
4876
  }
4911
4877
  },
@@ -5064,7 +5030,7 @@ import { FingerprintInjector } from "fingerprint-injector";
5064
5030
  import { chromium as defaultChromiumLauncher } from "playwright";
5065
5031
 
5066
5032
  // src/proxy-bypass.js
5067
- import picomatch2 from "picomatch";
5033
+ import picomatch from "picomatch";
5068
5034
  var normalizeByPassDomains = (domains) => {
5069
5035
  if (!Array.isArray(domains)) return [];
5070
5036
  return domains.map((item) => String(item || "").trim()).filter(Boolean);
@@ -5075,7 +5041,7 @@ var buildByPassDomainRule = (rawPattern) => {
5075
5041
  if (!pattern) return null;
5076
5042
  let matcher;
5077
5043
  try {
5078
- matcher = picomatch2(pattern, { nocase: true });
5044
+ matcher = picomatch(pattern, { nocase: true });
5079
5045
  } catch {
5080
5046
  return null;
5081
5047
  }
@@ -5144,7 +5110,7 @@ var ByPass = {
5144
5110
  };
5145
5111
 
5146
5112
  // src/internals/launch/traffic.js
5147
- var logger8 = createInternalLogger("Launch");
5113
+ var logger7 = createInternalLogger("Launch");
5148
5114
  var normalizeObject = (value) => {
5149
5115
  if (!value || typeof value !== "object" || Array.isArray(value)) {
5150
5116
  return {};
@@ -5193,7 +5159,7 @@ var logLaunchTraffic = ({
5193
5159
  } = {}) => {
5194
5160
  if (!enabled) return;
5195
5161
  if (explicitProxy) {
5196
- 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");
5197
5163
  return;
5198
5164
  }
5199
5165
  if (launchProxy) {
@@ -5203,18 +5169,18 @@ var logLaunchTraffic = ({
5203
5169
  upstreamLabel = `${parsedProxyUrl.protocol}//${parsedProxyUrl.host}`;
5204
5170
  } catch {
5205
5171
  }
5206
- logger8.info(
5172
+ logger7.info(
5207
5173
  `[\u4EE3\u7406\u5DF2\u542F\u7528] \u672C\u5730=${launchProxy.server} \u4E0A\u6E38=${upstreamLabel || "-"} \u76F4\u8FDE\u57DF\u540D=${byPassDomains.join(",")}`
5208
5174
  );
5209
- 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`);
5210
5176
  return;
5211
5177
  }
5212
5178
  if (enableProxy) {
5213
- 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");
5214
5180
  } else if (proxyUrl) {
5215
- 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");
5216
5182
  }
5217
- 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`);
5218
5184
  };
5219
5185
  var createLaunchTrafficHook = ({
5220
5186
  byPassDomains = [],
@@ -5237,13 +5203,13 @@ var createLaunchTrafficHook = ({
5237
5203
  }
5238
5204
  if (!enabled || byPassDomains.length === 0) return;
5239
5205
  if (!matched || !matched.rule) return;
5240
- 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}`);
5241
5207
  });
5242
5208
  };
5243
5209
  };
5244
5210
 
5245
5211
  // src/internals/launch/default.js
5246
- var logger9 = createInternalLogger("Launch");
5212
+ var logger8 = createInternalLogger("Launch");
5247
5213
  var injectedContexts = /* @__PURE__ */ new WeakSet();
5248
5214
  var browserMajorVersionCache = /* @__PURE__ */ new Map();
5249
5215
  var DEFAULT_BROWSER_PROFILE_SCHEMA_VERSION = 1;
@@ -5284,7 +5250,7 @@ var detectBrowserMajorVersion = (launcher) => {
5284
5250
  });
5285
5251
  detectedVersion = parseChromeMajorVersion(rawVersion);
5286
5252
  } catch (error) {
5287
- 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}`);
5288
5254
  }
5289
5255
  browserMajorVersionCache.set(executablePath, detectedVersion);
5290
5256
  return detectedVersion;
@@ -5321,7 +5287,7 @@ var generateFingerprintForCore = ({ locale, browserMajorVersion, device }) => {
5321
5287
  if (requestedBrowserMajorVersion <= 0) {
5322
5288
  throw error;
5323
5289
  }
5324
- logger9.warn(
5290
+ logger8.warn(
5325
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}`
5326
5292
  );
5327
5293
  }
@@ -5367,7 +5333,7 @@ var buildReplayableBrowserProfile = (runtimeState, launcher) => {
5367
5333
  schema_version: DEFAULT_BROWSER_PROFILE_SCHEMA_VERSION
5368
5334
  };
5369
5335
  nextState = RuntimeEnv.setBrowserProfileCore(nextState, browserProfileCore);
5370
- logger9.info(
5336
+ logger8.info(
5371
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}`
5372
5338
  );
5373
5339
  return { runtimeState: nextState, browserProfileCore };
@@ -5554,7 +5520,7 @@ var DefaultLaunch = {
5554
5520
  import { execFile } from "node:child_process";
5555
5521
  import { randomInt } from "node:crypto";
5556
5522
  import { promisify } from "node:util";
5557
- var logger10 = createInternalLogger("Launch");
5523
+ var logger9 = createInternalLogger("Launch");
5558
5524
  var execFileAsync = promisify(execFile);
5559
5525
  var DEFAULT_CLOAK_CRAWLER_BASE_OPTIONS = Object.freeze({
5560
5526
  maxConcurrency: 1,
@@ -5760,7 +5726,7 @@ var resolveReplayableCloakProfile = (runtimeState, { fingerprintPlatform = "", c
5760
5726
  const nextCoreRaw = JSON.stringify(nextBrowserProfileCore);
5761
5727
  if (currentCoreRaw !== nextCoreRaw) {
5762
5728
  nextState = RuntimeEnv.setBrowserProfileCore(nextState, nextBrowserProfileCore);
5763
- logger10.info(
5729
+ logger9.info(
5764
5730
  `\u5DF2\u540C\u6B65 Cloak \u6307\u7EB9\u771F\u6E90 | env=${String(nextState.envId || "-")} | seed=${fingerprintSeed} | platform=${resolvedFingerprintPlatform} | timezone=${timezone || "-"} | locale=${locale || "-"}`
5765
5731
  );
5766
5732
  }
@@ -5847,7 +5813,7 @@ var forceTerminateBrowsersByFingerprintArg = async (fingerprintArg) => {
5847
5813
  if (error?.code === 1 || error?.code === "ENOENT") {
5848
5814
  return;
5849
5815
  }
5850
- 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)}`);
5851
5817
  });
5852
5818
  };
5853
5819
  var CloakLaunch = {
@@ -6007,7 +5973,7 @@ var Launch = withModeReflect("Launch", launchStrategies);
6007
5973
  // src/live-view.js
6008
5974
  import express from "express";
6009
5975
  import { Actor } from "apify";
6010
- var logger11 = createInternalLogger("LiveView");
5976
+ var logger10 = createInternalLogger("LiveView");
6011
5977
  async function startLiveViewServer(liveViewKey) {
6012
5978
  const app = express();
6013
5979
  app.get("/", async (req, res) => {
@@ -6032,13 +5998,13 @@ async function startLiveViewServer(liveViewKey) {
6032
5998
  </html>
6033
5999
  `);
6034
6000
  } catch (error) {
6035
- logger11.fail("Live View Server", error);
6001
+ logger10.fail("Live View Server", error);
6036
6002
  res.status(500).send(`\u65E0\u6CD5\u52A0\u8F7D\u5C4F\u5E55\u622A\u56FE: ${error.message}`);
6037
6003
  }
6038
6004
  });
6039
6005
  const port = process.env.APIFY_CONTAINER_PORT || 4321;
6040
6006
  app.listen(port, () => {
6041
- logger11.success("startLiveViewServer", `\u76D1\u542C\u7AEF\u53E3 ${port}`);
6007
+ logger10.success("startLiveViewServer", `\u76D1\u542C\u7AEF\u53E3 ${port}`);
6042
6008
  });
6043
6009
  }
6044
6010
  async function takeLiveScreenshot(liveViewKey, page, logMessage) {
@@ -6046,10 +6012,10 @@ async function takeLiveScreenshot(liveViewKey, page, logMessage) {
6046
6012
  const buffer = await capturePageScreenshot(page, { type: "png" });
6047
6013
  await Actor.setValue(liveViewKey, buffer, { contentType: "image/png" });
6048
6014
  if (logMessage) {
6049
- logger11.info(`(\u622A\u56FE): ${logMessage}`);
6015
+ logger10.info(`(\u622A\u56FE): ${logMessage}`);
6050
6016
  }
6051
6017
  } catch (e) {
6052
- 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}`);
6053
6019
  }
6054
6020
  }
6055
6021
  var useLiveView = (liveViewKey = PresetOfLiveViewKey) => {
@@ -6155,7 +6121,7 @@ var dragCaptchaAction = async (page, sourceLocator, targetLocator, options = {})
6155
6121
  };
6156
6122
 
6157
6123
  // src/internals/captcha/bytedance.js
6158
- var logger12 = createInternalLogger("Captcha");
6124
+ var logger11 = createInternalLogger("Captcha");
6159
6125
  var DEFAULT_BYTEDANCE_CAPTCHA_OPTIONS = Object.freeze({
6160
6126
  apiType: "31234",
6161
6127
  maxRetries: 3,
@@ -6287,7 +6253,7 @@ var collectCaptchaDebugInfo = async (page, frame, iframeLocator, attempt, phase,
6287
6253
  }
6288
6254
  await writeFile(infoPath, JSON.stringify(payload, null, 2), "utf8");
6289
6255
  }
6290
- 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}`);
6291
6257
  };
6292
6258
  var maybeCollectCaptchaDebugInfo = async (page, frame, iframeLocator, attempt, phase, options, extra = null) => {
6293
6259
  if (!options.debugArtifacts) {
@@ -6324,14 +6290,14 @@ var getVerifycenterCaptchaContext = async (page, options) => {
6324
6290
  if (!isContainerVisible) {
6325
6291
  return null;
6326
6292
  }
6327
- 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");
6328
6294
  let iframeLocator = page.locator(options.iframeSelector).first();
6329
6295
  let isIframeVisible = await waitForVisible(
6330
6296
  iframeLocator,
6331
6297
  options.iframeVisibleTimeoutMs
6332
6298
  );
6333
6299
  if (!isIframeVisible) {
6334
- 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");
6335
6301
  iframeLocator = captchaContainer.locator(options.iframeFallbackSelector).first();
6336
6302
  isIframeVisible = await waitForVisible(
6337
6303
  iframeLocator,
@@ -6341,7 +6307,7 @@ var getVerifycenterCaptchaContext = async (page, options) => {
6341
6307
  if (!isIframeVisible) {
6342
6308
  throw new Error("verifycenter iframe not found inside captcha container.");
6343
6309
  }
6344
- 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");
6345
6311
  const frame = await resolveContentFrame(page, iframeLocator, options);
6346
6312
  if (!frame) {
6347
6313
  throw new Error("Failed to resolve verifycenter iframe content frame.");
@@ -6457,11 +6423,11 @@ var refreshCaptcha = async (page, frame, options) => {
6457
6423
  const clicked = await clickCaptchaAction(frame, options.refreshTexts, {
6458
6424
  ...options,
6459
6425
  page,
6460
- logger: logger12,
6426
+ logger: logger11,
6461
6427
  forceMouse: true
6462
6428
  }).catch(() => false);
6463
6429
  if (!clicked) {
6464
- logger12.warn("Refresh button not found.");
6430
+ logger11.warn("Refresh button not found.");
6465
6431
  return false;
6466
6432
  }
6467
6433
  await page.waitForTimeout(options.refreshWaitMs);
@@ -6492,24 +6458,24 @@ var waitForCaptchaChallengeReady = async (page, frame, options) => {
6492
6458
  const hasGuideMaskVisible = options.guideMaskSelector ? await frame.locator(options.guideMaskSelector).first().isVisible({ timeout: options.loadingIndicatorVisibleTimeoutMs }).catch(() => false) : false;
6493
6459
  hasSeenGuideMask = hasSeenGuideMask || hasGuideMaskVisible;
6494
6460
  if (hasGuideMaskVisible && !hasLoggedGuideMask) {
6495
- 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");
6496
6462
  hasLoggedGuideMask = true;
6497
6463
  }
6498
6464
  if (!isLoadingVisible && hasVisibleSourceImage && hasVisibleDropTarget && !hasGuideMaskVisible) {
6499
- logger12.info(
6465
+ logger11.info(
6500
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"
6501
6467
  );
6502
6468
  return;
6503
6469
  }
6504
6470
  if (hasErrorTextVisible) {
6505
- 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");
6506
6472
  await refreshCaptcha(page, frame, options);
6507
6473
  refreshDeadline = Date.now() + options.challengeReadyRefreshTimeoutMs;
6508
6474
  hasSeenLoading = false;
6509
6475
  continue;
6510
6476
  }
6511
6477
  if ((!hasVisibleSourceImage || !hasVisibleDropTarget) && Date.now() >= refreshDeadline) {
6512
- 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`);
6513
6479
  await refreshCaptcha(page, frame, options);
6514
6480
  refreshDeadline = Date.now() + options.challengeReadyRefreshTimeoutMs;
6515
6481
  hasSeenLoading = false;
@@ -6557,7 +6523,7 @@ var dragPromptCaptchaImage = async (page, frame, iframeLocator, sourceLocator, d
6557
6523
  accepted
6558
6524
  };
6559
6525
  dragAttempts.push(attemptInfo);
6560
- logger12.info(
6526
+ logger11.info(
6561
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}`
6562
6528
  );
6563
6529
  if (accepted) {
@@ -6575,7 +6541,7 @@ var dragPromptCaptchaImage = async (page, frame, iframeLocator, sourceLocator, d
6575
6541
  dragAttempts,
6576
6542
  finalState: await readPromptCaptchaState(frame, options)
6577
6543
  }).catch((error) => {
6578
- 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}`);
6579
6545
  });
6580
6546
  return {
6581
6547
  accepted: false,
@@ -6592,16 +6558,16 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6592
6558
  ...options
6593
6559
  };
6594
6560
  if (!config.token) {
6595
- 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");
6596
6562
  return false;
6597
6563
  }
6598
- 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");
6599
6565
  for (let attempt = 1; attempt <= config.maxRetries; attempt += 1) {
6600
- 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`);
6601
6567
  try {
6602
6568
  const captchaContext = await getVerifycenterCaptchaContext(page, config);
6603
6569
  if (!captchaContext) {
6604
- logger12.info("Captcha container is not visible anymore.");
6570
+ logger11.info("Captcha container is not visible anymore.");
6605
6571
  return true;
6606
6572
  }
6607
6573
  const { iframeLocator, frame } = captchaContext;
@@ -6614,7 +6580,7 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6614
6580
  "ready",
6615
6581
  config
6616
6582
  ).catch((error) => {
6617
- 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}`);
6618
6584
  });
6619
6585
  await page.waitForTimeout(config.recognitionDelayMs);
6620
6586
  const screenshotBuffer = await iframeLocator.screenshot();
@@ -6626,16 +6592,16 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6626
6592
  });
6627
6593
  const serialNumbers = extractCaptchaSerialNumbers(apiResponse);
6628
6594
  if (apiResponse?.code !== config.recognitionSuccessCode || serialNumbers.length === 0) {
6629
- logger12.warn(
6595
+ logger11.warn(
6630
6596
  `\u9A8C\u8BC1\u7801\u8BC6\u522B\u5931\u8D25\u3002code=${apiResponse?.code}, msg=${apiResponse?.msg || "unknown"}`
6631
6597
  );
6632
6598
  await refreshCaptcha(page, frame, config);
6633
6599
  continue;
6634
6600
  }
6635
- 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(", ")}`);
6636
6602
  const dropTarget = await findCaptchaDropTarget(frame, config);
6637
6603
  if (!dropTarget) {
6638
- 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");
6639
6605
  await refreshCaptcha(page, frame, config);
6640
6606
  continue;
6641
6607
  }
@@ -6646,7 +6612,7 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6646
6612
  `Captcha image indexes could not be normalized. raw=${serialNumbers.join(", ")}, count=${orderedSourceImages.length}`
6647
6613
  );
6648
6614
  }
6649
- 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(", ")}`);
6650
6616
  for (const imageIndex of normalizedIndexes) {
6651
6617
  if (imageIndex < 0 || imageIndex >= orderedSourceImages.length) {
6652
6618
  throw new Error(
@@ -6678,52 +6644,52 @@ async function solveCaptcha(page, options = {}, dependencies = {}) {
6678
6644
  }
6679
6645
  }
6680
6646
  const beforeSubmitState = await readPromptCaptchaState(frame, config);
6681
- logger12.info(
6647
+ logger11.info(
6682
6648
  `\u63D0\u4EA4\u524D\u9A8C\u8BC1\u7801\u72B6\u6001\uFF1Abadge=${beforeSubmitState.badgeCount}, selected=${beforeSubmitState.selectedCount}, submitDisabled=${beforeSubmitState.submitDisabled}`
6683
6649
  );
6684
6650
  const submitted = await clickCaptchaAction(frame, config.submitTexts, {
6685
6651
  ...config,
6686
6652
  page,
6687
- logger: logger12,
6653
+ logger: logger11,
6688
6654
  forceMouse: true,
6689
6655
  actionVisibleTimeoutMs: config.submitReadyTimeoutMs
6690
6656
  }).catch(() => false);
6691
6657
  if (!submitted) {
6692
- 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");
6693
6659
  }
6694
6660
  await page.waitForTimeout(config.submitWaitMs);
6695
6661
  const afterSubmitState = await readPromptCaptchaState(frame, config);
6696
- logger12.info(
6662
+ logger11.info(
6697
6663
  `\u63D0\u4EA4\u540E\u9A8C\u8BC1\u7801\u72B6\u6001\uFF1Abadge=${afterSubmitState.badgeCount}, selected=${afterSubmitState.selectedCount}, submitDisabled=${afterSubmitState.submitDisabled}`
6698
6664
  );
6699
6665
  const stillVisible = await iframeLocator.isVisible({ timeout: config.containerVisibleTimeoutMs }).catch(() => false);
6700
6666
  if (!stillVisible) {
6701
- 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");
6702
6668
  return true;
6703
6669
  }
6704
6670
  await maybeCollectCaptchaDebugInfo(page, frame, iframeLocator, attempt, "submit-still-visible", config, {
6705
6671
  beforeSubmitState,
6706
6672
  afterSubmitState
6707
6673
  }).catch((error) => {
6708
- 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}`);
6709
6675
  });
6710
- 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");
6711
6677
  await page.waitForTimeout(2e3);
6712
6678
  await refreshCaptcha(page, frame, config);
6713
6679
  } catch (error) {
6714
- 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}`);
6715
6681
  }
6716
6682
  if (attempt < config.maxRetries) {
6717
6683
  await page.waitForTimeout(config.retryDelayBaseMs + attempt * config.retryDelayStepMs);
6718
6684
  }
6719
6685
  }
6720
- 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`);
6721
6687
  return false;
6722
6688
  }
6723
6689
  var sloveCaptcha = solveCaptcha;
6724
6690
 
6725
6691
  // src/chaptcha.js
6726
- var logger13 = createInternalLogger("Captcha");
6692
+ var logger12 = createInternalLogger("Captcha");
6727
6693
  var DOM_MONITOR_WAIT_TIMEOUT_MS = 1e3;
6728
6694
  var DOM_MONITOR_POST_DETECT_HIDDEN_WAIT_MS = 300;
6729
6695
  var DOM_MONITOR_RECOVERY_WAIT_MS = 100;
@@ -6798,7 +6764,7 @@ function useCaptchaMonitor(page, options) {
6798
6764
  await sleep(DOM_MONITOR_RECOVERY_WAIT_MS);
6799
6765
  continue;
6800
6766
  }
6801
- logger13.warning(
6767
+ logger12.warning(
6802
6768
  "useCaptchaMonitor",
6803
6769
  `DOM \u76D1\u63A7\u51FA\u73B0\u5F02\u5E38\uFF08\u7EE7\u7EED\u91CD\u8BD5\uFF09: selector=${domSelector}, error=${getErrorMessage(error)}`
6804
6770
  );
@@ -6806,7 +6772,7 @@ function useCaptchaMonitor(page, options) {
6806
6772
  }
6807
6773
  }
6808
6774
  })();
6809
- logger13.success("useCaptchaMonitor", `DOM \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${domSelector}`);
6775
+ logger12.success("useCaptchaMonitor", `DOM \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${domSelector}`);
6810
6776
  cleanupFns.push(async () => {
6811
6777
  await domMonitorTask?.catch(() => {
6812
6778
  });
@@ -6823,7 +6789,7 @@ function useCaptchaMonitor(page, options) {
6823
6789
  }
6824
6790
  };
6825
6791
  page.on("framenavigated", frameHandler);
6826
- logger13.success("useCaptchaMonitor", `URL \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${urlPattern}`);
6792
+ logger12.success("useCaptchaMonitor", `URL \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${urlPattern}`);
6827
6793
  Promise.resolve().then(async () => {
6828
6794
  if (!isStopped && page.url().includes(urlPattern)) {
6829
6795
  await triggerDetected();
@@ -6836,7 +6802,7 @@ function useCaptchaMonitor(page, options) {
6836
6802
  }
6837
6803
  return {
6838
6804
  stop: async () => {
6839
- logger13.info("\u6B63\u5728\u505C\u6B62\u9A8C\u8BC1\u7801\u76D1\u63A7...");
6805
+ logger12.info("\u6B63\u5728\u505C\u6B62\u9A8C\u8BC1\u7801\u76D1\u63A7...");
6840
6806
  isStopped = true;
6841
6807
  for (const fn of cleanupFns) {
6842
6808
  await fn();
@@ -6875,7 +6841,7 @@ async function solveCaptchaWithStrategy(strategyName, page, options = {}) {
6875
6841
  );
6876
6842
  return strategy.sloveCaptcha(page, resolvedOptions, {
6877
6843
  callCaptchaRecognitionApi,
6878
- logger: logger13
6844
+ logger: logger12
6879
6845
  });
6880
6846
  }
6881
6847
  var Captcha = {
@@ -6886,7 +6852,7 @@ var Captcha = {
6886
6852
  // src/mutation.js
6887
6853
  import { createHash } from "node:crypto";
6888
6854
  import { v4 as uuidv4 } from "uuid";
6889
- var logger14 = createInternalLogger("Mutation");
6855
+ var logger13 = createInternalLogger("Mutation");
6890
6856
  var MUTATION_MONITOR_MODE = Object.freeze({
6891
6857
  Added: "added",
6892
6858
  Changed: "changed",
@@ -6919,14 +6885,14 @@ var Mutation = {
6919
6885
  const stableTime = options.stableTime ?? 5 * 1e3;
6920
6886
  const timeout = options.timeout ?? 120 * 1e3;
6921
6887
  const onMutation = options.onMutation;
6922
- 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`);
6923
6889
  if (initialTimeout > 0) {
6924
6890
  const selectorQuery = selectorList.join(",");
6925
6891
  try {
6926
6892
  await page.waitForSelector(selectorQuery, { timeout: initialTimeout });
6927
- logger14.info(`waitForStable \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
6893
+ logger13.info(`waitForStable \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
6928
6894
  } catch (e) {
6929
- 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}`);
6930
6896
  throw e;
6931
6897
  }
6932
6898
  }
@@ -6942,7 +6908,7 @@ var Mutation = {
6942
6908
  return "__CONTINUE__";
6943
6909
  }
6944
6910
  });
6945
- logger14.info("waitForStable \u5DF2\u542F\u7528 onMutation \u56DE\u8C03");
6911
+ logger13.info("waitForStable \u5DF2\u542F\u7528 onMutation \u56DE\u8C03");
6946
6912
  } catch (e) {
6947
6913
  }
6948
6914
  }
@@ -7057,9 +7023,9 @@ var Mutation = {
7057
7023
  { selectorList, stableTime, timeout, callbackName, hasCallback: !!onMutation }
7058
7024
  );
7059
7025
  if (result.mutationCount === 0 && result.stableTime === 0) {
7060
- 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");
7061
7027
  }
7062
- 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" : ""}`);
7063
7029
  return result;
7064
7030
  },
7065
7031
  /**
@@ -7231,22 +7197,22 @@ var Mutation = {
7231
7197
  return "__CONTINUE__";
7232
7198
  }
7233
7199
  };
7234
- logger14.start(
7200
+ logger13.start(
7235
7201
  "waitForStableAcrossRoots",
7236
7202
  `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668(\u8DE8 root), \u7A33\u5B9A\u65F6\u95F4=${waitForStableTime}ms`
7237
7203
  );
7238
7204
  if (initialTimeout > 0) {
7239
7205
  try {
7240
7206
  await page.waitForSelector(selectorQuery, { timeout: initialTimeout });
7241
- logger14.info(`waitForStableAcrossRoots \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
7207
+ logger13.info(`waitForStableAcrossRoots \u5DF2\u68C0\u6D4B\u5230\u5143\u7D20: ${selectorQuery}`);
7242
7208
  } catch (e) {
7243
- 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}`);
7244
7210
  throw e;
7245
7211
  }
7246
7212
  }
7247
7213
  let state2 = await buildState();
7248
7214
  if (!state2?.hasMatched) {
7249
- 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");
7250
7216
  return { mutationCount: 0, stableTime: 0, wasPaused: false };
7251
7217
  }
7252
7218
  let mutationCount = 0;
@@ -7283,7 +7249,7 @@ var Mutation = {
7283
7249
  if (lastState.snapshotKey !== lastSnapshotKey) {
7284
7250
  lastSnapshotKey = lastState.snapshotKey;
7285
7251
  mutationCount += 1;
7286
- logger14.info(
7252
+ logger13.info(
7287
7253
  `waitForStableAcrossRoots \u53D8\u5316#${mutationCount}, len=${lastState.snapshotLength}, path=${lastState.primaryPath || "unknown"}, preview="${truncate(lastState.text, 120)}"`
7288
7254
  );
7289
7255
  const signal = await invokeMutationCallback({
@@ -7296,7 +7262,7 @@ var Mutation = {
7296
7262
  continue;
7297
7263
  }
7298
7264
  if (!isPaused && stableSince > 0 && Date.now() - stableSince >= waitForStableTime) {
7299
- 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" : ""}`);
7300
7266
  return {
7301
7267
  mutationCount,
7302
7268
  stableTime: waitForStableTime,
@@ -7323,7 +7289,7 @@ var Mutation = {
7323
7289
  const onMutation = options.onMutation;
7324
7290
  const rawMode = String(options.mode || MUTATION_MONITOR_MODE.Added).toLowerCase();
7325
7291
  const mode2 = [MUTATION_MONITOR_MODE.Added, MUTATION_MONITOR_MODE.Changed, MUTATION_MONITOR_MODE.All].includes(rawMode) ? rawMode : MUTATION_MONITOR_MODE.Added;
7326
- 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}`);
7327
7293
  const monitorKey = generateKey("pk_mon");
7328
7294
  const callbackName = generateKey("pk_mon_cb");
7329
7295
  const cleanerName = generateKey("pk_mon_clean");
@@ -7466,7 +7432,7 @@ var Mutation = {
7466
7432
  return total;
7467
7433
  };
7468
7434
  }, { selectorList, monitorKey, callbackName, cleanerName, hasCallback: !!onMutation, mode: mode2 });
7469
- logger14.success("useMonitor", "\u76D1\u63A7\u5668\u5DF2\u542F\u52A8");
7435
+ logger13.success("useMonitor", "\u76D1\u63A7\u5668\u5DF2\u542F\u52A8");
7470
7436
  return {
7471
7437
  stop: async () => {
7472
7438
  let totalMutations = 0;
@@ -7479,7 +7445,7 @@ var Mutation = {
7479
7445
  }, cleanerName);
7480
7446
  } catch (e) {
7481
7447
  }
7482
- 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`);
7483
7449
  return { totalMutations };
7484
7450
  }
7485
7451
  };
@@ -8348,7 +8314,7 @@ var createTemplateLogger = (baseLogger = createBaseLogger()) => {
8348
8314
  };
8349
8315
  var getDefaultBaseLogger = () => createBaseLogger("");
8350
8316
  var Logger = {
8351
- setLogger: (logger18) => setDefaultLogger(logger18),
8317
+ setLogger: (logger17) => setDefaultLogger(logger17),
8352
8318
  info: (message) => getDefaultBaseLogger().info(message),
8353
8319
  success: (message) => getDefaultBaseLogger().success(message),
8354
8320
  warning: (message) => getDefaultBaseLogger().warning(message),
@@ -8356,8 +8322,8 @@ var Logger = {
8356
8322
  error: (message) => getDefaultBaseLogger().error(message),
8357
8323
  debug: (message) => getDefaultBaseLogger().debug(message),
8358
8324
  start: (message) => getDefaultBaseLogger().start(message),
8359
- useTemplate: (logger18) => {
8360
- if (logger18) return createTemplateLogger(createBaseLogger("", logger18));
8325
+ useTemplate: (logger17) => {
8326
+ if (logger17) return createTemplateLogger(createBaseLogger("", logger17));
8361
8327
  return createTemplateLogger();
8362
8328
  }
8363
8329
  };
@@ -8431,7 +8397,7 @@ var LOCATION_NETWORK_SUFFIX_PATTERNS = [
8431
8397
  ];
8432
8398
  var cachedStripLogoSrcPromise = null;
8433
8399
  var cachedEnrichmentByContext = /* @__PURE__ */ new WeakMap();
8434
- var logger15 = createInternalLogger("Watermarkify");
8400
+ var logger14 = createInternalLogger("Watermarkify");
8435
8401
  var normalizeText2 = (value) => String(value || "").trim();
8436
8402
  var toInline = (value, maxLen = 200) => {
8437
8403
  const text = normalizeText2(value);
@@ -8673,9 +8639,9 @@ var resolveWithCustomResolver = async (page, baseMeta, options = {}) => {
8673
8639
  location: toInline(resolved.location, 80)
8674
8640
  };
8675
8641
  if (enrichment.ip || enrichment.location) {
8676
- 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 || "-"}`);
8677
8643
  } else {
8678
- 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");
8679
8645
  }
8680
8646
  return enrichment;
8681
8647
  } finally {
@@ -8864,12 +8830,12 @@ var normalizeWatermarkifyRenderMode = (value) => {
8864
8830
  };
8865
8831
  var composeScreenshotBufferWithBrowser = async (page, buffer, overlaySvg, imageInfo = {}, options = {}) => {
8866
8832
  if (!page || typeof page.context !== "function") {
8867
- 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");
8868
8834
  return buffer;
8869
8835
  }
8870
8836
  const renderScope = await openProbePage(page);
8871
8837
  if (!renderScope?.page) {
8872
- 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");
8873
8839
  return buffer;
8874
8840
  }
8875
8841
  try {
@@ -8934,13 +8900,13 @@ var composeScreenshotBufferWithBrowser = async (page, buffer, overlaySvg, imageI
8934
8900
  fullPage: true,
8935
8901
  animations: "disabled"
8936
8902
  }).catch((error) => {
8937
- 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)}`);
8938
8904
  return null;
8939
8905
  });
8940
8906
  if (Buffer.isBuffer(composed) && composed.length > 0) {
8941
8907
  return composed;
8942
8908
  }
8943
- 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");
8944
8910
  return buffer;
8945
8911
  } finally {
8946
8912
  await renderScope.close().catch(() => {
@@ -8953,7 +8919,7 @@ var resolveWithIpLookup = async (page, options = {}) => {
8953
8919
  }
8954
8920
  const probeScope = await openProbePage(page);
8955
8921
  if (!probeScope?.page) {
8956
- logger15.warning("ipLookup \u8DF3\u8FC7: \u65E0\u6CD5\u521B\u5EFA probe page");
8922
+ logger14.warning("ipLookup \u8DF3\u8FC7: \u65E0\u6CD5\u521B\u5EFA probe page");
8957
8923
  return null;
8958
8924
  }
8959
8925
  const timeoutMs = Math.max(
@@ -8962,12 +8928,12 @@ var resolveWithIpLookup = async (page, options = {}) => {
8962
8928
  );
8963
8929
  try {
8964
8930
  const probePage = probeScope.page;
8965
- 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}`);
8966
8932
  const response = await probePage.goto(DEFAULT_IP_LOOKUP_URL, {
8967
8933
  waitUntil: "commit",
8968
8934
  timeout: timeoutMs
8969
8935
  }).catch((error) => {
8970
- 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)}`);
8971
8937
  return null;
8972
8938
  });
8973
8939
  const status = response && typeof response.status === "function" ? response.status() : 0;
@@ -8989,13 +8955,13 @@ var resolveWithIpLookup = async (page, options = {}) => {
8989
8955
  }
8990
8956
  const parsed = parseIpIpJsonResponse(rawText);
8991
8957
  if (parsed?.ip || parsed?.location) {
8992
- 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 || "-"}`);
8993
8959
  return parsed;
8994
8960
  }
8995
- 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]"}`);
8996
8962
  return null;
8997
8963
  } catch (error) {
8998
- 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)}`);
8999
8965
  return null;
9000
8966
  } finally {
9001
8967
  await probeScope.close().catch(() => {
@@ -9009,10 +8975,10 @@ var resolveEnrichment = async (page, baseMeta, options) => {
9009
8975
  ip: toInline(options.ip, 80),
9010
8976
  location: toInline(options.location, 80)
9011
8977
  };
9012
- 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}`);
9013
8979
  if (!merged.ip || !merged.location) {
9014
8980
  if (cached?.ip || cached?.location) {
9015
- 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 || "-"}`);
9016
8982
  }
9017
8983
  fillEnrichment(merged, cached);
9018
8984
  }
@@ -9036,15 +9002,15 @@ var resolveEnrichment = async (page, baseMeta, options) => {
9036
9002
  "x-geo-country"
9037
9003
  ]), 80);
9038
9004
  if (!merged.location || isWeakLocationValue(merged.location) && headerLocation) {
9039
- 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 || "-"}`);
9040
9006
  merged.location = headerLocation || merged.location;
9041
9007
  }
9042
9008
  }
9043
9009
  writeCachedEnrichment(page, merged);
9044
9010
  if (merged.ip || merged.location) {
9045
- logger15.info(`enrichment \u5B8C\u6210: ip=${merged.ip || "-"}, loc=${merged.location || "-"}`);
9011
+ logger14.info(`enrichment \u5B8C\u6210: ip=${merged.ip || "-"}, loc=${merged.location || "-"}`);
9046
9012
  } else {
9047
- logger15.warning("enrichment \u5B8C\u6210: \u672A\u83B7\u5F97 IP/Loc");
9013
+ logger14.warning("enrichment \u5B8C\u6210: \u672A\u83B7\u5F97 IP/Loc");
9048
9014
  }
9049
9015
  return merged;
9050
9016
  };
@@ -9857,7 +9823,7 @@ var watermarkifyScreenshotBuffer = async (buffer, meta, page = null, options = {
9857
9823
  }
9858
9824
  const imageInfo = readImageInfo(buffer);
9859
9825
  if (!imageInfo.width || !imageInfo.height || !imageInfo.mimeType) {
9860
- 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");
9861
9827
  return buffer;
9862
9828
  }
9863
9829
  const isMobileStrip = normalizeDevice(meta.device) === Device.Mobile && hasStrip;
@@ -9875,7 +9841,7 @@ var watermarkifyScreenshotBuffer = async (buffer, meta, page = null, options = {
9875
9841
 
9876
9842
  // src/internals/compression.js
9877
9843
  import { Jimp as Jimp2, JimpMime, ResizeStrategy } from "jimp";
9878
- var logger16 = createInternalLogger("Compression");
9844
+ var logger15 = createInternalLogger("Compression");
9879
9845
  var DEFAULT_SCREENSHOT_MAX_BYTES = 5 * 1024 * 1024;
9880
9846
  var DEFAULT_SCREENSHOT_OUTPUT_TYPE = "jpeg";
9881
9847
  var DEFAULT_SCREENSHOT_QUALITY = 0.72;
@@ -9994,18 +9960,18 @@ var compressImageBufferToBase64 = async (buffer, compression) => {
9994
9960
  return buffer.toString("base64");
9995
9961
  }
9996
9962
  const result = await compressImageBuffer(buffer, compression).catch((error) => {
9997
- 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)}`);
9998
9964
  return null;
9999
9965
  });
10000
9966
  if (!result?.buffer) {
10001
9967
  return buffer.toString("base64");
10002
9968
  }
10003
9969
  if (result.withinLimit) {
10004
- logger16.info(
9970
+ logger15.info(
10005
9971
  `captureScreen \u5DF2\u538B\u7F29: ${originalBytes} -> ${result.bytes} bytes, format=${result.format}, quality=${result.quality}, scale=${result.scale}, size=${result.width}x${result.height}`
10006
9972
  );
10007
9973
  } else {
10008
- logger16.warning(
9974
+ logger15.warning(
10009
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}`
10010
9976
  );
10011
9977
  }
@@ -10013,7 +9979,7 @@ var compressImageBufferToBase64 = async (buffer, compression) => {
10013
9979
  };
10014
9980
 
10015
9981
  // src/share.js
10016
- var logger17 = createInternalLogger("Share");
9982
+ var logger16 = createInternalLogger("Share");
10017
9983
  var DEFAULT_TIMEOUT_MS2 = 50 * 1e3;
10018
9984
  var DEFAULT_PAYLOAD_SNAPSHOT_MAX_LEN = 500;
10019
9985
  var DEFAULT_POLL_INTERVAL_MS = 120;
@@ -10150,7 +10116,7 @@ var createDomShareMonitor = async (page, options = {}) => {
10150
10116
  const onMatch = typeof options.onMatch === "function" ? options.onMatch : null;
10151
10117
  const onTelemetry = typeof options.onTelemetry === "function" ? options.onTelemetry : null;
10152
10118
  let matched = false;
10153
- 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}`);
10154
10120
  const monitor = await Mutation.useMonitor(page, selectors, {
10155
10121
  mode: mode2,
10156
10122
  onMutation: (context = {}) => {
@@ -10168,12 +10134,12 @@ ${text}`;
10168
10134
  });
10169
10135
  }
10170
10136
  if (mutationCount <= 5 || mutationCount % 50 === 0) {
10171
- 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}`);
10172
10138
  }
10173
10139
  const [candidate] = Utils.parseLinks(rawDom, { prefix }) || [];
10174
10140
  if (!candidate) return;
10175
10141
  matched = true;
10176
- 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}`);
10177
10143
  if (onMatch) {
10178
10144
  onMatch({
10179
10145
  link: candidate,
@@ -10189,7 +10155,7 @@ ${text}`;
10189
10155
  return {
10190
10156
  stop: async () => {
10191
10157
  const result = await monitor.stop();
10192
- 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}`);
10193
10159
  return result;
10194
10160
  }
10195
10161
  };
@@ -10238,8 +10204,8 @@ var Share = {
10238
10204
  if (share.mode === "response" && apiMatchers.length === 0) {
10239
10205
  throw new Error("Share.captureLink requires share.xurl[0] api matcher when mode=response");
10240
10206
  }
10241
- logger17.start("captureLink", `mode=${share.mode}, timeoutMs=${timeoutDisabled ? "disabled" : timeoutMs}, prefix=${share.prefix}`);
10242
- 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)}`);
10243
10209
  const stats = {
10244
10210
  actionTimedOut: false,
10245
10211
  domMutationCount: 0,
@@ -10251,7 +10217,7 @@ var Share = {
10251
10217
  responseSampleUrls: []
10252
10218
  };
10253
10219
  if (isAborted()) {
10254
- logger17.warning(`captureLink \u5DF2\u53D6\u6D88: ${abortReason()}`);
10220
+ logger16.warning(`captureLink \u5DF2\u53D6\u6D88: ${abortReason()}`);
10255
10221
  return {
10256
10222
  link: null,
10257
10223
  payloadText: "",
@@ -10274,7 +10240,7 @@ var Share = {
10274
10240
  link: validated,
10275
10241
  payloadText: String(payloadText || "")
10276
10242
  };
10277
- 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}`);
10278
10244
  return true;
10279
10245
  };
10280
10246
  const resolveResponseCandidate = (responseText) => {
@@ -10309,7 +10275,7 @@ var Share = {
10309
10275
  try {
10310
10276
  await monitor.stop();
10311
10277
  } catch (error) {
10312
- 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)}`);
10313
10279
  }
10314
10280
  };
10315
10281
  const onResponse = async (response) => {
@@ -10323,29 +10289,29 @@ var Share = {
10323
10289
  stats.responseSampleUrls.push(url);
10324
10290
  }
10325
10291
  if (stats.responseObserved <= 5) {
10326
- logger17.info(`\u63A5\u53E3\u54CD\u5E94\u91C7\u6837(${stats.responseObserved}): ${url}`);
10292
+ logger16.info(`\u63A5\u53E3\u54CD\u5E94\u91C7\u6837(${stats.responseObserved}): ${url}`);
10327
10293
  }
10328
10294
  if (!apiMatchers.some((matcher) => url.includes(matcher))) return;
10329
10295
  stats.responseMatched += 1;
10330
10296
  stats.lastMatchedUrl = url;
10331
- logger17.info(`\u63A5\u53E3\u547D\u4E2D\u5339\u914D(${stats.responseMatched}): ${url}`);
10297
+ logger16.info(`\u63A5\u53E3\u547D\u4E2D\u5339\u914D(${stats.responseMatched}): ${url}`);
10332
10298
  const text = await response.text();
10333
10299
  const hit = resolveResponseCandidate(text);
10334
10300
  if (!hit?.link) {
10335
10301
  if (stats.responseMatched <= 3) {
10336
- 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}`);
10337
10303
  }
10338
10304
  return;
10339
10305
  }
10340
10306
  stats.responseResolved += 1;
10341
- 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}`);
10342
10308
  setCandidate("response", hit.link, hit.payloadText);
10343
10309
  } catch (error) {
10344
- 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)}`);
10345
10311
  }
10346
10312
  };
10347
10313
  if (share.mode === "dom") {
10348
- 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");
10349
10315
  domMonitor = await createDomShareMonitor(page, {
10350
10316
  prefix: share.prefix,
10351
10317
  selectors: domSelectors,
@@ -10360,17 +10326,17 @@ var Share = {
10360
10326
  });
10361
10327
  }
10362
10328
  if (share.mode === "response") {
10363
- 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)}`);
10364
10330
  page.on("response", onResponse);
10365
10331
  }
10366
10332
  if (share.mode === "custom") {
10367
- 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");
10368
10334
  }
10369
10335
  const deadline = timeoutDisabled ? Infinity : Date.now() + timeoutMs;
10370
10336
  const getRemainingMs = () => timeoutDisabled ? Infinity : Math.max(0, deadline - Date.now());
10371
10337
  try {
10372
10338
  const actionTimeout = getRemainingMs();
10373
- 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`}`);
10374
10340
  let actionValue;
10375
10341
  if (!isAborted() && actionTimeout > 0) {
10376
10342
  let timer = null;
@@ -10383,30 +10349,30 @@ var Share = {
10383
10349
  ]);
10384
10350
  if (timer) clearTimeout(timer);
10385
10351
  if (actionResult.type === "error") {
10386
- logger17.fail("captureLink.performActions", actionResult.error);
10352
+ logger16.fail("captureLink.performActions", actionResult.error);
10387
10353
  throw actionResult.error;
10388
10354
  }
10389
10355
  if (actionResult.type === "timeout") {
10390
10356
  stats.actionTimedOut = true;
10391
- 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`);
10392
10358
  } else {
10393
10359
  actionValue = actionResult.result;
10394
- logger17.success("captureLink.performActions", "\u6267\u884C\u52A8\u4F5C\u5B8C\u6210");
10360
+ logger16.success("captureLink.performActions", "\u6267\u884C\u52A8\u4F5C\u5B8C\u6210");
10395
10361
  }
10396
10362
  }
10397
10363
  if (share.mode === "custom") {
10398
10364
  const customLink = typeof actionValue === "string" ? actionValue : actionValue?.link || actionValue?.payloadText;
10399
10365
  const customPayloadText = typeof actionValue === "string" ? actionValue : actionValue?.payloadText;
10400
10366
  if (setCandidate("custom", customLink, customPayloadText)) {
10401
- 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}`);
10402
10368
  } else {
10403
- 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");
10404
10370
  }
10405
10371
  }
10406
10372
  let nextProgressLogTs = Date.now() + 3e3;
10407
10373
  while (true) {
10408
10374
  if (isAborted()) {
10409
- logger17.warning(`captureLink \u5DF2\u53D6\u6D88: ${abortReason()}`);
10375
+ logger16.warning(`captureLink \u5DF2\u53D6\u6D88: ${abortReason()}`);
10410
10376
  return {
10411
10377
  link: null,
10412
10378
  payloadText: "",
@@ -10416,7 +10382,7 @@ var Share = {
10416
10382
  }
10417
10383
  const selected = candidates[share.mode];
10418
10384
  if (selected?.link) {
10419
- 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}`);
10420
10386
  return {
10421
10387
  link: selected.link,
10422
10388
  payloadText: selected.payloadText,
@@ -10429,7 +10395,7 @@ var Share = {
10429
10395
  if (remaining <= 0) break;
10430
10396
  const now = Date.now();
10431
10397
  if (now >= nextProgressLogTs) {
10432
- logger17.info(
10398
+ logger16.info(
10433
10399
  `captureLink \u7B49\u5F85\u4E2D: remaining=${timeoutDisabled ? "disabled" : `${remaining}ms`}, domMutationCount=${stats.domMutationCount}, responseMatched=${stats.responseMatched}`
10434
10400
  );
10435
10401
  nextProgressLogTs = now + 5e3;
@@ -10437,11 +10403,11 @@ var Share = {
10437
10403
  await delay5(Math.max(0, Math.min(DEFAULT_POLL_INTERVAL_MS, remaining)));
10438
10404
  }
10439
10405
  if (!timeoutDisabled && share.mode === "response" && stats.responseMatched === 0) {
10440
- logger17.warning(
10406
+ logger16.warning(
10441
10407
  `\u63A5\u53E3\u76D1\u542C\u672A\u547D\u4E2D: apiMatchers=${toJsonInline(apiMatchers, 220)}, \u54CD\u5E94\u6837\u672CURLs=${toJsonInline(stats.responseSampleUrls, 420)}`
10442
10408
  );
10443
10409
  }
10444
- logger17.warning(
10410
+ logger16.warning(
10445
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"}`
10446
10412
  );
10447
10413
  return {
@@ -10453,7 +10419,7 @@ var Share = {
10453
10419
  } finally {
10454
10420
  if (share.mode === "response") {
10455
10421
  page.off("response", onResponse);
10456
- logger17.info("response \u76D1\u542C\u5DF2\u5378\u8F7D");
10422
+ logger16.info("response \u76D1\u542C\u5DF2\u5378\u8F7D");
10457
10423
  }
10458
10424
  await stopDomMonitor();
10459
10425
  }