CDP API
Scrapeless Agent Browser amplía la funcionalidad estándar de CDP (Chrome DevTools Protocol), añadiendo una serie de funciones personalizadas potentes para mejorar las capacidades de automatización del navegador. Este documento cubre principalmente las funciones de CDP relacionadas con el manejo de CAPTCHA.
Características del CAPTCHA Solver
Descripción general de características
Agent Browser incluye capacidades avanzadas de solución de CAPTCHA, manejando automáticamente los tipos más comunes de CAPTCHA encontrados en páginas web.
Tipos de CAPTCHA compatibles
- reCaptcha
- Cloudflare Turnstile
- Desafío Cloudflare de 5 segundos
- AWS WAF
Mecanismo de monitoreo de eventos
Eventos principales
Agent Browser proporciona tres eventos principales para monitorear el proceso de resolución de CAPTCHA:
| Nombre del evento | Descripción |
|---|---|
Captcha.detected | CAPTCHA detectado |
Captcha.solveFinished | Resolución de CAPTCHA finalizada |
Captcha.solveFailed | Resolución de CAPTCHA fallida |
Estructura de datos de respuesta de evento
| Campo | Tipo | Descripción |
|---|---|---|
type | string | Tipo de CAPTCHA: recaptcha turnstile |
success | boolean | Resultado de resolución |
message | string | Mensaje de estado: "NOT_DETECTED" "SOLVE_FINISHED" "SOLVE_FAILED" "INVALID" |
token? | string | Token devuelto en caso de éxito (opcional) |
Ejemplo de implementación
// Listen for CAPTCHA solving events
const client = await page.createCDPSession();
client.on('Captcha.detected', (result) => {
console.log('Captcha detected:', result);
});
await new Promise((resolve, reject) => {
client.on('Captcha.solveFinished', (result) => {
if (result.success) resolve();
});
client.on('Captcha.solveFailed', () =>
reject(new Error('Captcha solve failed'))
);
setTimeout(() =>
reject(new Error('Captcha solve timeout')),
5 * 60 * 1000
);
});API de configuración avanzada
Agent Browser proporciona una serie de APIs avanzadas para un control detallado sobre el comportamiento del solucionador de CAPTCHA. Se admiten las siguientes APIs:
| Nombre de la API | Descripción |
|---|---|
Captcha.setToken | Establece el token de autenticación para el servicio de CAPTCHA |
Captcha.setConfig | Configura todos los parámetros del solucionador de CAPTCHA |
Captcha.solve | Activa manualmente el proceso de resolución de CAPTCHA |
Agent.click | Simula un clic de ratón |
Agent.liveURL | Obtiene la URL en vivo de la página de la sesión actual |
Descripción detallada de la API
1. Captcha.setConfig
Configura todos los parámetros para el solucionador de CAPTCHA.
await client.send('Captcha.setConfig', {
config: JSON.stringify(
{
apiKey: "your-token",
autoSolve: true,
enabledForRecaptcha: true,
enabledForRecaptchaV3: true,
enabledForTurnstile: true
}
)
});2. Captcha.solve
Activa manualmente el proceso de resolución de CAPTCHA.
const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
(async () => {
const browser = await Puppeteer.connect({
sessionName: 'sdk_test',
sessionTTL: 180,
proxyCountry: 'US',
sessionRecording: true,
defaultViewport: null
});
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
const cdpSession = await createPuppeteerCDPSession(page);
await cdpSession.solveCaptcha({ timeout: 30000 });
})();3. Agent.click
Simula un clic de ratón.
const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
(async () => {
const browser = await Puppeteer.connect({
sessionName: 'sdk_test',
sessionTTL: 180,
proxyCountry: 'US',
sessionRecording: true,
defaultViewport: null
});
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
const cdpSession = await createPuppeteerCDPSession(page);
await cdpSession.realClick('button');
})();4. Agent.type
Simula una entrada de teclado.
const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
(async () => {
const browser = await Puppeteer.connect({
sessionName: 'sdk_test',
sessionTTL: 180,
proxyCountry: 'US',
sessionRecording: true,
defaultViewport: null
});
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
const cdpSession = await createPuppeteerCDPSession(page);
await cdpSession.realFill('input', 'Hello, Scrapeless!');
})();5. Agent.liveURL
Obtiene la URL en vivo de la página de la sesión actual.
const { Puppeteer, log as Log, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
const logger = Log.withPrefix('puppeteer-example');
(async () => {
const browser = await Puppeteer.connect({
sessionName: 'sdk_test',
sessionTTL: 180,
proxyCountry: 'US',
sessionRecording: true,
defaultViewport: null
});
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
const cdpSession = await createPuppeteerCDPSession(page);
const { error, liveURL } = await cdpSession.liveURL();
if (error) {
logger.error('Failed to get current page URL:', error);
} else {
logger.info('Current page URL:', liveURL);
}
await browser.close();
})();6. Captcha.imageToText
Resolver CAPTCHA de imagen
const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
const browser = await Puppeteer.connect({
sessionName: 'sdk_test',
sessionTTL: 180,
proxyCountry: 'US',
sessionRecording: true,
defaultViewport: null
});
const page = await browser.newPage();
await page.goto('https://www.example.com');
const cdpSession = await createPuppeteerCDPSession(page);
await cdpSession.imageToText({
imageSelector: '.captcha__image',
inputSelector: 'input[name="captcha"]',
timeout: 30000,
})