Ir al contenido

Cómo evitar la protección contra bots de PerimeterX: una guía para expertos

Como profesional experimentado en proxy y web scraping que ha trabajado en cientos de proyectos de scraping durante los últimos 5 años, tengo una amplia experiencia en el manejo de soluciones sofisticadas de mitigación de bots como PerimeterX.

En esta guía completa de más de 3000 palabras, compartiré mis métodos y herramientas probados para evadir PerimeterX y eliminar sitios de destino con éxito.

¿Qué es exactamente PerimeterX?

Antes de abordar las técnicas de elusión, es importante comprender qué es PerimeterX y cómo funciona.

PerímetroX es uno de los servicios de firewall de aplicaciones web (WAF) y mitigación de bots líderes en el mercado actual. Más del 10 % de las principales propiedades web de Internet utilizan PerimeterX para protegerse contra el web scraping, los ataques de apropiación de cuentas, el fraude de pagos y otros tipos de abuso de automatización.

La empresa ofrece un motor avanzado de detección de bots impulsado por tecnologías como:

  • Huellas digitales del dispositivo – recopila más de 300 parámetros del dispositivo para crear perfiles de visitantes únicos
  • Analisis de comportamiento – modela patrones de comportamiento humano como movimientos del mouse para detectar robots
  • Base de datos de reputación de IP – rastrea y bloquea IP de centros de datos y servidores proxy residenciales
  • Comprobaciones de interacción de la página – analiza elementos DOM, errores de JavaScript y renderizado para detectar navegadores sin cabeza
  • CAPTCHA – utiliza desafíos visuales e invisibles avanzados para hacer que los robots demuestren humanidad

PerimeterX afirma que su solución puede detectar la automatización con una precisión superior al 99%, lo cual es bastante alto. Su objetivo es maximizar las tasas de detección y minimizar los falsos positivos para los usuarios legítimos.

Esto presenta un desafío difícil para los web scrapers. Pero después de haber trabajado con la protección PerimeterX en muchos proyectos anteriores, he identificado métodos probados para mantener sus raspadores sin ser detectados.

En esta guía, compartiré mis técnicas internas para imitar a los usuarios humanos y comprender cómo funciona PerimeterX bajo el capó.

Técnicas de mitigación de bots de PerimeterX

El primer paso es comprender los diversos mecanismos de detección en los que se basa PerimeterX para identificar bots:

Huella digital del dispositivo

PerimeterX emplea huellas digitales avanzadas del dispositivo al recopilar más de 300 parámetros como:

  • ID de hardware: tipo de CPU, renderizado de GPU, resolución de pantalla
  • Configuración del software: sistema operativo, tipo y versión del navegador, versiones del controlador, idioma
  • Fuentes, complementos y extensiones instalados
  • Huellas digitales de Canvas y WebGL

Compilan estos atributos en una firma de dispositivo única para cada visitante. La firma de un raspador Node.js se destacará claramente de un navegador de escritorio o móvil real.

Análisis de comportamiento

Además de las huellas digitales técnicas, PerimeterX analiza el comportamiento de los visitantes, incluyendo:

  • Patrones de movimiento del ratón: los humanos reales exhiben micromovimientos y desplazamientos naturales
  • Seguimiento de clics: los humanos no hacen clic perfectamente en elementos como lo hacen los robots
  • Cadencia de escritura: analiza la velocidad de pulsación de teclas para determinar si un usuario real está ingresando datos.
  • Patrones de deslizamiento: en dispositivos móviles, verifica comportamientos de deslizamiento naturales

Los robots no imitan estos patrones de comportamiento humano, lo que los hace más fáciles de detectar.

Base de datos de reputación de propiedad intelectual

PerimeterX mantiene una enorme base de datos de reputación de IP que etiqueta las IP de centros de datos, servidores proxy residenciales, proveedores de nube y otras infraestructuras comúnmente asociadas con el scraping.

Si extrae datos de una IP estática, es probable que PerimeterX ya la haya marcado como de alto riesgo.

Comprobaciones de interacción de página

PerimeterX también realiza varias comprobaciones de interacción en cada página para intentar detectar navegadores sin cabeza y entornos que no sean JavaScript. Por ejemplo:

  • Comprobando que CSS/imágenes están cargadas
  • Prueba de elementos DOM esperados
  • Seguimiento de los movimientos del cursor del mouse
  • Buscando errores de JavaScript

Los navegadores sin cabeza no ejecutan JavaScript ni representan CSS/imágenes de la misma manera que lo hacen los navegadores reales.

Desafíos CAPTCHA

Cuando PerimeterX sospecha de un visitante de un bot, activará desafíos interactivos para que el usuario demuestre que es humano. Por ejemplo:

  • Hacer clic en un botón u objeto específico en la página
  • CAPTCHA visuales que requieren reconocimiento de imagen o texto
  • CAPTCHA invisibles que realizan comprobaciones de comportamiento en segundo plano

Estos desafíos son fáciles para los usuarios reales pero imposibles para los bots tradicionales.

Ahora que entendemos cómo funciona la huella digital de PerimeterX y la mitigación de bots, exploremos formas comprobadas de evadir la detección.

Dispositivo de evasión de huellas dactilares

Para evitar la detección por parte del perfil de dispositivo expansivo de PerimeterX, debemos asegurarnos de que nuestro raspador imite perfectamente un navegador real:

Utilice un navegador real a través de Selenium o Puppeteer

La forma más confiable es controlar un navegador real utilizando marcos como Selenium o Puppeteer en lugar de realizar solicitudes directamente.

Selenio lanza un navegador real como Chrome o Firefox. Podemos escribir scripts para automatizar las acciones de navegación mientras Selenium hereda la huella digital nativa del navegador subyacente.

Titiritero es una biblioteca de Node que proporciona una API de alto nivel para controlar un navegador Chrome sin cabeza. Si bien técnicamente se pueden tomar huellas digitales como sin cabeza, la combinación de Puppeteer con cadenas de agentes de usuario aleatorias y otros trucos lo hace altamente sigiloso.

Ambos enfoques permiten que nuestro raspador asuma la huella digital de un navegador de escritorio real, evitando la creación de perfiles del dispositivo.

Enmascarar entornos del navegador con herramientas

Una alternativa a ejecutar navegadores reales es utilizar herramientas como Browsergap que emulan entornos de navegador.

Por ejemplo, para imitar un iPhone:

const browsergap = new Browsergap({
  browser: ‘iphone‘
});

await browsergap.init();

Browsergap falsificará todos los detalles de bajo nivel, como el agente de usuario, el lienzo WebGL, la geolocalización, etc., para que coincidan con un navegador de iPhone real.

Este enfoque requiere menos gastos generales que Selenium o Puppeteer y al mismo tiempo enmascara el entorno de raspado.

Rotar frecuentemente los agentes de usuario

Incluso cuando ejecutamos un navegador real, podemos agregar una capa adicional de protección rotando frecuentemente la cadena del agente de usuario:

const userAgents = [‘UA1‘, ‘UA2‘, ‘UA3‘]; 

// Randomly select a user agent
const userAgent = userAgents[Math.floor(Math.random() * userAgents.length)];

await page.setUserAgent(userAgent);

Esto hará que su raspador parezca ser de usuarios diferentes cada vez, evitando la creación de perfiles del entorno del navegador.

Patrones de comportamiento similares a los humanos

Además de las huellas técnicas, también necesitamos modelar patrones de comportamiento humano:

Movimientos realistas del ratón

Utilice Puppeteer o Selenium para simular los movimientos naturales del ratón:

// Set mouse speed
await page.setMouse({ moveTime: 100 });

// Human-like random movements  
await page.mouse.move(xOffset, yOffset);
await page.mouse.down();
await page.mouse.move(xOffset2, yOffset2);
await page.mouse.up();

Esto producirá rastros de ratón de aspecto natural en lugar de movimientos robóticos repetitivos.

Desplácese, coloque el cursor y haga clic en los elementos

Utilice acciones reales del navegador para interactuar con los elementos de la página:

// Scroll like a user
await page.evaluate(_ => {
  window.scrollBy(0, 300); 
});

// Hover over elements
await page.hover(‘button‘);

// Variable click timing
await sleep((Math.random() * 200) + 50); // random delay
await page.click(‘button‘);

Esto modela mejor el comportamiento de navegación humana.

Patrones de escritura realistas

Al ingresar datos, use retrasos aleatorios para imitar la cadencia de escritura humana:

function typeText(page, text) {

  let i = 0;

  const typeInterval = setInterval(() => {

    if(i < text.length) { 

      // Random human-like delay
      const delay = (Math.random() * 100) + 30;
      await page.waitForTimeout(delay);

      await page.keyboard.type(text[i++]);

    } else {
      clearInterval(typeInterval); 
    }

  }, 30);

}

Este truco es especialmente útil para evitar la detección al iniciar sesión en sitios durante el scraping.

Desplazamiento y navegación

Utilice retrasos de tiempo aleatorios entre acciones como desplazarse hacia abajo, hacer clic en enlaces, navegar por páginas, etc. para imitar mejor los patrones de navegación humana.

Secuencia de interacción realista

Planifique una secuencia de eventos similar a la humana para que la ejecute el raspador, por ejemplo:

  1. Desplácese lentamente por la página
  2. Pase el cursor sobre algunos elementos
  3. Desplazarse hacia arriba
  4. Haga clic en un enlace a la página siguiente
  5. Repetición:

Tener este flujo realista de acciones a través de clics en enlaces, desplazamientos, desplazamientos y escritura hará que nuestro raspador parezca extremadamente parecido al de un usuario.

Evitar bloqueos de IP

Para evitar que PerimeterX reconozca mis scrapers basándose en IP sospechosas, sigo estas mejores prácticas:

Utilice grandes redes de proxy residenciales

Utilizo proveedores como Luminati y Smartproxy que ofrecen decenas de millones de IP residenciales para rotar. Esto evita el uso excesivo de las mismas IP.

Algunos factores clave que considero al seleccionar representantes residenciales:

  • Tamaño del grupo de proxy – Cuantas más IP, mejor para permitir una rotación constante sin repeticiones. Prefiero redes con más de 10 millones de IP.

  • Diversidad de ubicaciones – los representantes que abarcan diferentes regiones geográficas parecen más humanos.

  • diversidad de ASN – difundir IP a través de muchas redes de ISP es mejor que agruparlas en unas pocas.

  • Evaluación de reputación – El proveedor de proxy debería incluir en la lista negra las IP incorrectas que ya estén etiquetadas por PerimeterX.

  • Frecuencia de rotacion – Las IP residenciales deben cambiarse con la mayor frecuencia posible, incluso en cada solicitud.

Al abastecernos de grandes y diversos grupos de IP residenciales, ocultamos eficazmente nuestros scrapers a escala.

Evite las IP del centro de datos

Nunca uso proxies de centros de datos ni IP de alojamiento en la nube para el scraping, ya que PerimeterX los reconoce fácilmente como infraestructura de automatización. Es crucial atenerse únicamente a indicadores residenciales.

Cuidado con los proveedores de hosting

PerimeterX ha perfilado sus rangos de IP de muchos proveedores de VPS y alojamiento web. Evito usarlos como origen de extracción incluso con proxies.

Patrones de rotación de proxy

Al rotar los proxies, es importante no hacerlo siguiendo un patrón reconocible. Utilizo algoritmos de aleatorización para seleccionar IP proxy de una manera realista y no determinista.

Desafíos del navegador

Captcha y otros desafíos interactivos utilizados por PerimeterX presentan un obstáculo para los scrapers. Aquí hay formas comprobadas de superarlos:

Subcontratar la resolución de CAPTCHA

Servicios como Anti-Captcha y 2Captcha permiten resolver miles de CAPTCHA al instante aprovechando solucionadores humanos. Utilizo sus API para transmitir y resolver desafíos:

// Detect CAPTCHA
if(page.url().includes(‘captcha‘)) {

  // Pass to 2Captcha API
  const solution = await solver.solveRecaptcha(page.url());

  // Enter CAPTCHA solution
  await page.type(‘#captcha‘, solution);

  // Continue scraping
  // ...

}

Esto permite la resolución automatizada sin que el raspador tenga que reconocer imágenes o texto.

Desafíos del navegador sin cabeza

Para desafíos interactivos avanzados, como hacer clic en un botón específico, aprovecho Puppeteer para completar la acción mediante programación:

// Identify challenge button
const button = await page.$(‘#challengeButton‘);

// Click the button
await button.click();

Dado que Puppeteer controla un navegador real, puede completar tareas interactivas en lugar de realizar un scraping puramente paramétrico con herramientas como Axios.

Comportamientos realistas

También implemento movimientos naturales del mouse, desplazamiento y retrasos al completar desafíos para parecer más humano:

// Move mouse towards button
await page.mouse.move(x, y); 

// Scroll to button  
await page.evaluate(_ => {
  window.scrollBy(0, 100);
});

// Brief delay
await page.waitFor(500);

// Click button
await page.click(‘#challengeButton‘);

Esto ayuda a fortalecer la ilusión de la interacción humana.

Cuando todo lo demás falla…

En casos excepcionales en los que los desafíos son simplemente demasiado avanzados, recurro al uso de servicios comerciales de scraping que manejan CAPTCHA y otras mitigaciones de bots detrás de escena. Esto permite centrarse en la extracción de datos sin preocuparse por la evasión de PerimeterX.

Consideraciones Finales:

A través de una amplia experiencia en eludir las protecciones de PerimeterX para clientes, he desarrollado técnicas comprobadas utilizando servidores proxy, navegadores, patrones de comportamiento y otras herramientas para mantener a los raspadores sin ser detectados.

La clave es imitar a los usuarios reales lo más fielmente posible en todas las dimensiones que analiza PerimeterX: huellas dactilares del dispositivo, patrones de comportamiento, características del entorno e interacciones de desafío.

Al combinar los métodos descritos en esta guía de más de 3000 palabras, puede obtener ventaja sobre PerimeterX y extraer datos de miles de sitios web basándose en su mitigación de bots: un proxy experto y veterano en web scraping como yo lo hace con éxito todos los días.

Espero que estos consejos te hayan resultado útiles: ¡feliz raspado!

Únase a la conversación

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *