Cách vượt qua CAPTCHA vào năm 2024#

Bạn sẽ học gì?#

bạn sẽ tìm hiểu cách vượt qua CAPTCHA bằng Puppeteer trong Nodejs bằng các phương pháp khác nhau:

Người múa rối có thể vượt qua CAPTCHA không?#

Câu trả lời là có, có hai cách chính để vượt qua CAPTCHA: sử dụng trình giải CAPTCHA (nhanh và rẻ hơn) hoặc bằng cách triển khai các kỹ thuật nâng cao để ngăn chặn chúng

Phương pháp #1: Vượt qua CAPTCHA bằng Puppeteer và NextCaptcha#

Chúng tôi sẽ làm việc với dịch vụ giải mã có tên NextCaptcha để xử lý CAPTCHA trong Puppeteer bằng bản demo chính thức. Vì vậy, hãy cài đặt một số phần phụ thuộc và nhập các mô-đun
  npm install -S puppeteer nextcaptcha-ts
  import NextCaptcha from 'nextcaptcha-ts';
  import puppeteer from 'puppeteer';
Sau đó, mở phiên bản Chrome và điều hướng đến trang demo.
  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',
  });
Bước tiếp theo là xác định vị trí khóa trang web CAPTCHA và URL trang web tới Ứng dụng khách NextCaptcha, trả về giải pháp văn bản. Lưu nó trong biến 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();

Phương pháp số 2: Thực hiện tàng hình người múa rối#

Việc sử dụng Puppeteer rất dễ được xác định vì phiên bản cơ sở của nó gửi một số tín hiệu bot rõ ràng, chẳng hạn như tên Tác nhân người dùng, có thể dễ dàng nhắc nhở CAPTCHA. Và để chứng minh điều này, chúng ta hãy thử truy cập vào sannysoft.com, một trang web kiểm tra. Để làm được điều đó, hãy tạo một phiên bản Chrome không có giao diện người dùng, chuyển URL mục tiêu đến hàm goto() để đợi trang tải và chụp ảnh màn hình.
  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)
      })
  }
Nó sẽ hiển thị cho bạn thấy WebDrive hiện diện (không thành công) Truy cập bị từ chối! sannysoft đã phát hiện lưu lượng truy cập không phải của con người và đã chặn bot của chúng tôi. Đây là nơi mà puppeteer-extra-plugin-stealth, Một plugin dành cho puppeteer-extra và playwright-extra để ngăn chặn sự phát hiện, ra tay giải cứu. Nó sẽ làm cho lưu lượng truy cập của bạn trông thủ công hơn và tránh bị chặn, tức là bằng CAPTCHA. Để bắt đầu, hãy cài đặt gói 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())
sau đó sử dụng người múa rối như bình thường
  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)
      })
  }
Hãy nhìn vào đầu ra: check-success Thành công! Điều này giúp vượt qua CAPTCHA với Puppeteer.

Phần kết luận#

Để truy xuất dữ liệu thành công, bạn cần có một công cụ mạnh mẽ để hoàn toàn tin cậy vào việc xử lý CAPTCHA. NextCaptcha cung cấp API dễ thiết lập cho phép bạn vượt qua mọi thử thách chống bot và bạn có thể dùng thử miễn phí ngay hôm nay.