Comment contourner le CAPTCHA en 2024#

Qu'est-ce que tu vas apprendre ?#

vous apprendrez à contourner le CAPTCHA avec Puppeteer dans Nodejs en utilisant différentes méthodes :

Le marionnettiste peut-il contourner le CAPTCHA ?#

La réponse est oui, il existe deux manières principales de contourner les CAPTCHA : en utilisant un solveur de CAPTCHA (rapide et moins cher), ou en mettant en œuvre des techniques avancées pour les empêcher.

Méthode n°1 : contourner le CAPTCHA avec Puppeteer et NextCaptcha#

Nous travaillerons avec le service de résolution appelé NextCaptcha pour gérer le CAPTCHA dans Puppeteer à l'aide d'une démo officielle. Alors, installons quelques dépendances et importons les modules
  npm install -S puppeteer nextcaptcha-ts
  import NextCaptcha from 'nextcaptcha-ts';
  import puppeteer from 'puppeteer';
Ensuite, ouvrez une instance Chrome et accédez à la page de démonstration.
  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',
  });
L'étape suivante consiste à localiser la clé du site Web CAPTCHA et l'URL du site Web vers le Client NextCaptcha, qui renvoie la solution texte. Enregistrez-le dans 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();

Méthode n°2 : mettre en œuvre la furtivité du marionnettiste#

L'utilisation de Puppeteer est facile à identifier puisque sa version de base envoie des signaux clairs de robot, tels que son nom d'agent utilisateur, qui peut facilement provoquer un CAPTCHA. Et pour le prouver, essayons d'accéder à sannysoft.com, un site de vérification. Pour cela, créez une instance Chrome sans tête, transmettez l'URL cible à la fonction goto() pour attendre que la page se charge, puis prenez une capture d'écran.
  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)
      })
  }
Il montrera que vous êtes présent sur WebDrive (échec) Accès refusé! sannysoft a détecté du trafic non humain et bloqué notre bot. C'est là que le puppeteer-extra-plugin-stealth, un plugin pour puppeteer-extra et playwright-extra pour empêcher la détection, vient à la rescousse. Cela rendra votre trafic plus manuel et évitera d'être bloqué, c'est-à-dire avec des CAPTCHA. Pour commencer, installez le package 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())
puis utilisez le marionnettiste comme d'habitude
  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)
      })
  }
Regardons le résultat : check-success Succès! Cela permet de contourner CAPTCHA avec Puppeteer .

Conclusion#

Pour une récupération de données réussie, vous avez besoin d'un outil puissant sur lequel vous pouvez vous appuyer entièrement pour gérer le CAPTCHA. NextCaptcha fournit une API facile à configurer qui vous permet de surmonter tous les défis anti-bot, et vous pouvez l'essayer gratuitement dès aujourd'hui.