ACCESIBLES
PRODUCTO
SOLUCIONES
por casos de uso
AI Plomo GestiónFacturaciónRedes socialesGestión de proyectos
Gestión de datos por sector
Más información
BlogPlantillasVideosYouTubeRECURSOS
COMUNIDADES Y REDES SOCIALES
SOCIOS
Los CAPTCHA están diseñados para bloquear bots, lo que facilita la automatización con herramientas como Titiritero Desafiante. Este artículo explica cómo evitar problemas con CAPTCHA, desde técnicas ocultas hasta métodos de solución. Esto es lo que aprenderás:
Tipo de CAPTCHA | Descripción original | Challenges |
---|---|---|
Basado en texto | Texto distorsionado para reconocimiento | Texto complejo difícil de leer |
Basado en imágenes | Identificar objetos/patrones | Requiere procesamiento visual |
reCAPTCHA | El sistema de análisis de riesgos de Google | Detecta comportamientos similares a los de un bot |
hCAPTCHA | Tareas de identificación de objetos | Similar a reCAPTCHA |
Audio | Tareas basadas en el sonido | Reconocimiento de voz complejo |
Descubra cómo estos métodos pueden ayudarle a optimizar la automatización, evitando la detección y resolviendo CAPTCHA de manera eficiente.
Para sortear eficazmente los desafíos CAPTCHA, los scripts de Puppeteer deben comportarse de forma que imiten a los usuarios humanos reales. Esto incluye el uso de técnicas de sigilo y patrones de comportamiento naturales.
Usando puppeteer-extra
Con su complemento oculto, puede evitar la detección de bots. Aquí te explicamos cómo configurarlo:
const puppeteer = require('puppeteer-extra')
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())
También puedes habilitar técnicas de evasión específicas:
puppeteer.use(StealthPlugin({
enabledEvasions: new Set([
"chrome.app",
"chrome.csi",
"defaultArgs",
"navigator.plugins"
])
}))
El complemento Stealth aborda los métodos de detección más comunes mediante lo siguiente:
navigator.webdriver
perfectaLa identificación del navegador es un factor clave en la detección de bots. Para crear un perfil de navegador convincente, concéntrese en estas áreas:
Área de configuración | Detalles de implementacion | Propósito |
---|---|---|
User Agent | Girar cadenas dinámicamente | Oculta los marcadores de automatización |
Compatibilidad con WebGL | Habilitar la aceleración de hardware | Imita una configuración de navegador estándar |
Configuración de la ventana gráfica | Utilice dimensiones aleatorias y realistas | Coincide con configuraciones de usuario comunes |
Encabezados de idioma | Alinearse con la configuración regional del agente de usuario | Garantiza la coherencia en el perfil del navegador. |
Además de las configuraciones estáticas, es fundamental incorporar comportamientos dinámicos similares a los humanos.
Simular el comportamiento humano ayuda a reducir el riesgo de detección. Aquí hay algunas técnicas efectivas:
Por último, inicie el navegador con argumentos que reduzcan la detección de bots:
const browser = await puppeteer.launch({
args: [
'--disable-blink-features=AutomationControlled',
'--window-size=1920,1080'
],
headless: false
})
Una vez implementadas las medidas de sigilo, la gestión eficiente de reCAPTCHA se vuelve esencial para una automatización fiable. Esto se basa en las técnicas de sigilo y simulación de comportamiento descritas anteriormente.
Una forma de gestionar reCAPTCHA programáticamente es integrar servicios de resolución de CAPTCHA. Cuando el script encuentra un reCAPTCHA, envía los parámetros necesarios a un servicio de resolución. Este servicio procesa el CAPTCHA y devuelve la solución, generalmente en un plazo de 10 a 30 segundos.
2Captcha es un servicio común para resolver reCAPTCHAs. Puedes integrarlo en tu configuración de Puppeteer de la siguiente manera:
const puppeteer = require('puppeteer-extra')
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
const path = require('path')
// Configure solver extension
const extensionPath = path.join(__dirname, './2captcha-solver')
const apiKey = 'YOUR_2CAPTCHA_API_KEY'
// Launch browser with the solver extension
const browser = await puppeteer.launch({
args: [
`--disable-extensions-except=${extensionPath}`,
`--load-extension=${extensionPath}`
],
headless: false
})
Una vez configurado el navegador, puedes comprobar el estado del solucionador CAPTCHA:
// Wait for solver button and check status
await page.waitForSelector('.captcha-solver')
const solverButton = await page.$('.captcha-solver')
const state = await solverButton.getAttribute('data-state')
// Proceed when solved
if (state === 'solved') {
await page.click('#submit-form')
}
Para mejorar las posibilidades de resolver reCAPTCHAs de manera efectiva, siga estas prácticas:
A continuación le mostramos cómo puede integrar el manejo de errores en su proceso de resolución de CAPTCHA:
const solveCaptcha = async (page, maxRetries = 3) => {
let attempts = 0
while (attempts < maxRetries) {
try {
// Attempt CAPTCHA solution
await page.click('.captcha-solver')
await page.waitForSelector('[data-state="solved"]')
return true
} catch (error) {
attempts++
await page.waitForTimeout(2000 * attempts)
}
}
return false
}
Un estudio de caso de Soluciones de raspado de datos Destaca la eficacia de estos métodos. En marzo de 2024, el uso de 2Captcha con Puppeteer logró una reducción del 95 % en el tiempo de resolución manual de CAPTCHA y aumentó las tasas de extracción de datos en un 60 % al procesar más de un millón de CAPTCHA al mes.
Los CAPTCHA de imágenes están diseñados para desafiar a los sistemas automatizados. Sin embargo, con las herramientas adecuadas, el OCR y las técnicas de procesamiento de imágenes pueden resolver estos problemas eficazmente.
Ahora, profundicemos en los métodos de OCR diseñados específicamente para CAPTCHA basados en texto.
Tesseract OCR es una potente herramienta para reconocer texto en imágenes. A continuación, se muestra un ejemplo de cómo integrar Tesseract OCR con Puppeteer para resolver CAPTCHAs de texto:
const tesseract = require('node-tesseract-ocr')
const sharp = require('sharp')
async function solveCaptcha(imageBuffer) {
// Preprocess the image to improve OCR performance
const processedImage = await sharp(imageBuffer)
.grayscale()
.threshold(150)
.toBuffer()
const config = {
lang: "eng",
oem: 1,
psm: 7,
}
return await tesseract.recognize(processedImage, config)
}
El ajuste fino de las propiedades de la imagen durante el preprocesamiento juega un papel crucial para mejorar la precisión del reconocimiento.
Mejorar el contraste y el brillo puede mejorar significativamente los resultados del OCR. A continuación, se muestra un ejemplo de cómo ajustar estas configuraciones dinámicamente:
async function enhanceCaptchaRecognition(page) {
return await page.evaluate(() => {
const img = document.querySelector('.captcha-image')
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
ctx.filter = 'contrast(150%) brightness(120%)'
ctx.drawImage(img, 0, 0)
return canvas.toDataURL()
})
}
Por ejemplo, un proyecto dirigido al sitio web de reservas de trenes de Taiwán logró una precisión del 98.84 % para números de un solo dígito y una precisión general del 91.13 %. De igual forma, los métodos de aprendizaje profundo han demostrado su eficacia para los CAPTCHA basados en imágenes. Un modelo basado en TensorFlow, que utiliza una red neuronal convolucional, alcanzó una tasa de éxito del 90 %. Experimentar con técnicas de preprocesamiento, como ajustar el contraste, el brillo y los umbrales, puede mejorar aún más los resultados según las características específicas de cada tipo de CAPTCHA.
Crear scripts confiables para resolver CAPTCHA requiere un manejo eficiente de errores, rotación de IP y mejoras de rendimiento. Una vez configuradas las técnicas de resolución de CAPTCHA, el siguiente paso es centrarse en la eficiencia del script.
Una buena gestión de errores es clave para mantener la estabilidad del script. Aquí tienes un ejemplo que reintenta en caso de fallo:
async function handleCaptchaSolution(page) {
const MAX_RETRIES = 3;
let attempts = 0;
while (attempts < MAX_RETRIES) {
try {
await page.setDefaultNavigationTimeout(30000);
const result = await solveCaptcha(page);
return result;
} catch (error) {
if (error instanceof TimeoutError) {
console.error(`Attempt ${attempts + 1}: CAPTCHA timeout`);
} else if (error instanceof NetworkError) {
console.error(`Attempt ${attempts + 1}: Network failure`);
}
attempts++;
await page.waitForTimeout(2000 * attempts);
}
}
throw new Error('Maximum retry attempts exceeded');
}
Este enfoque maneja los tiempos de espera y los problemas de red con reintentos incrementales, lo que garantiza que su script no se bloquee inesperadamente.
Rotar las IP y las huellas del navegador ayuda a evitar la detección. Aquí te explicamos cómo usar los plugins de puppeteer-extra para este propósito:
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const AnonymizeUAPlugin = require('puppeteer-extra-plugin-anonymize-ua');
puppeteer.use(StealthPlugin());
puppeteer.use(AnonymizeUAPlugin());
async function rotateIdentity() {
const proxy = await getNextProxy(); // Your proxy rotation logic
const browser = await puppeteer.launch({
args: [`--proxy-server=${proxy.host}:${proxy.port}`]
});
return browser;
}
Al rotar las direcciones IP y los encabezados HTTP, su script imita el comportamiento de navegación natural, lo que reduce las posibilidades de ser marcado.
Mejore la eficacia y la tasa de éxito de su guión con las siguientes técnicas:
await page.setRequestInterception(true);
page.on('request', (request) => {
if (['image', 'stylesheet', 'font'].includes(request.resourceType())) {
request.abort();
} else {
request.continue();
}
});
const { Cluster } = require('puppeteer-cluster');
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_CONTEXT,
maxConcurrency: 4,
monitor: true
});
await cluster.task(async ({ page, data: url }) => {
await handleCaptchaSolution(page);
});
const cache = new Map();
async function getCachedResponse(url) {
if (cache.has(url)) {
const { timestamp, data } = cache.get(url);
if (Date.now() - timestamp < 3600000) { // 1-hour cache
return data;
}
}
const response = await fetchResponse(url);
cache.set(url, { timestamp: Date.now(), data: response });
return response;
}
Estos métodos funcionan juntos para reducir el uso de recursos, mejorar la velocidad y gestionar múltiples tareas de manera eficiente.
Gestionar CAPTCHAs eficazmente implica una estrategia multinivel centrada en la prevención. Mediante herramientas como técnicas de sigilo, encabezados optimizados y rotación de IP, se puede reducir la probabilidad de que se activen CAPTCHAs. Siempre es mejor prevenir que resolverlos reactivamente.
Latenode facilita la gestión de CAPTCHA con funciones integradas como modo oculto, rotación de proxy y manejo de cookies.
Aquí tienes un ejemplo de cómo puedes configurarlo:
const workflow = new LatenodeWorkflow({ browserOptions: { stealth: true, proxyRotation: true, cookieManagement: true } });
await workflow.initBrowser({ captchaHandling: { prevention: true, autoRetry: true, maxAttempts: 3 } });
Para mejorar su flujo de trabajo de automatización, considere estos pasos: