API CDP

O Navegador Scrapeless de Raspagem estende a funcionalidade padrão do CDP (Chrome DevTools Protocol), adicionando uma série de poderosas funções personalizadas para aprimorar os recursos de automação do navegador. Este documento abrange principalmente as funções CDP relacionadas ao tratamento de CAPTCHA.

Recursos do Solver de CAPTCHA

Visão Geral dos Recursos

O Navegador de Raspagem inclui recursos avançados de solução de CAPTCHA, manipulando automaticamente os tipos de CAPTCHA prevalentes encontrados em páginas da web.

Tipos de CAPTCHA Suportados

  • reCaptcha
  • Cloudflare Turnstile
  • Cloudflare 5s Challenge
  • AWS WAF

Mecanismo de Monitoramento de Eventos

Eventos Principais

O Navegador de Raspagem fornece três eventos principais para monitorar o processo de resolução do CAPTCHA:

Nome do EventoDescrição
Captcha.detectedCAPTCHA detectado
Captcha.solveFinishedResolução do CAPTCHA concluída
Captcha.solveFailedResolução do CAPTCHA falhou

Estrutura de Dados de Resposta do Evento

CampoTipoDescrição
typestringTipo de CAPTCHA: recaptcha turnstile
successbooleanResultado da resolução
messagestringMensagem de status: "NOT_DETECTED" "SOLVE_FINISHED" "SOLVE_FAILED" "INVALID"
token?stringToken retornado com sucesso (opcional)

Exemplo de Implementação

// 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 Configuração Avançada

O Navegador de Raspagem fornece uma série de APIs avançadas para controle preciso sobre o comportamento do solucionador de CAPTCHA. As seguintes APIs são suportadas:

Nome da APIDescrição
Captcha.setAutoSolveControla o comportamento automático de resolução de CAPTCHA
Captcha.setTokenDefine o token de autenticação para o serviço CAPTCHA
Captcha.setConfigConfigura todos os parâmetros do solucionador de CAPTCHA
Captcha.solveAciona manualmente o processo de resolução de CAPTCHA
Agent.clickSimula um clique do mouse
Agent.liveURLObtém a URL ao vivo da página da sessão atual

Descrição Detalhada da API

1. Captcha.setAutoSolve

Interface de configuração para controlar o comportamento de resolução automática de CAPTCHA.

const client = await page.createCDPSession();
await client.send('Captcha.setAutoSolve', {
    autoSolve: false,
    options: JSON.stringify([{
        type: 'recaptcha',  // Options: recaptcha | turnstile
        disabled: false,
    }])
});

2. Captcha.setToken

Define o token de autenticação para o serviço de resolução de CAPTCHA.

await client.send('Captcha.setToken', {
    apiKey: 'your-token'
});

3. Captcha.setConfig

Configura todos os parâmetros para o solucionador de CAPTCHA.

await client.send('Captcha.setConfig', {
    config: JSON.stringify(
        {
            apiKey: "your-token",
            autoSolve: true,
            enabledForRecaptcha: true,
            enabledForRecaptchaV3: true,
            enabledForTurnstile: true
        }
    )
});

4. Captcha.solve

Aciona manualmente o processo de resolução de CAPTCHA.

const result = await client.send('Captcha.solve', {
    detectTimeout: 10 * 1000,
    options: JSON.stringify([{
        type: 'rcaptcha',
        disabled: true,  // Disable rCaptcha solving
    }])
});
console.log(result);  // { type: 'recaptcha', success: true, message: 'solve_finished', token: 'xxx' }

5. Agent.click

Simula um clique do mouse.

const { Puppeteer } = require('@scrapeless-ai/sdk');
 
(async () => {
    const browser = await Puppeteer.connect({
        session_name: 'sdk_test',
        session_ttl: 180,
        proxy_country: 'US',
        session_recording: true,
        defaultViewport: null
    });
 
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    await page.realClick('button');
})();

6. Agent.type

Simula uma entrada de teclado.

const { Puppeteer } = require('@scrapeless-ai/sdk');
 
(async () => {
    const browser = await Puppeteer.connect({
        session_name: 'sdk_test',
        session_ttl: 180,
        proxy_country: 'US',
        session_recording: true,
        defaultViewport: null
    });
 
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    await page.realFill('input', 'Hello, Scrapeless!');
})();

7. Agent.liveURL

Obtém a URL ao vivo da página da sessão atual.

const { Puppeteer, log as Log } = require('@scrapeless-ai/sdk');
const logger = Log.withPrefix('puppeteer-example');
 
(async () => {
    const browser = await Puppeteer.connect({
        session_name: 'sdk_test',
        session_ttl: 180,
        proxy_country: 'US',
        session_recording: true,
        defaultViewport: null
    });
 
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    const { error, liveURL } = await page.liveURL();
    if (error) {
      logger.error('Failed to get current page URL:', error);
    } else {
      logger.info('Current page URL:', liveURL);
    }
    await browser.close();
})();