Cloudflare को कैसे बायपास करें
इस लेख में आप सीखेंगे कि NodeJS और Playwright ब्राउज़र ऑटोमेशन की मदद से Cloudflare के "Verifying you are human" पेज को कैसे बायपास किया जाए।

पहले संक्षेप में समझते हैं कि Cloudflare कैसे काम करता है। बिना Cloudflare के, वेबसाइट एडमिन अपने पेज को सार्वजनिक IP एड्रेस वाले सर्वर पर होस्ट करते हैं। उनका डोमेन नाम उस IP एड्रेस पर रेज़ॉल्व होता है और आपका ब्राउज़र सीधे उनके सर्वर से जुड़ता है।
जब वे Cloudflare का उपयोग करते हैं, तो वे DNS प्रबंधन को Cloudflare को सौंप देते हैं, जो डोमेन नामों को अपनी स्वयं की IP एड्रेस पर रेज़ॉल्व करना शुरू कर देता है। इन IP एड्रेसों पर वे विशेष प्रॉक्सी सर्वर चलाते हैं जो इनकमिंग HTTP और HTTPS अनुरोधों को फ़िल्टर करते हैं।
नए विज़िटर को एक प्रसिद्ध पेज दिखाई देता है जिसमें लिखा होता है: "Verifying you are human. This may take a few seconds."। इस सत्यापन के दौरान, आपको एक कैप्चा हल करने के लिए कहा जा सकता है। पहले वे reCAPTCHA का उपयोग करते थे, लेकिन अब वे अपना खुद का Turnstile कैप्चा उपयोग करते हैं।
कैप्चा सत्यापन पूरा होने के बाद, ब्राउज़र को एक यूनिक टोकन प्राप्त होता है जो cf_clearance नामक कुकी में होता है। आपका ब्राउज़र इस टोकन का उपयोग वेबसाइट के पेज को Cloudflare प्रॉक्सी से प्राप्त करने के लिए करता है। यदि यह टोकन समाप्त हो जाता है, या यदि Cloudflare आंतरिक रूप से यह निर्णय लेता है कि यह टोकन बॉट जैसा व्यवहार कर रहा है, तो यह टोकन अमान्य हो जाता है और आपको फिर से कैप्चा सत्यापन पेज दिखाया जाता है।
हमारा तरीका आपको एक ऑटोमेटेड ब्राउज़र सेशन के माध्यम से यह टोकन प्राप्त करने में मदद करेगा। ध्यान दें कि यह तरीका वेबसाइट का असली IP एड्रेस उजागर नहीं करता — यह जानकारी केवल Cloudflare और वेबसाइट एडमिन को ही पता होती है। और यह एक अच्छी बात है!
NodeJS और Playwright से ऐसा कैसे करें:
// Install packages
// npx install playwright @antiadmin/anticaptchaofficial
import { chromium } from "playwright";
import ac from "@antiadmin/anticaptchaofficial";
// Specify the target website address
const websiteBehindCloudFlare = 'https://yourwebsite.com';
// Set your Anti-Captcha API key here:
ac.setAPIKey('API_KEY_HERE');
ac.setSoftId(0);
let browser = null;
let page = null;
(async () => {
// Opening the browser
try {
console.log('Opening browser ..');
browser = await chromium.launch({ headless: false });
console.log('Creating new page ..');
page = await browser.newPage();
} catch (e) {
console.log("Could not open browser: "+e.toString());
return;
}
let params = null;
try {
// Doing several attempts to inject our code
while (!params) {
console.log('Navigating to the page')
await page.goto(websiteBehindCloudFlare);
console.log('Injecting our proxy code to replace window.turnstile');
await page.evaluate(() => {
window.turnstile = new Proxy(window.turnstile, {
get(target, prop) {
if (prop === "render") {
return function (a, b) {
const p = {
websiteURL: window.location.href,
websiteKey: b.sitekey,
action: b.action,
cData: b.cData,
chlPageData: b.chlPageData,
userAgent: navigator.userAgent,
};
// saving params in window.params
window.params = p;
// assigning callback to a variable
window.cfCallback = b.callback
// calling original render function
return target.render.apply(this, arguments);
};
}
return target[prop];
},
});
});
console.log('Getting params');
params = await page.evaluate(() => {
return new Promise((resolve) => {
setTimeout(() => resolve(window.params || null), 5000);
});
});
if (!params) {
console.log('Retrying..');
await delay(3000);
}
}
console.log("Extracted Turnstile Params:", params);
console.log('Solving Turnstile captcha with Anti-Captcha')
const token = await ac.solveTurnstileProxyless(websiteBehindCloudFlare, params.websiteKey, params.action, params.cData, params.chlPageData);
// Running Cloudflare's callback function we previously assigned to window.cfCallback
await page.evaluate((token) => {
window.cfCallback(token)
}, token);
console.log('Waiting for redirects to finish')
await delay(5000);
// Get all cookies for current page
const cookies = await page.context().cookies();
// Find cf_clearance
const cf_clearance = cookies.filter(c => c.name === 'cf_clearance');
// Output cookies
console.log('Cookies:', cookies);
console.log('cf_clearance:', cf_clearance);
} catch (e) {
console.error('Could not inject proxy code:', e);
}
// close browser when needed
// await browser.close();
})();
function delay(time) {
return new Promise(function(resolve) {
setTimeout(resolve, time)
});
}
हमारे कोड में जो किया जा रहा है:
1. ब्राउज़र विंडो खोलें और Cloudflare के सत्यापन पेज पर जाएं।
2. Turnstile की render फ़ंक्शन को हमारी प्रॉक्सी फ़ंक्शन से बदलें, जिसमें हम प्रारंभिक पैरामीटर और कैप्चा पूर्णता का callback पकड़ते हैं।
3. प्रारंभिक पैरामीटर को Anti-Captcha API पर भेजें। मानव कार्यकर्ता आपके लिए कैप्चा हल करते हैं और एक टोकन प्रदान करते हैं।
4. हम पहले से सहेजे गए callback फ़ंक्शन को Turnstile टोकन के साथ कॉल करते हैं।
5. Cloudflare इस टोकन को आंतरिक रूप से सत्यापित करता है, हमारे ब्राउज़र में कुकी सेट करता है और पेज को रीलोड करता है।
6. इस cf_clearance टोकन के साथ ब्राउज़र Cloudflare प्रॉक्सी से वेबसाइट की सामग्री लोड करता है।