Nodejs'de reCAPTCHA v2 nasıl atlanır#

logoNextCaptcha
March 15,2024

reCAPTCHA v2 hakkında#

reCAPTCHA v2, web sitelerinin insan kullanıcılar ile otomatik programlar (botlar gibi) arasında ayrım yapmasına yardımcı olmak için Google tarafından geliştirilen bir doğrulama kodu sistemidir. Form gönderme veya oturum açma gibi bir eylemi tamamlamadan önce kullanıcının bir onay kutusunu tıklatmasını gerektirerek kullanıcının insan kimliğini doğrular. reCAPTCHA v2, kullanıcının tıklama davranışı ve gezinme kalıpları gibi bilgileri analiz ederek kullanıcının gerçek bir insan olup olmadığını belirler.

reCAPTCHA v2 türleri#

  • Checkbox

Gösterildiği gibi "Ben robot değilim" onay kutusu, kullanıcının robot olmadığını belirten onay kutusunu tıklatmasını gerektirir. Bu, kullanıcı tarafından anında doğrulanacak (captcha olmadan) veya insan olduklarını sorgulayacak

newCaptchaAnchor

  • Invisible

Gösterildiği gibi, görünmez reCAPTCHA rozeti kullanıcının bir onay kutusunu tıklamasını gerektirmez; bunun yerine kullanıcı sitedeki mevcut bir düğmeyi tıkladığında doğrudan çağrılır veya bir JavaScript API çağrısı yoluyla çağrılabilir. Entegrasyon, reCAPTCHA doğrulaması tamamlandıktan sonra bir JavaScript geri çağrısı gerektirir. Varsayılan olarak, yalnızca en şüpheli trafiğe CAPTCHA çözmesi istenecektir

Untitled

Bu makalede, CAPTCHA'ların gizemini çözeceğiz ve nodejs kullanarak basit bir reCAPTCHA v2 çözücü oluşturma sürecini anlatacağız.

Çevresel hazırlık#

Öncelikle sisteminizde Nodejs'in kurulu olduğundan emin olun. Ayrıca gerekli kitaplıkları yükleyin:
npm install axios
npm install cheerio
Hedef web sayfası statik bir sayfa olduğunda, ilgili web sayfasını indirmek için doğrudan "axios"u kullanırız ve ardından web sayfasını ayrıştırmak ve reCAPTCHA v2'yi atlamak için gereken ilgili verileri çıkarmak için "cheerio"yu kullanırız. Resmi bypass'a başlamadan önce NextCaptcha web sitesine kaydolmamız gerekiyor.Bir hesap kaydettikten sonra arka planda clientKey olan bir hesap anahtarı alabilir ve daha sonra kullanmak üzere kaydedebilirsiniz. İlgili clientKey'i aldıktan sonra resmi olarak reCAPTCHA v2'yi bypass etme yolculuğuna başlıyoruz. Burada örnek olarak resmi Demoyu kullanıyoruz. URL: https://www.google.com/recaptcha/api2/demo

Bir web sayfasının HTML'sini alın#

const axios = require('axios');
 
async function getPageData(url) {
    try {
	    const data = await axios.get(url)
	    return data.data;
    }  catch (e) {
        console.error('getPageData error', e.message);
        return null;
    }
}
 
getPageData('https://www.google.com/recaptcha/api2/demo');

reCAPTCHA ile ilgili parametreleri alın#

const cheerio = require('cheerio');
 
function parserData(html) {
    try {
        const $ = cheerio.load(html);
 
        return $('[data-sitekey]').data('sitekey')
 
    } catch (e) {
        console.error('parserData error', e.message);
        return null;
    }
}
 

reCAPTCHA v2 isteklerini atlamak için oluşturun#

const axios = require('axios');
 
async function createCaptchaTask(url, siteKey, isInvisible) {
    try {
        const data = await axios.post('https://api.nextcaptcha.com/createTask', {
            "clientKey": "clientKey", // clientKey from NextCaptcha dashboard
            "task": {
                type: "RecaptchaV2TaskProxyless",
                websiteURL: url,
                websiteKey: siteKey,
                isInvisible
            }
        });
        return data.data;
    } catch (e) {
        console.error('createCaptchaTask error', e.message);
        return null;
    }
}

reCAPTCHA v2 atlama görevi sonuçlarını alın#

const axios = require('axios');
 
async function sleep(time = 500) {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve();
        }, time)
    })
}
async function getTaskResult(taskId) {
    try {
        const data = await axios.post('https://api.nextcaptcha.com/getTaskResult', {
            "clientKey": "clientKey", // clientKey from NextCaptcha
            taskId
        });
        if (data.data.status === 'processing') {
            await sleep();
            return getTaskResult(taskId)
        } else {
            console.error('createCaptchaTask errorCode', data.data.errorCode);
            console.error('createCaptchaTask errorDescription', data.data.errorDescription);
            return null;
        }
    } catch (e) {
        console.error('createCaptchaTask error', e.message);
        return null;
    }
}

onları bir araya getir#

Elde edilen “result”taki gRecaptchaResponse, reCAPTCHA v2 tarafından çözülen tokendır ve bu anahtarı web sitesinin ilgili arayüzüne göndermek için kullanabiliriz.
const axios = require('axios');
const cheerio = require('cheerio');
 
async function getPageData(url) {
    try {
	    const data = await axios.get(url)
	    return data.data;
    }  catch (e) {
        console.error('getPageData error', e.message);
        return null;
    }
}
 
function parserData(html) {
    try {
        const $ = cheerio.load(html);
 
        return $('[data-sitekey]').data('sitekey')
 
    } catch (e) {
        console.error('parserData error', e.message);
        return null;
    }
}
 
async function createCaptchaTask(url, siteKey, isInvisible) {
    try {
        const data = await axios.post('https://api.nextcaptcha.com/createTask', {
            "clientKey": "clientKey", // clientKey from NextCaptcha dashboard
            "task": {
                type: "RecaptchaV2TaskProxyless",
                websiteURL: url,
                websiteKey: siteKey,
                isInvisible
            }
        });
        return data.data;
    } catch (e) {
        console.error('createCaptchaTask error', e.message);
        return null;
    }
}
 
async function sleep(time = 500) {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve();
        }, time)
    })
}
 
async function getTaskResult(taskId, tryTimes = 60) {
    try {
        const data = await axios.post('https://api.nextcaptcha.com/getTaskResult', {
            "clientKey": "clientKey", // clientKey from NextCaptcha
            taskId
        });
         if (data.data.status === 'ready') {
            return data.data;
        } else if (data.data.status === 'processing' && tryTimes >= 0) {
            await sleep();
            return getTaskResult(taskId)
        } else {
            if (tryTimes < 0) {
                console.error('getTaskResult out of time');
            } else {
                console.error('getTaskResult errorCode', data.data.errorCode);
                console.error('getTaskResult errorDescription', data.data.errorDescription);
            }
            return null;
        }
    } catch (e) {
        console.error('getTaskResult error', e.message);
        return null;
    }
}
 
async function mian() {
    const url = 'https://www.google.com/recaptcha/api2/demo'
    const html = await getPageData(url);
    const sitekey = parserData(html);
    console.log(sitekey)
    const task = await createCaptchaTask(url, sitekey, false);
    const result = await getTaskResult(task.taskId);
    console.log(result)
}
 
mian()