Как обойти CAPTCHA в 2024 году#

Чему ты собираешься научиться?#

вы узнаете, как обойти CAPTCHA с помощью Puppeteer в Nodejs различными методами:
  • Решатель CAPTCHA

  • Используйте плагин для имитации человеческого трафика

Может ли Puppeteer обойти CAPTCHA?#

Ответ: да, есть два основных способа обойти CAPTCHA: использовать решатель CAPTCHA (быстрый и дешевый) или внедрить передовые методы для их предотвращения.

Метод № 1: обойти CAPTCHA с помощью Puppeteer и NextCaptcha#

Мы будем работать с сервисом решателя под названием NextCaptcha для обработки CAPTCHA в Puppeteer, используя официальную демо-версию. Итак, давайте установим некоторые зависимости и импортируем модули.
  npm install -S puppeteer nextcaptcha-ts
  import NextCaptcha from 'nextcaptcha-ts';
  import puppeteer from 'puppeteer';
Затем откройте экземпляр Chrome и перейдите на демонстрационную страницу.
  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',
  });
Следующий шаг — найти ключ веб-сайта CAPTCHA и URL-адрес веб-сайта для Клиент NextCaptcha, который возвращает текстовое решение. Сохраните его в переменной 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: реализовать скрытность кукловода#

Использование Puppeteer легко определить, поскольку его базовая версия отправляет некоторые четкие сигналы бота, такие как имя пользовательского агента, которое может легко вызвать CAPTCHA. И чтобы доказать это, давайте попробуем получить доступ к sannysoft.com, проверочному сайту. Для этого создайте автономный экземпляр Chrome, передайте целевой URL функции goto(), чтобы дождаться загрузки страницы, и сделайте снимок экрана.
  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)
      })
  }
Он покажет, что вы используете WebDrive (не удалось) Доступ запрещен! sannysoft обнаружил нечеловеческий трафик и заблокировал нашего бота. Здесь на помощь приходит puppeteer-extra-plugin-stealth, плагин для puppeteer-extra и playwright-extra для предотвращения обнаружения. Это сделает ваш трафик более ручным и предотвратит блокировку, например, с помощью CAPTCHA. Для начала установите пакет 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())
затем используйте кукловода как обычно
  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)
      })
  }
Давайте посмотрим на результат: check-success Успех! Это помогает обойти CAPTCHA с помощью Puppeteer.

Заключение#

Для успешного получения данных вам нужен мощный инструмент, на который можно полностью положиться при обработке CAPTCHA. NextCaptcha предоставляет простой в настройке API, который позволит вам преодолеть все проблемы защиты от ботов, и вы можете попробовать его бесплатно сегодня.