Hoe CAPTCHA te omzeilen in 2024#

Wat ga je leren?#

Je leert hoe je CAPTCHA kunt omzeilen met Puppeteer in Nodejs op verschillende manieren:

Kan poppenspeler CAPTCHA omzeilen?#

Het antwoord is ja. Er zijn twee manieren om CAPTCHA’s te omzeilen: het gebruik van een CAPTCHA-oplosser (snel en goedkoper), of door geavanceerde technieken te implementeren om ze te voorkomen.

Methode #1: CAPTCHA omzeilen met Puppeteer en NextCaptcha#

We zullen samenwerken met de oplosserservice genaamd NextCaptcha om CAPTCHA in Puppeteer af te handelen met behulp van een officiële demo. Laten we dus enkele afhankelijkheden installeren en de modules importeren
  npm install -S puppeteer nextcaptcha-ts
  import NextCaptcha from 'nextcaptcha-ts';
  import puppeteer from 'puppeteer';
Open vervolgens een Chrome-instantie en navigeer naar de demopagina.
  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',
  });
De volgende stap is het lokaliseren van de CAPTCHA websiteKey en websiteURL naar het NextCaptcha-client, die de tekstoplossing retourneert. Sla het op in de variabele 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();

Methode #2: Implementeer poppenspeler-stealth#

Het gebruik van Puppeteer is gemakkelijk te herkennen, omdat de basisversie een aantal duidelijke botsignalen verzendt, zoals de User-Agent-naam, die gemakkelijk tot een CAPTCHA kan leiden. En om dit te bewijzen, proberen we toegang te krijgen tot sannysoft.com, een controlesite. Maak daarvoor een headless Chrome-instantie, geef de doel-URL door aan de functie goto() om te wachten tot de pagina is geladen en maak een screenshot.
  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)
      })
  }
Er wordt weergegeven dat u WebDrive aanwezig bent (mislukt) Toegang geweigerd! sannysoft heeft niet-menselijk verkeer gedetecteerd en onze bot geblokkeerd. Dit is waar de poppenspeler-extra-plugin-stealth, een plug-in voor poppenspeler-extra en toneelschrijver-extra om detectie te voorkomen, te hulp komt. Het zorgt ervoor dat uw verkeer er meer handmatig uitziet en voorkomt dat het wordt geblokkeerd, d.w.z. met CAPTCHA's. Installeer om te beginnen het Stealth-pakket
  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())
gebruik dan de poppenspeler zoals normaal
  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)
      })
  }
Laten we naar de uitvoer kijken: check-success Succes! Dit helpt CAPTCHA te omzeilen met Puppeteer.

Conclusie#

Voor het succesvol ophalen van gegevens heeft u een krachtige tool nodig waarop u volledig kunt vertrouwen om CAPTCHA te verwerken. NextCaptcha biedt een eenvoudig in te stellen API waarmee u alle anti-bot-uitdagingen kunt overwinnen. U kunt deze gratis uitproberen vandaag.