From b0b81e9279b688898facc306b43119d6344835ad Mon Sep 17 00:00:00 2001 From: dengqichen Date: Mon, 17 Nov 2025 20:13:06 +0800 Subject: [PATCH] aaaaa --- extensions/capsolver/assets/config.js | 7 ++- src/tools/account-register/batch-register.js | 15 ++++-- .../account-register/utils/browser-manager.js | 50 ++++++++++++++++++- 3 files changed, 66 insertions(+), 6 deletions(-) diff --git a/extensions/capsolver/assets/config.js b/extensions/capsolver/assets/config.js index 75b56b1..480657f 100644 --- a/extensions/capsolver/assets/config.js +++ b/extensions/capsolver/assets/config.js @@ -23,8 +23,11 @@ export const defaultConfig = { proxyLogin: '', proxyPassword: '', - enabledForBlacklistControl: false, // Use blacklist control - blackUrlList: [], // Blacklist URL list + enabledForBlacklistControl: true, // Use blacklist control + blackUrlList: [ + 'checkout.stripe.com', // 禁用 CapSolver 在 Stripe 支付页面 + 'js.stripe.com' // 禁用 CapSolver 在 Stripe JS 资源 + ], // Blacklist URL list // Is captcha enabled by default or not enabledForRecaptcha: true, diff --git a/src/tools/account-register/batch-register.js b/src/tools/account-register/batch-register.js index ff2580a..298bb9d 100644 --- a/src/tools/account-register/batch-register.js +++ b/src/tools/account-register/batch-register.js @@ -133,10 +133,19 @@ class BatchRegister { logger.info('BatchRegister', `注册间隔: ${this.delayBetweenRuns/1000}秒`); logger.info('BatchRegister', `单次重试: ${this.maxRetries}次\n`); - // 捕获 Ctrl+C + // 捕获 Ctrl+C(支持二次强制退出) + let sigintCount = 0; process.on('SIGINT', async () => { - logger.warn('BatchRegister', '\n\n⚠️ 收到停止信号,等待当前任务完成...'); - this.running = false; + sigintCount++; + + if (sigintCount === 1) { + logger.warn('BatchRegister', '\n\n⚠️ 收到停止信号,等待当前任务完成...'); + logger.info('BatchRegister', '💡 再次按 Ctrl+C 可强制退出'); + this.running = false; + } else if (sigintCount >= 2) { + logger.error('BatchRegister', '\n\n❌ 收到第二次停止信号,强制退出!'); + process.exit(1); + } }); // 并发控制:使用 profile 池 diff --git a/src/tools/account-register/utils/browser-manager.js b/src/tools/account-register/utils/browser-manager.js index 05db735..b7cfb31 100644 --- a/src/tools/account-register/utils/browser-manager.js +++ b/src/tools/account-register/utils/browser-manager.js @@ -192,10 +192,58 @@ class BrowserManager { try { logger.info(this.siteName, ' → 关闭浏览器...'); + + // 1. 先关闭所有页面/标签页 + try { + const pages = await this.browser.pages(); + logger.info(this.siteName, ` → 关闭所有标签页 (共 ${pages.length} 个)...`); + + for (const page of pages) { + try { + await page.close(); + logger.info(this.siteName, ` → ✓ 已关闭一个标签页`); + } catch (e) { + logger.warn(this.siteName, ` → 关闭标签页失败: ${e.message}`); + } + } + } catch (e) { + logger.warn(this.siteName, ` → 获取页面列表失败: ${e.message}`); + } + + // 2. 断开 Puppeteer 连接 await this.browser.disconnect(); + logger.success(this.siteName, ' → ✓ Puppeteer 连接已断开'); + + // 3. 调用 AdsPower API 停止浏览器进程 + if (this.profileId) { + const stopUrl = `${this.apiBase}/api/v1/browser/stop?user_id=${encodeURIComponent(this.profileId)}`; + + const headers = {}; + if (this.apiKey && this.apiKey.trim()) { + headers['Authorization'] = `Bearer ${this.apiKey}`; + } + + logger.info(this.siteName, ` → 调用 AdsPower API 停止浏览器进程...`); + + try { + const response = await axios.get(stopUrl, { headers }); + const data = response.data; + + if (data.code === 0) { + logger.success(this.siteName, ' → ✓ AdsPower 浏览器进程已停止'); + } else { + logger.warn(this.siteName, ` → AdsPower stop API 返回: ${data.msg || JSON.stringify(data)}`); + } + } catch (e) { + logger.warn(this.siteName, ` → 调用 AdsPower stop API 失败: ${e.message}`); + logger.info(this.siteName, ' → 浏览器可能已经关闭,或需要手动关闭'); + } + } + this.browser = null; this.page = null; - logger.success(this.siteName, ' → ✓ 浏览器已关闭'); + logger.success(this.siteName, ' → ✓ 浏览器完全关闭'); + } catch (error) { logger.error(this.siteName, `关闭浏览器失败: ${error.message}`); throw error;