Nodejs में reCAPTCHA v2 को कैसे बायपास करें#

logoNextCaptcha
March 15,2024

reCAPTCHA v2 के बारे में#

reCAPTCHA v2 Google द्वारा विकसित एक सत्यापन कोड प्रणाली है जो वेबसाइटों को मानव उपयोगकर्ताओं और स्वचालित कार्यक्रमों (जैसे बॉट) के बीच अंतर करने में मदद करती है। यह फ़ॉर्म सबमिशन या लॉगिन जैसी कार्रवाई को पूरा करने से पहले चेकबॉक्स पर क्लिक करने की आवश्यकता के द्वारा उपयोगकर्ता की मानवीय पहचान की पुष्टि करता है। reCAPTCHA v2 उपयोगकर्ता के क्लिक करने के व्यवहार और ब्राउज़िंग पैटर्न जैसी जानकारी का विश्लेषण करके यह निर्धारित करता है कि उपयोगकर्ता एक वास्तविक इंसान है या नहीं।

reCAPTCHA v2 के प्रकार#

  • Checkbox

जैसा कि दिखाया गया है, "मैं रोबोट नहीं हूं" चेकबॉक्स के लिए उपयोगकर्ता को उस चेकबॉक्स पर क्लिक करना होगा जो इंगित करता है कि उपयोगकर्ता रोबोट नहीं है। यह उपयोगकर्ता द्वारा तुरंत सत्यापित किया जाएगा (कैप्चा के बिना) या उन्हें चुनौती देगा कि वे मानव हैं

newCaptchaAnchor

  • Invisible

जैसा कि दिखाया गया है, अदृश्य रीकैप्चा बैज के लिए उपयोगकर्ता को चेकबॉक्स पर क्लिक करने की आवश्यकता नहीं होती है, बल्कि इसे सीधे तब कॉल किया जाता है जब उपयोगकर्ता साइट पर मौजूदा बटन पर क्लिक करता है, या जावास्क्रिप्ट एपीआई कॉल के माध्यम से कॉल किया जा सकता है। reCAPTCHA सत्यापन पूरा होने के बाद एकीकरण के लिए जावास्क्रिप्ट कॉलबैक की आवश्यकता होती है। डिफ़ॉल्ट रूप से, केवल सबसे संदिग्ध ट्रैफ़िक को कैप्चा हल करने के लिए प्रेरित किया जाएगा

Untitled

इस लेख में, हम कैप्चा के रहस्य को उजागर करेंगे और नोडज का उपयोग करके एक सरल रीकैप्चा v2 सॉल्वर बनाने की प्रक्रिया से गुजरेंगे।

पर्यावरणीय तैयारी#

सबसे पहले, सुनिश्चित करें कि Nodejs आपके सिस्टम पर स्थापित है। इसके अतिरिक्त, आवश्यक पुस्तकालय स्थापित करें:
npm install axios
npm install cheerio
जब लक्ष्य वेब पेज एक स्थिर पेज होता है, तो हम संबंधित वेब पेज को डाउनलोड करने के लिए सीधे `axios` का उपयोग करते हैं, और फिर वेब पेज को पार्स करने और reCAPTCHA v2 को बायपास करने के लिए आवश्यक प्रासंगिक डेटा निकालने के लिए `cheerio` का उपयोग करते हैं। आधिकारिक बाईपास शुरू करने से पहले, हमें नेक्स्टकैप्चा वेबसाइट को पंजीकृत करना होगा। खाता पंजीकृत करने के बाद, आप पृष्ठभूमि में एक खाता कुंजी प्राप्त कर सकते हैं, जो कि क्लाइंटकी है, और इसे बाद में उपयोग के लिए सहेज सकते हैं। प्रासंगिक क्लाइंटकी प्राप्त करने के बाद, हम आधिकारिक तौर पर reCAPTCHA v2 को बायपास करने की यात्रा शुरू करते हैं। यहां हम उदाहरण के तौर पर आधिकारिक डेमो का उपयोग करते हैं। यूआरएल https://www.google.com/recaptcha/api2/demo है

किसी वेब पेज का HTML प्राप्त करें#

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

रीकैप्चा संबंधित पैरामीटर प्राप्त करें#

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 अनुरोधों को बायपास करने के लिए बनाएं#

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 बायपास कार्य परिणाम प्राप्त करें#

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;
    }
}

उन्हें एक साथ रखें#

प्राप्त 'परिणाम' में gRecaptchaResponse, reCAPTCHA v2 द्वारा हल किया गया टोकन है। हम इसे वेबसाइट के प्रासंगिक इंटरफ़ेस पर सबमिट करने के लिए इस कुंजी का उपयोग कर सकते हैं।
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()