Menu

Bỏ qua Recaptcha V2 với NodeJS và Puppeteer


Những gì bạn sẽ học

  • 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 antaptchaofficial và puppeteer.
  • Bạn sẽ học cách gửi biểu mẫu đây bằng Recaptcha với tập lệnh NodeJS.
  • Tìm hiểu cách viết tập lệnh puppeteer mở ra 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 textarea ẩ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: Cài đặt hệ điều hành Ubuntu không phải là một yêu cầu bắt buộc mà là một khuyến nghị. Chạy NodeJS từ Windows cũng có thể nhưng mã của chúng tôi có thể không tương thích.
  • Node JS: Tải xuống NodeJS cho hệ điều hành của bạn nơi đây
  • Trình chỉnh sửa mã: Được đề xuất VS Code hoặc Atom. 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 antaptchaofficial và puppeteer.

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

npm install @antiadmin/anticaptchaofficial puppeteer

Tạo một tệp index.js mới và thêm phần sau. Thay thế "YOUR_API_KEY" bằng khóa của bạn 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ở ra Chromium ở chế độ nền và điều hướng đến một trang.

Thêm mã sau để giải mã captcha trước tiên, sau đó điền vào biểu mẫu với thông tin đăng nhập và mật khẩu, dán mã thông báo g-response vào vùng 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ể lưu ý rằng trước tiên chúng tôi giải mã hình ảnh xác thực và chỉ sau đó điều hướng đến trang và dán kết quả. Nó hoạt động cho Recaptcha vì chúng ta đã biết mã 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 được lưu vào 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ế độ không đầu:

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 bỏ qua biểu mẫu với Recaptcha V2 theo cách triển khai đơn giản nhất - với văn bản "g-recaptcha-response" là một phần của biểu mẫu. Bạn có thể 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