Menu

Contournement de Recaptcha V2 avec NodeJS et Puppeteer


Ce que vous allez apprendre

  • Configurer NodeJS et Webstorm IDE dans le système d'exploitation Ubuntu fraîchement installé.
  • Installer et importer les modules npm anticaptchaofficial et puppeteer.
  • Vous apprendrez comment soumettre le formulaire ce avec Recaptcha avec le script NodeJS.
  • Apprenez à écrire un script de marionnettiste qui ouvre Chromium en arrière-plan et accède à une page.
  • Apprenez à prendre une capture d'écran d'une page et à l'enregistrer sur un disque.
  • Apprenez à remplir les champs de texte d'un formulaire à l'aide des sélecteurs CSS.
  • Apprenez à résoudre Recaptcha v2, remplissez la zone de texte cachée #g-recaptcha-response et soumettez le formulaire.
  • Notes sur l'extension de vos connaissances sur Javascript ES6 et NodeJS.
Source code

Configurer NodeJS et Webstorm IDE dans le système d'exploitation Ubuntu fraîchement installé.

  • Ubuntu OS : L'installation d'Ubuntu OS n'est pas une obligation, mais une recommandation. Exécuter NodeJS depuis Windows est également possible, mais notre code peut ne pas être compatible.
  • Node JS : Téléchargez NodeJS pour votre système d'exploitation ici
  • Editeur de code : Recommandé VS Code ou Atom. Les deux sont des IDE gratuits.

Installer curl et nodejs dans Ubuntu :

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

Installer et importer les modules npm anticaptchaofficial et puppeteer.

Installer les modules npm anti-captcha et Puppeteer :

npm install @antiadmin/anticaptchaofficial puppeteer

Créez un nouveau fichier index.js et ajoutez ce qui suit. Remplacez "YOUR_API_KEY" par votre clé de Paramètres de l'API :

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

Apprenez à écrire un script de marionnettiste qui ouvre Chromium en arrière-plan et accède à une page.

Ajoutez le code suivant pour résoudre d'abord le captcha, puis remplissez le formulaire avec le login et le mot de passe, collez le jeton g-response dans la zone de texte avec id="g-recaptcha-response" et soumettez le formulaire :

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

})();

Vous pouvez noter que nous résolvons d'abord le captcha et seulement ensuite nous naviguons sur la page et collons le résultat. Cela fonctionne pour Recaptcha car nous connaissons déjà le sitekey et la durée de vie du token est de 120 secondes.

La capture d'écran de la page finale est enregistrée dans le fichier screenshot.png. Si vous souhaitez voir ce qui se passe dans le navigateur, désactivez le mode sans tête :

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

Notes sur l'extension de vos connaissances sur Javascript ES6 et NodeJS.

Vous avez appris comment contourner un formulaire avec Recaptcha V2 dans son implémentation la plus simple - avec le textarea "g-recaptcha-response" comme partie du formulaire. Vous souhaitez peut-être étendre vos connaissances :

Github

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