API CDP
Scrapeless Scraping Browser estende a funcionalidade padrão do CDP (Chrome DevTools Protocol), adicionando uma série de funções personalizadas poderosas para aprimorar as capacidades de automação do navegador. Este documento aborda principalmente as funções CDP relacionadas ao tratamento de CAPTCHA.
Recursos do Resolvedor de CAPTCHA
Visão Geral dos Recursos
O Scraping Browser inclui capacidades avançadas de solução de CAPTCHA, lidando automaticamente com os tipos de CAPTCHA prevalentes encontrados em páginas web.
Tipos de CAPTCHA Suportados
- reCaptcha
- Cloudflare Turnstile
- Desafio Cloudflare 5s
- AWS WAF
Mecanismo de Monitoramento de Eventos
Eventos Principais
O Scraping Browser fornece três eventos principais para monitorar o processo de resolução de CAPTCHA:
| Nome do Evento | Descrição |
|---|---|
Captcha.detected | CAPTCHA detectado |
Captcha.solveFinished | Resolução de CAPTCHA finalizada |
Captcha.solveFailed | Falha na resolução de CAPTCHA |
Estrutura de Dados da Resposta do Evento
| Campo | Tipo | Descrição |
|---|---|---|
type | string | Tipo de CAPTCHA: recaptcha turnstile |
success | boolean | Resultado da resolução |
message | string | Mensagem de status: "NOT_DETECTED" "SOLVE_FINISHED" "SOLVE_FAILED" "INVALID" |
token? | string | Token retornado em caso de sucesso (opcional) |
Exemplo de Implementação
// Escutar eventos de resolução de CAPTCHA
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 Scraping Browser oferece uma série de APIs avançadas para controle refinado sobre o comportamento do resolvedor de CAPTCHA. As seguintes APIs são suportadas:
| Nome da API | Descrição |
|---|---|
Captcha.setToken | Define o token de autenticação para o serviço CAPTCHA |
Captcha.setConfig | Configura todos os parâmetros do resolvedor de CAPTCHA |
Captcha.solve | Aciona manualmente o processo de resolução de CAPTCHA |
Agent.click | Simula um clique do mouse |
Agent.liveURL | Obtém a URL ativa da página da sessão atual |
Descrição Detalhada da API
1. Captcha.setConfig
Configura todos os parâmetros para o resolvedor de CAPTCHA.
await client.send('Captcha.setConfig', {
config: JSON.stringify(
{
apiKey: "your-token",
autoSolve: true,
enabledForRecaptcha: true,
enabledForRecaptchaV3: true,
enabledForTurnstile: true
}
)
});2. Captcha.solve
Aciona manualmente o processo de resolução 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 um clique do mouse.
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 uma 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
Obtém a URL ativa da página da sessão atual.
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 Imagem
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,
})