@skrillex1224/playwright-toolkit 3.0.4 → 3.0.6

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
@@ -6275,7 +6275,7 @@ function useCaptchaMonitor(page, options) {
6275
6275
  let isStopped = false;
6276
6276
  let isHandling = false;
6277
6277
  let frameHandler = null;
6278
- let exposedFunctionName = null;
6278
+ let domFrameHandler = null;
6279
6279
  const triggerDetected = async () => {
6280
6280
  if (isStopped || isHandling) return;
6281
6281
  isHandling = true;
@@ -6287,12 +6287,16 @@ function useCaptchaMonitor(page, options) {
6287
6287
  };
6288
6288
  const cleanupFns = [];
6289
6289
  if (domSelector) {
6290
- exposedFunctionName = `__c_d_${uuidv4().replace(/-/g, "_")}`;
6290
+ const exposedFunctionName = `__c_d_${uuidv4().replace(/-/g, "_")}`;
6291
6291
  const cleanerName = `__c_cleaner_${uuidv4().replace(/-/g, "_")}`;
6292
- page.exposeFunction(exposedFunctionName, triggerDetected).catch(() => {
6293
- });
6294
- page.addInitScript(({ selector, callbackName, cleanerName: cleanupName }) => {
6292
+ const installDomMonitor = ({ selector, callbackName, cleanerName: cleanupName }) => {
6295
6293
  (() => {
6294
+ if (typeof window[cleanupName] === "function") {
6295
+ try {
6296
+ window[cleanupName]();
6297
+ } catch {
6298
+ }
6299
+ }
6296
6300
  let observer = null;
6297
6301
  const checkAndReport = () => {
6298
6302
  const element = document.querySelector(selector);
@@ -6318,7 +6322,7 @@ function useCaptchaMonitor(page, options) {
6318
6322
  }
6319
6323
  };
6320
6324
  if (document.readyState === "loading") {
6321
- window.addEventListener("DOMContentLoaded", mountObserver);
6325
+ window.addEventListener("DOMContentLoaded", mountObserver, { once: true });
6322
6326
  } else {
6323
6327
  mountObserver();
6324
6328
  }
@@ -6329,9 +6333,41 @@ function useCaptchaMonitor(page, options) {
6329
6333
  }
6330
6334
  };
6331
6335
  })();
6332
- }, { selector: domSelector, callbackName: exposedFunctionName, cleanerName });
6333
- logger12.success("useCaptchaMonitor", `DOM \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${domSelector}`);
6336
+ };
6337
+ const installArgs = {
6338
+ selector: domSelector,
6339
+ callbackName: exposedFunctionName,
6340
+ cleanerName
6341
+ };
6342
+ const domMonitorReady = (async () => {
6343
+ await page.exposeFunction(exposedFunctionName, triggerDetected);
6344
+ await page.addInitScript(installDomMonitor, installArgs);
6345
+ await page.evaluate(installDomMonitor, installArgs).catch(() => {
6346
+ });
6347
+ logger12.success("useCaptchaMonitor", `DOM \u76D1\u63A7\u5DF2\u542F\u7528\uFF1A${domSelector}`);
6348
+ })().catch((error) => {
6349
+ if (isStopped) {
6350
+ return;
6351
+ }
6352
+ logger12.warn(`DOM \u76D1\u63A7\u521D\u59CB\u5316\u5931\u8D25 (${domSelector}): ${error?.message || error}`);
6353
+ });
6354
+ domFrameHandler = async (frame) => {
6355
+ if (frame !== page.mainFrame() || isStopped) {
6356
+ return;
6357
+ }
6358
+ await domMonitorReady;
6359
+ if (isStopped) {
6360
+ return;
6361
+ }
6362
+ await page.evaluate(installDomMonitor, installArgs).catch(() => {
6363
+ });
6364
+ };
6365
+ page.on("framenavigated", domFrameHandler);
6334
6366
  cleanupFns.push(async () => {
6367
+ if (domFrameHandler) {
6368
+ page.off("framenavigated", domFrameHandler);
6369
+ }
6370
+ await domMonitorReady;
6335
6371
  try {
6336
6372
  await page.evaluate((name) => {
6337
6373
  if (window[name]) {
@@ -6362,10 +6398,10 @@ function useCaptchaMonitor(page, options) {
6362
6398
  return {
6363
6399
  stop: async () => {
6364
6400
  logger12.info("\u6B63\u5728\u505C\u6B62\u9A8C\u8BC1\u7801\u76D1\u63A7...");
6401
+ isStopped = true;
6365
6402
  for (const fn of cleanupFns) {
6366
6403
  await fn();
6367
6404
  }
6368
- isStopped = true;
6369
6405
  }
6370
6406
  };
6371
6407
  }