UNPKG

auto-captcha-solver

Version:

Automatically detect and solve various captcha types in Playwright & Puppeteer with 2Captcha/CapMonster Cloud integration

99 lines 3.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.captchaSolver = captchaSolver; const captcha_detect_1 = require("../lib/captcha-detect"); const captcha_loading_1 = require("../lib/captcha-loading"); const capmonster_1 = require("../lib/provider/capmonster/capmonster"); const two_captcha_1 = require("../lib/provider/2captcha/two-captcha"); const providerCapabilities = { capmonster: new Set([ // 'Image To Text', 'reCAPTCHA v2', 'reCAPTCHA v3', 'Cloudflare Turnstile' // 'GeeTest V4 Captcha' ]), '2captcha': new Set([ 'Image To Text', 'reCAPTCHA v2', 'reCAPTCHA v2 Invisible', 'reCAPTCHA v3', 'reCAPTCHA Enterprise', 'Cloudflare Turnstile', 'Cloudflare CAPTCHA', // 'GeeTest V4 Captcha', 'Text Captcha', 'hCaptcha', 'MTCaptcha' ]) }; function providerSupportsType(providerName, captchaType) { return providerCapabilities[providerName]?.has(captchaType) ?? false; } async function captchaSolver(page, captchaInfo) { const captchaData = (await (0, captcha_detect_1.captchaDetect)(page, captchaInfo)); if (!captchaData) { return { success: false, message: 'No CAPTCHA detected' }; } // Inject loading spinner on the website await (0, captcha_loading_1.captchaLoading)(page); try { const providers = Array.isArray(captchaInfo.providers) ? captchaInfo.providers : [ { name: captchaInfo.providers, apiKey: captchaInfo.apiKey } ]; // Filter providers that support the detected type const supportedProviders = providers.filter((p) => providerSupportsType(p.name, captchaData.type)); if (!supportedProviders.length) { return { success: false, message: `No providers support ${captchaData.type}` }; } let lastError = null; for (const provider of supportedProviders) { try { let result; const providerConfig = { ...captchaInfo, apiKey: provider.apiKey }; switch (provider.name) { case 'capmonster': result = await (0, capmonster_1.solveWithCapMonster)(providerConfig, captchaData, page); break; case '2captcha': result = await (0, two_captcha_1.solveWith2Captcha)(providerConfig, captchaData, page); break; default: result = { success: false, message: `Unsupported provider: ${provider.name}` }; } if (result.success) return result; else lastError = new Error(result.message); } catch (error) { lastError = error instanceof Error ? error : new Error(String(error)); } } return { success: false, message: `All providers failed: ${lastError?.message || 'Unknown error'}` }; } catch (error) { return { success: false, message: error.message }; } finally { // Cleanup loading spinner await page.evaluate(`(function() { const loader = document.getElementById('captcha-loading'); const overlay = document.getElementById('captcha-blur-overlay'); loader?.remove(); overlay?.remove(); })();`); } } //# sourceMappingURL=captcha-solver.js.map