Menu

Bỏ qua Recaptcha V2 bằng NodeJS và Puppeteer


Những nội dung bạn sẽ tìm hiểu

  • Thiết lập NodeJS và Webstorm IDE trong hệ điều hành Ubuntu mới cài đặt.
  • Cài đặt và nhập các mô-đun npm anticaptchaofficial và puppeteer.
  • Bạn sẽ tìm hiểu cách gửi biểu mẫu này có Recaptcha bằng tập lệnh NodeJS.
  • Tìm hiểu cách viết tập lệnh puppeteer để mở Chromium ở chế độ nền và điều hướng đến một trang.
  • Tìm hiểu cách chụp ảnh màn hình của một trang và lưu vào ổ đĩa.
  • Tìm hiểu cách điền vào các trường văn bản của biểu mẫu bằng bộ chọn CSS.
  • Tìm hiểu cách giải Recaptcha v2, điền các hộp văn bản ẩn #g-recaptcha-response và gửi biểu mẫu.
  • Lưu ý về việc mở rộng kiến thức bạn có về Javascript ES6 và NodeJS.
Source code

Thiết lập NodeJS và Webstorm IDE trong hệ điều hành Ubuntu mới cài đặt.

  • Hệ điều hành Ubuntu: Bạn không bắt buộc phải cài đặt hệ điều hành Ubuntu nhưng chúng tôi vẫn đề xuất bạn làm vậy. Bạn cũng có thể chạy NodeJS từ Windows nhưng mã của chúng tôi có thể sẽ không tương thích môi trường này.
  • Node JS: Tải xuống NodeJS cho hệ điều hành của bạn tại đây
  • Trình soạn thảo mã: VS Code hoặc Atom được đề xuất. Cả hai đều là IDE miễn phí.

Cài đặt curl và nodejs trong Ubuntu:

apt update
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs

Cài đặt và nhập các mô-đun npm anticaptchaofficial và puppeteer.

Cài đặt các mô-đun npm anti-captcha và Puppeteer:

npm install @antiadmin/anticaptchaofficial puppeteer

Tạo tập tin index.js mới và thêm nội dung sau. Thay thế "YOUR_API_KEY" với khóa từ Cài đặt API :

const ac = require("@antiadmin/anticaptchaofficial");
      const pup = require("puppeteer");
      ac.setAPIKey('YOUR_API_KEY');

Tìm hiểu cách viết tập lệnh puppeteer để mở Chromium ở chế độ nền và điều hướng đến một trang.

Thêm mã sau để giải captcha trước, sau đó điền tên đăng nhập và mật khẩu vào biểu mẫu, dán mã thông báo g-response vào hộp văn bản có id = "g-recaptcha-response" và gửi biểu mẫu:

const login = 'mylogin';
const password = 'my strong password';

(async () => {

    console.log('solving recaptcha ...');
    let token = await ac.solveRecaptchaV2Proxyless('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', '6LfydQgUAAAAAMuh1gRreQdKjAop7eGmi6TrNIzp');
    if (!token) {
        console.log('something went wrong');
        return;
    }

    console.log('opening browser ..');
    const browser = await pup.launch();

    console.log('creating new tab ..');
    const tab = await browser.newPage();

    console.log('changing window size .. ');
    await tab.setViewport({ width: 1360, height: 1000 });

    console.log('opening target page ..');
    await tab.goto('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', { waitUntil: "networkidle0" });

    console.log('filling login input ..');
    await tab.$eval('#contentbox > form > div > div:nth-child(1) > span > input', (element, login) => {
        element.value = login;
    }, login);

    console.log('filling password input');
    await tab.$eval('#contentbox > form > div > div:nth-child(2) > span > input', (element, password) => {
        element.value = password;
    }, password);

    console.log('setting recaptcha g-response ...');
    await tab.$eval('#g-recaptcha-response', (element, token) => {
        element.value = token;
    }, token);

    console.log('submitting form .. ');
    await Promise.all([
        tab.click('#contentbox > form > div > div.tac.padding20px > button'),
        tab.waitForNavigation({ waitUntil: "networkidle0" })
    ]);

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

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

})();

Bạn có thể ghi chú để chúng tôi giải captcha trước và chỉ điều hướng đến trang và dán kết quả sau khi giải. Yêu cầu này có thể thực hiện đối với Recaptcha vì chúng tôi đã biết khóa trang web và thời gian tồn tại của mã thông báo là 120 giây.

Ảnh chụp màn hình của trang cuối cùng sẽ được lưu thành screenshot.png. Nếu bạn muốn xem những gì đang xảy ra trong trình duyệt, hãy tắt chế độ headless (chế độ giả lập không có giao diện người dùng):

console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });

Lưu ý về việc mở rộng kiến thức bạn có về Javascript ES6 và NodeJS.

Bạn đã học cách đơn giản nhất để thực hiện bỏ qua biểu mẫu có Recaptcha V2 - với hộp văn bản "g-recaptcha-response" là một phần của biểu mẫu. Bạn có thể sẽ muốn mở rộng kiến ​​thức của mình:

Github

https://github.com/anti-captcha/solving-captcha-concepts/blob/master/tutorial1.js