Menu

Pag-bypass sa Recaptcha V2 gamit ang NodeJS at Puppeteer


Kung ano ang iyong matututunan

  • I-setup ang NodeJS at Webstorm IDE sa bagong na-install na Ubuntu OS.
  • I-install at i-import ang mga opisyal na module ng anticaptcha at puppeteer npm.
  • Matututuhan mo kung paano magsumite ng ito form na may Recaptcha na may NodeJS script.
  • Pag-aralan kung paano magsulat ng puppeteer na script na nagbubukas ng Chromium sa background na mode at pumupunta sa isang pahina.
  • Pag-aralan kung paano kumuha ng screenshot ng isang pahina at i-save ito sa disk.
  • Pag-aralan kung paano punan ang form ng mga teksto sa pamamagitan ng mga CSS selector.
  • Pag-aralan kung paano lutasin ang Recaptcha v2, punan ang nakatagong textarea #g-recaptcha-response at isumite ang form.
  • Mga tala tungkol sa pagpapalawak ng kaalaman tungkol sa Javascript na ES6 at NodeJS.
Source code

I-setup ang NodeJS at Webstorm IDE sa bagong na-install na Ubuntu OS.

  • Ubuntu OS: Ang pag-install ng Ubuntu OS ay hindi isang kinakailangan, ngunit isang rekomendasyon. Posible rin ang pagpapatakbo ng NodeJS mula sa Windows, ngunit maaaring hindi tugma ang aming code.
  • Node JS: I-download ang NodeJS para sa iyong operating system dito
  • Code editor: Inirerekomenda ang VS Code o Atom. Parehong libreng IDE.

I-install ang curl at nodejs sa Ubuntu:

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

I-install at i-import ang mga opisyal na module ng anticaptcha at puppeteer npm.

Mag-install ng anti-captcha at Puppeteer npm modules:

npm install @antiadmin/anticaptchaofficial puppeteer

Gumawa ng bagong file na index.js at idagdag ang sumusunod. Palitan ang "YOUR_API_KEY" ng iyong susi mula sa Mga setting ng API :

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

Pag-aralan kung paano magsulat ng puppeteer na script na nagbubukas ng Chromium sa background na mode at pumupunta sa isang pahina.

Idagdag ang sumusunod na code upang malutas muna ang captcha, pagkatapos ay punan ang form ng login at password, i-paste ang g-response token sa textarea na may id="g-recaptcha-response" at isumite ang form:

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

})();

Maaari mong tandaan na lutasin muna namin ang captcha at pagkatapos lamang mag-navigate sa pahina at i-paste ang resulta. Gumagana ito para sa Recaptcha dahil alam na natin ang sitekey at ang buhay ng token ay 120 segundo.

Ang screenshot ng huling pahina ay nai-save sa screenshot.png. Kung gusto mong makita kung ano ang nangyayari sa browser, i-off ang headless mode:

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

Mga tala tungkol sa pagpapalawak ng kaalaman tungkol sa Javascript na ES6 at NodeJS.

Natutunan mo kung paano i-bypass ang isang form gamit ang Recaptcha V2 sa pinakasimpleng paraan ng pagpapatupad nito - na may textarea na "g-recaptcha-response" bilang bahagi ng form. Baka gusto mong palawakin ang iyong kaalaman:

Github

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