Menu

Melewati Recaptcha V2 dengan NodeJS dan Dalang


Apa yang akan Anda pelajari?

  • Atur NodeJS dan Webstorm IDE di OS Ubuntu yang baru saja diinstal.
  • Instal dan impor modul npm puppeteer dan anticaptchaofficial.
  • Anda akan belajar cara mengirimkan formulir ini dengan Recaptcha dengan skrip NodeJS.
  • Pelajari cara menulis script puppeteer yang membuka Chromium di mode latar belakang dan mengalihkan ke halaman.
  • Pelajari cara mengambil tangkapan layar halaman dan menyimpannya di disk.
  • Pelajari cara mengisi kolom teks formulir menggunakan CSS selector.
  • Pelajari cara menyelesaikan Recaptcha v2, mengisi textarea #g-recaptcha-response tersembunyi, dan mengirimkan formulir.
  • Catatan untuk memperluas pengetahuan Anda tentang Javascript ES6 dan NodeJS.
Source code

Atur NodeJS dan Webstorm IDE di OS Ubuntu yang baru saja diinstal.

  • OS Ubuntu: Menginstal OS Ubuntu bukanlah persyaratan, tetapi rekomendasi. Menjalankan NodeJS dari Windows juga dimungkinkan, tetapi kode kami mungkin tidak kompatibel.
  • Node JS: Unduh NodeJS untuk sistem operasi Anda di sini
  • Editor kode: Disarankan VS Code atau Atom. Keduanya adalah IDE gratis.

Instal curl dan nodejs di Ubuntu:

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

Instal dan impor modul npm puppeteer dan anticaptchaofficial.

Instal modul anti-captcha dan Puppeteer npm:

npm install @antiadmin/anticaptchaofficial puppeteer

Buat file index.js baru dan tambahkan berikut ini. Ganti "YOUR_API_KEY" dengan kunci Anda dari Pengaturan API :

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

Pelajari cara menulis script puppeteer yang membuka Chromium di mode latar belakang dan mengalihkan ke halaman.

Tambahkan kode berikut untuk menyelesaikan captcha terlebih dahulu, lalu isi formulir dengan login dan kata sandi, tempel token g-response ke textarea dengan id="g-recaptcha-response" dan kirimkan formulir:

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();

})();

Anda mungkin memperhatikan bahwa pertama-tama kami memecahkan captcha dan baru kemudian menavigasi ke halaman dan menempelkan hasilnya. Ini berfungsi untuk Recaptcha karena kita sudah mengetahui kunci situs dan masa pakai token adalah 120 detik.

Tangkapan layar halaman terakhir disimpan ke screenshot.png. Jika Anda ingin melihat apa yang terjadi di browser, matikan mode tanpa kepala:

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

Catatan untuk memperluas pengetahuan Anda tentang Javascript ES6 dan NodeJS.

Anda telah mempelajari cara melewati formulir dengan Recaptcha V2 dengan cara implementasi yang paling sederhana - dengan textarea "g-recaptcha-response" sebagai bagian dari formulir. Anda mungkin ingin memperluas pengetahuan Anda:

Github

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