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 فنکشن کو ہماری پراکسی فنکشن سے تبدیل کرتا ہے، جہاں ہم initialization parameters اور captcha completion callback کو حاصل کرتے ہیں۔
3. initialization parameters کو Anti-Captcha API کو بھیجتا ہے۔ انسانی ورکر آپ کے لیے کیپچا حل کرتے ہیں اور آپ کو ٹوکن دیتے ہیں۔
4. ہم پہلے سے محفوظ شدہ callback فنکشن کو Turnstile ٹوکن کے ساتھ کال کرتے ہیں۔
5. Cloudflare اس ٹوکن کی اندرونی طور پر تصدیق کرتا ہے، براؤزر میں کوکی سیٹ کرتا ہے، اور صفحہ دوبارہ لوڈ کرتا ہے۔
6. اس cf_clearance کے ذریعے، براؤزر Cloudflare پراکسی سے ویب سائٹ کا مواد حاصل کرتا ہے۔