aaaaa
This commit is contained in:
parent
13cd9fbb49
commit
b0b81e9279
@ -23,8 +23,11 @@ export const defaultConfig = {
|
|||||||
proxyLogin: '',
|
proxyLogin: '',
|
||||||
proxyPassword: '',
|
proxyPassword: '',
|
||||||
|
|
||||||
enabledForBlacklistControl: false, // Use blacklist control
|
enabledForBlacklistControl: true, // Use blacklist control
|
||||||
blackUrlList: [], // Blacklist URL list
|
blackUrlList: [
|
||||||
|
'checkout.stripe.com', // 禁用 CapSolver 在 Stripe 支付页面
|
||||||
|
'js.stripe.com' // 禁用 CapSolver 在 Stripe JS 资源
|
||||||
|
], // Blacklist URL list
|
||||||
|
|
||||||
// Is captcha enabled by default or not
|
// Is captcha enabled by default or not
|
||||||
enabledForRecaptcha: true,
|
enabledForRecaptcha: true,
|
||||||
|
|||||||
@ -133,10 +133,19 @@ class BatchRegister {
|
|||||||
logger.info('BatchRegister', `注册间隔: ${this.delayBetweenRuns/1000}秒`);
|
logger.info('BatchRegister', `注册间隔: ${this.delayBetweenRuns/1000}秒`);
|
||||||
logger.info('BatchRegister', `单次重试: ${this.maxRetries}次\n`);
|
logger.info('BatchRegister', `单次重试: ${this.maxRetries}次\n`);
|
||||||
|
|
||||||
// 捕获 Ctrl+C
|
// 捕获 Ctrl+C(支持二次强制退出)
|
||||||
|
let sigintCount = 0;
|
||||||
process.on('SIGINT', async () => {
|
process.on('SIGINT', async () => {
|
||||||
|
sigintCount++;
|
||||||
|
|
||||||
|
if (sigintCount === 1) {
|
||||||
logger.warn('BatchRegister', '\n\n⚠️ 收到停止信号,等待当前任务完成...');
|
logger.warn('BatchRegister', '\n\n⚠️ 收到停止信号,等待当前任务完成...');
|
||||||
|
logger.info('BatchRegister', '💡 再次按 Ctrl+C 可强制退出');
|
||||||
this.running = false;
|
this.running = false;
|
||||||
|
} else if (sigintCount >= 2) {
|
||||||
|
logger.error('BatchRegister', '\n\n❌ 收到第二次停止信号,强制退出!');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 并发控制:使用 profile 池
|
// 并发控制:使用 profile 池
|
||||||
|
|||||||
@ -192,10 +192,58 @@ class BrowserManager {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
logger.info(this.siteName, ' → 关闭浏览器...');
|
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();
|
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.browser = null;
|
||||||
this.page = null;
|
this.page = null;
|
||||||
logger.success(this.siteName, ' → ✓ 浏览器已关闭');
|
logger.success(this.siteName, ' → ✓ 浏览器完全关闭');
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(this.siteName, `关闭浏览器失败: ${error.message}`);
|
logger.error(this.siteName, `关闭浏览器失败: ${error.message}`);
|
||||||
throw error;
|
throw error;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user