aaaaa
This commit is contained in:
parent
13cd9fbb49
commit
b0b81e9279
@ -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,
|
||||
|
||||
@ -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 池
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user