Cómo omitir CAPTCHA en 2024#

¿Qué vas a aprender?#

Aprenderá cómo omitir CAPTCHA con Puppeteer en Nodejs usando diferentes métodos:

¿Puede el titiritero omitir CAPTCHA?#

La respuesta es sí, hay dos formas principales de evitar los CAPTCHA: usar un solucionador de CAPTCHA (rápido y económico) o implementar técnicas avanzadas para evitarlos.

Método n.º 1: omitir CAPTCHA con Puppeteer y NextCaptcha#

Trabajaremos con el servicio de resolución llamado NextCaptcha para manejar CAPTCHA en Puppeteer usando una demostración oficial. Entonces, instalemos algunas dependencias e importemos los módulos.
  npm install -S puppeteer nextcaptcha-ts
  import NextCaptcha from 'nextcaptcha-ts';
  import puppeteer from 'puppeteer';
Luego, abra una instancia de Chrome y navegue hasta la página de demostración.
  const url = "https://www.google.com/recaptcha/api2/demo"

  const browser = await puppeteer.launch({});
  const page = await browser.newPage();
  await page.goto(url, {
    waitUntil: 'networkidle0',
  });
El siguiente paso es localizar la clave del sitio web CAPTCHA y la URL del sitio web en el Cliente NextCaptcha, que devuelve la solución de texto. Guárdelo en la variable data.solution.gRecaptchaResponse.
  const data = await client.recaptchaV2({websiteKey, websiteURL: url});
  console.log('gRecaptchaResponse: ', data.solution.gRecaptchaResponse);
  console.log('submitting form .. ');
  await Promise.all([
      page.click('#recaptcha-demo-submit'),
      page.waitForNavigation({ waitUntil: "networkidle0" })
  ]);

  console.log('making a screenshot ...');
  await page.screenshot({ path: 'screenshot.png' });

  console.log('closing browser .. ');
  await browser.close();

° 2: implementar el sigilo del titiritero#

El uso de Puppeteer es fácil de identificar ya que su versión base envía algunas señales de bot claras, como su nombre de Agente de Usuario, que fácilmente podría generar un CAPTCHA. Y para comprobarlo, intentemos acceder a sannysoft.com, un sitio de verificación. Para eso, cree una instancia de Chrome sin cabeza, pase la URL de destino a la función goto() para esperar a que se cargue la página y tome una captura de pantalla.
  import NextCaptcha from 'nextcaptcha-ts';
  import puppeteer from 'puppeteer';

  const url = "https://bot.sannysoft.com"
  const browser = await puppeteer.launch({
      headless: true
  });
  const page = await browser.newPage();
  await page.goto(url, {
      waitUntil: 'networkidle0',
  });
  console.log('making a screenshot ...');
  await page.screenshot({ path: 'screenshot.png' });
  await sleep(30000)
  console.log('closing browser .. ');
  await browser.close();


  function sleep(time = 1000) {
      return new Promise((resolve) => {
          setTimeout(() => {
              resolve(true)
          }, time)
      })
  }
Mostrará que está presente WebDrive (falló) ¡Acceso denegado! sannysoft detectó tráfico no humano y bloqueó nuestro bot. Aquí es donde viene al rescate el puppeteer-extra-plugin-stealth, un complemento para puppeteer-extra y dramaturgo-extra para evitar la detección. Hará que su tráfico parezca más manual y evitará que se bloquee, es decir, con CAPTCHA. Para empezar, instale el paquete Stealth.
  npm install puppeteer-extra puppeteer-extra-plugin-stealth
  import puppeteer from 'puppeteer-extra';
  import puppeteer-extra-plugin-stealth from 'puppeteer-extra-plugin-stealth';

  const StealthPlugin = require('puppeteer-extra-plugin-stealth')
  puppeteer.use(StealthPlugin())
luego usa al titiritero como el normal
  const url = "https://bot.sannysoft.com"
  const browser = await puppeteer.launch({
      headless: true
  });
  const page = await browser.newPage();
  await page.goto(url, {
      waitUntil: 'networkidle0',
  });
  console.log('making a screenshot ...');
  await page.screenshot({ path: 'screenshot.png' });
  await sleep(30000)
  console.log('closing browser .. ');
  await browser.close();


  function sleep(time = 1000) {
      return new Promise((resolve) => {
          setTimeout(() => {
              resolve(true)
          }, time)
      })
  }
Veamos el resultado: check-success ¡Éxito! Esto ayuda a evitar CAPTCHA con Puppeteer.

Conclusión#

Para una recuperación de datos exitosa, necesita una herramienta poderosa en la que confiar completamente para manejar CAPTCHA. NextCaptcha proporciona una API fácil de configurar que te permite superar todos los desafíos anti-bot y puedes probarla gratis hoy.