دور زدن Turnstile و hCaptcha: فناوریهای امنیتی و روشهای حل
Cloudflare Turnstile و hCaptcha به استانداردی برای حفاظت از وبسرویسها در برابر رباتها تبدیل شدهاند و جایگزین reCAPTCHA سنتی شدهاند. این سیستمها دهها پارامتر مرورگر و محیط شبکه را تحلیل میکنند که استفاده از پروکسی را به چالشی جدی برای اتوماسیون تبدیل میکند. در این مقاله بررسی میکنیم که این فناوریها در سطح فنی چگونه کار میکنند و کدام روشهای دور زدن واقعاً مؤثر هستند.
چگونه Cloudflare Turnstile کار میکند
Cloudflare Turnstile یک سیستم حفاظت نسل جدید است که به عنوان "جایگزین نامرئی CAPTCHA" معرفی میشود. بر خلاف reCAPTCHA کلاسیک، Turnstile از کاربر نمیخواهد که چراغهای راهنمایی یا گذرگاههای پیادهرو را انتخاب کند. در عوض، این سیستم ویژگیهای رفتاری و فنی مرورگر را در پسزمینه تحلیل میکند.
از نظر فنی، Turnstile در سه مرحله کار میکند. مرحله اول — بارگذاری ویجت JavaScript که از طریق iframe به صفحه اضافه میشود. مرحله دوم — جمعآوری تلمتری: سیستم دادههای مربوط به مرورگر را جمعآوری میکند، از جمله WebGL fingerprint، Canvas fingerprint، لیست فونتها، وضوح صفحه، منطقه زمانی، زبان سیستم و بسیاری از پارامترهای دیگر. مرحله سوم — اعتبارسنجی در سرورهای Cloudflare، جایی که دادههای جمعآوری شده با الگوهای شناخته شده رباتها و پروکسیها مقایسه میشوند.
ویژگی کلیدی Turnstile — استفاده از سیستم اعتبارسنجی IP. Cloudflare دارای پایگاه داده عظیمی است که از میلیونها وبسایت استفاده میکند که از CDN و حفاظت در برابر DDoS آنها استفاده میکنند. اگر IP در فعالیت مشکوک مشاهده شود، احتمال عبور از Turnstile به شدت کاهش مییابد. این اولین مشکل برای کاربران پروکسی ایجاد میکند — حتی IPهای مسکونی تمیز نیز ممکن است به دلیل مالکان قبلی دارای اعتبار پایین باشند.
مهم: Turnstile دارای سه حالت کار است — managed (خودکار)، non-interactive (بدون تعامل) و invisible (کاملاً پنهان). حالت تعیین کننده سختگیری بررسی و تأثیر بر روشهای دور زدن است.
فناوری hCaptcha و روشهای شناسایی
hCaptcha به عنوان رقیب Google reCAPTCHA با تأکید بر حریم خصوصی و کسب درآمد از طریق یادگیری ماشین معرفی شد. این سیستم به مالکان وبسایتها پیشنهاد میدهد که برای استفاده از دادههای کاربران برای آموزش مدلهای هوش مصنوعی پرداخت کنند. از نظر فنی، hCaptcha در شناسایی اتوماسیون نسبت به Turnstile تهاجمیتر است.
مکانیزم اصلی کار hCaptcha شامل چندین سطح حفاظت است. سطح اول — بررسی پارامترهای شبکه: سیستم TTL بستهها، تأخیرهای شبکه، سازگاری جغرافیایی IP و منطقه زمانی اعلام شده مرورگر را تحلیل میکند. سطح دوم — فراخوانیهای JavaScript: hCaptcha وجود و عملکرد صحیح Web API، از جمله WebRTC، Battery API، Sensor API را بررسی میکند. سطح سوم — تحلیل رفتاری حرکات ماوس، سرعت اسکرول و الگوهای کلیک است.
ویژگی hCaptcha — استفاده از بررسیهای مبتنی بر چالش است. اگر سیستم مشکوک به ربات باشد، وظایف بصری را نشان میدهد: انتخاب تصاویر با اشیاء خاص، حل معماها، شناسایی متن در تصاویر تحریف شده. دشواری وظایف به طور دینامیک با هر تلاش ناموفق افزایش مییابد. برای کاربران پروکسی، این به این معنی است که حتی با fingerprint صحیح میتوان زنجیرهای بیپایان از کپچاها را دریافت کرد.
| پارامتر | Turnstile | hCaptcha |
|---|---|---|
| حالت نامرئی | بله، به طور پیشفرض | اختیاری |
| اعتبار IP | بحرانی | مهم |
| Fingerprinting | متوسط | تهاجمی |
| تحلیل رفتاری | پایهای | پیشرفته |
| فرکانس کپچا | پایین | متوسط-بالا |
Fingerprinting مرورگر و پروکسی
Fingerprinting مرورگر تکنیکی برای شناسایی کاربر بر اساس مجموعهای منحصر به فرد از ویژگیهای مرورگر و دستگاه است. حتی اگر از پروکسی برای تغییر IP استفاده کنید، fingerprint بدون تغییر باقی میماند و میتواند استفاده از اتوماسیون را فاش کند. سیستمهای حفاظت مدرن از 50 تا 200+ پارامتر برای ایجاد یک اثر انگشت جمعآوری میکنند.
اجزای اصلی fingerprint شامل: Canvas fingerprint (رندرینگ منحصر به فرد گرافیک، وابسته به GPU و درایورها)، WebGL fingerprint (پارامترهای شتابدهنده گرافیکی)، Audio Context fingerprint (ویژگیهای پردازش صدا)، لیست فونتهای نصب شده، پارامترهای صفحه (وضوح، عمق رنگ، نسبت پیکسل)، User-Agent و هدرهای مرورگر، تنظیمات زبانی، منطقه زمانی، وجود پلاگینها و افزونهها است.
مشکل برای کاربران پروکسی در عدم تطابقها است. به عنوان مثال، اگر IP شما موقعیت جغرافیایی در آلمان را نشان دهد، اما منطقه زمانی مرورگر بر روی مسکو تنظیم شده باشد — این یک پرچم قرمز است. اگر WebRTC leak IP واقعی شما را فاش کند که با پروکسی متفاوت است — سیستم به سرعت جایگزینی را شناسایی میکند. اگر User-Agent ویندوز را اعلام کند، اما Canvas fingerprint با لینوکس مطابقت داشته باشد — شناسایی تضمین شده است.
// مثال جمعآوری fingerprint پایه
const fingerprint = {
canvas: getCanvasFingerprint(),
webgl: getWebGLFingerprint(),
fonts: getFonts(),
screen: {
width: screen.width,
height: screen.height,
colorDepth: screen.colorDepth,
pixelRatio: window.devicePixelRatio
},
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
language: navigator.language,
platform: navigator.platform,
hardwareConcurrency: navigator.hardwareConcurrency,
deviceMemory: navigator.deviceMemory,
webrtc: await getWebRTCIPs()
};
function getCanvasFingerprint() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.textBaseline = 'top';
ctx.font = '14px Arial';
ctx.fillText('Fingerprint مرورگر', 2, 2);
return canvas.toDataURL();
}
روشهای شناسایی سرورهای پروکسی
سیستمهای حفاظت از تکنیکهای متعددی برای شناسایی پروکسی استفاده میکنند. اولین روش — بررسی در پایگاههای داده پروکسی و VPNهای شناخته شده است. سرویسهایی مانند IPHub، IP2Proxy، MaxMind GeoIP2 میلیونها IP را شامل میشوند که به عنوان پروکسی، VPN و ارائهدهندگان هاستینگ طبقهبندی شدهاند. Cloudflare و hCaptcha با چنین پایگاههایی ادغام شدهاند و به طور خودکار سطح بررسی را برای IPهای مشکوک افزایش میدهند.
دومین روش — تحلیل ASN (شماره سیستم خودمختار) است. پروکسیهای مرکز داده معمولاً متعلق به ارائهدهندگان هاستینگ (AWS، DigitalOcean، OVH) هستند که به راحتی از طریق ASN شناسایی میشوند. پروکسیهای مسکونی از ASN ارائهدهندگان اینترنتی معمولی (Comcast، Verizon، Deutsche Telekom) استفاده میکنند که آنها را کمتر مشکوک میکند. با این حال، حتی شبکههای مسکونی نیز ممکن است به طور جزئی به خطر بیفتند اگر ارائهدهنده به فروش پروکسی شناخته شده باشد.
سومین روش — تحلیل رفتاری در سطح شبکه است. سیستمها ناهنجاریها را ردیابی میکنند: TTL بستهها بسیار پایین یا بالا، تأخیرهای غیرعادی، استفاده از پورتهای غیرمعمول، عدم تطابق جغرافیایی و مسیر routing. به عنوان مثال، اگر IP در ایالات متحده جغرافیایی شود، اما traceroute مسیر را از طریق سرورهای اروپایی نشان دهد — این نشانهای از پروکسی است.
خطای رایج: استفاده از یک IP برای چندین جلسه با fingerprintهای مختلف. سیستمها این الگوها را ردیابی میکنند و IP را به طور کامل مسدود میکنند، حتی اگر این یک پروکسی مسکونی با کیفیت باشد.
پروکسیهای مسکونی به عنوان راهحل پایه
پروکسیهای مسکونی پایهای برای دور زدن Turnstile و hCaptcha هستند. بر خلاف پروکسیهای مرکز داده، پروکسیهای مسکونی از IPهای دستگاههای واقعی استفاده میکنند: روترهای خانگی، تلفنهای همراه، دستگاههای IoT. این امر آنها را از نظر زیرساخت شبکه تقریباً غیرقابل تشخیص از کاربران عادی میکند.
مزایای کلیدی پروکسیهای مسکونی برای دور زدن کپچا: تعلق به ISP (ارائهدهنده خدمات اینترنتی)، نه به ارائهدهندگان هاستینگ؛ اعتبار تمیز IPها در اکثر موارد؛ جغرافیای صحیح و routing؛ احتمال پایین قرار گرفتن در لیست سیاه. با این حال، همه پروکسیهای مسکونی به یک اندازه مؤثر نیستند. چندین عامل به شدت مهم هستند.
عامل اول — چرخش IPها. پروکسیهای مسکونی استاتیک (sticky sessions) اجازه میدهند که یک IP از چند دقیقه تا چند ساعت استفاده شود. این برای سناریوهایی که نیاز به حفظ جلسه دارند، بهینه است: احراز هویت، پر کردن فرمها، عملیات چند مرحلهای. پروکسیهای چرخشی IP را در هر درخواست یا بر اساس زمان تغییر میدهند که برای پارس کردن مفید است، اما ممکن است به دلیل تغییر مکرر زمینه با کپچاها مشکل ایجاد کند.
عامل دوم — توزیع جغرافیایی. برای دور زدن کپچاها مهم است که جغرافیای IP با هدفگذاری وبسایت و تنظیمات مرورگر مطابقت داشته باشد. اگر با یک وبسایت آلمانی کار میکنید، از پروکسیهای مسکونی آلمانی استفاده کنید و منطقه زمانی (Europe/Berlin)، زبان (de-DE) و محلی را در مرورگر تنظیم کنید.
عامل سوم — کیفیت ارائهدهنده پروکسی. پروکسیهای مسکونی ارزان معمولاً از طریق روشهای مشکوک جمعآوری میشوند (برنامههای VPN رایگان، دستگاههای آلوده) که منجر به اعتبار پایین مجموعه IP میشود. ارائهدهندگان حرفهای با همکاریهای SDK قانونی کار میکنند و کیفیت شبکه را به دقت نظارت میکنند. قبل از مقیاسگذاری، نرخ موفقیت ارائهدهنده را در وبسایتهای هدف بررسی کنید.
ابزارهای اتوماسیون: Selenium، Puppeteer، Playwright
انتخاب ابزار اتوماسیون به شدت بر توانایی دور زدن کپچاها تأثیر میگذارد. Selenium، Puppeteer و Playwright — سه راهحل اصلی هستند که هر کدام ویژگیهای خاص خود را در شناسایی دارند. سیستمهای حفاظت میتوانند استفاده از این ابزارها را از طریق دهها نشانه شناسایی کنند.
Selenium — قدیمیترین و به راحتی شناساییشدهترین ابزار است. مرورگری که توسط Selenium کنترل میشود، نشانههای واضحی دارد: متغیر window.navigator.webdriver در true تنظیم شده است، برخی از ویژگیهای شی navigator وجود ندارد، اندازههای خاص پنجره مرورگر که مختص اتوماسیون است. حتی با پروکسی، Selenium اغلب در بررسیهای Turnstile و hCaptcha بدون obfuscation اضافی شکست میخورد.
Puppeteer و Playwright — ابزارهای مدرنتری هستند که بر اساس پروتکل Chrome DevTools ساخته شدهاند. آنها همچنین شناسایی میشوند، اما نشانههای کمتری دارند. روشهای اصلی شناسایی: بررسی chrome.runtime، تحلیل permissions API، شناسایی حالت headless از طریق عدم وجود پلاگینها و اندازههای خاص viewport، بررسی وجود DevTools از طریق حملات زمانبندی.
// تنظیمات پایه Puppeteer با پروکسی و ضد شناسایی
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
headless: false, // headless: true به راحتی شناسایی میشود
args: [
'--proxy-server=http://your-proxy:port',
'--disable-blink-features=AutomationControlled',
'--disable-dev-shm-usage',
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process',
`--window-size=1920,1080`,
'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
]
});
const page = await browser.newPage();
// احراز هویت پروکسی
await page.authenticate({
username: 'proxy_user',
password: 'proxy_pass'
});
// بازتعریف ویژگی webdriver
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => false
});
// شبیهسازی پلاگینها برای headless
Object.defineProperty(navigator, 'plugins', {
get: () => [1, 2, 3, 4, 5]
});
});
برای دور زدن جدی کپچاها، توصیه میشود از مرورگرهای ضد شناسایی تخصصی استفاده کنید: Multilogin، GoLogin، AdsPower، Dolphin Anty. این راهحلها پروفایلهای مرورگری ایزوله با fingerprintهای منحصر به فرد ایجاد میکنند، کوکیها و ذخیرهسازی جلسه را مدیریت میکنند، به طور خودکار منطقه زمانی را با جغرافیای پروکسی همگامسازی میکنند و fingerprintهای واقعی Canvas و WebGL را شبیهسازی میکنند.
سرویسهای حل کپچا: ادغام و کارایی
زمانی که روشهای فنی کافی نیستند، سرویسهای حل کپچا به کمک میآیند. آنها به دو نوع تقسیم میشوند: انسانی (crowdsourcing) و خودکار (یادگیری ماشین). برای Turnstile و hCaptcha، کارایی متفاوت است.
سرویسهای انسانی (2Captcha، AntiCaptcha، CapSolver، CapMonster Cloud) بر اساس اصل کار توزیع شده عمل میکنند: کپچای شما به یک انسان واقعی ارسال میشود که آن را به صورت دستی حل میکند. مزایا: نرخ موفقیت بالا (95-99% برای hCaptcha، 85-95% برای Turnstile)، پشتیبانی از وظایف بصری پیچیده، ثبات نسبی. معایب: سرعت حل 10-60 ثانیه، هزینه 1-3 دلار برای 1000 کپچا، وابستگی به در دسترس بودن اپراتورها.
سرویسهای خودکار از مدلهای AI برای شناسایی استفاده میکنند. آنها سریعتر (1-5 ثانیه) و ارزانتر هستند، اما نرخ موفقیت کمتری برای کپچاهای مدرن دارند — معمولاً 60-80% برای hCaptcha و 50-70% برای Turnstile. آنها برای وظایف مبتنی بر چالش ساده مؤثر هستند، اما اغلب در بررسیهای نامرئی شکست میخورند.
// ادغام 2Captcha برای حل hCaptcha
const axios = require('axios');
async function solveHCaptcha(sitekey, pageUrl, proxyConfig) {
const API_KEY = 'your_2captcha_api_key';
// ارسال وظیفه
const createTask = await axios.post('https://2captcha.com/in.php', null, {
params: {
key: API_KEY,
method: 'hcaptcha',
sitekey: sitekey,
pageurl: pageUrl,
proxy: `${proxyConfig.type}:${proxyConfig.host}:${proxyConfig.port}:${proxyConfig.user}:${proxyConfig.pass}`,
json: 1
}
});
const taskId = createTask.data.request;
// انتظار برای حل
let solution = null;
for (let i = 0; i < 60; i++) {
await new Promise(resolve => setTimeout(resolve, 3000));
const result = await axios.get('https://2captcha.com/res.php', {
params: {
key: API_KEY,
action: 'get',
id: taskId,
json: 1
}
});
if (result.data.status === 1) {
solution = result.data.request;
break;
}
}
return solution; // توکن برای قرار دادن در فرم
}
// استفاده در Puppeteer
const captchaToken = await solveHCaptcha(
'site-key-from-page',
'https://example.com',
{ type: 'http', host: 'proxy.example.com', port: 8080, user: 'user', pass: 'pass' }
);
await page.evaluate((token) => {
document.querySelector('[name="h-captcha-response"]').value = token;
document.querySelector('[name="g-recaptcha-response"]').value = token;
}, captchaToken);
بسیار مهم است که پارامترهای صحیح پروکسی را به سرویس حل کپچا منتقل کنید. اگر کپچا با یک IP حل شود، و سپس توکن با IP دیگری استفاده شود — اعتبارسنجی شکست میخورد. کپچاهای مدرن توکن را به IP، User-Agent و سایر پارامترهای جلسه متصل میکنند.
تکنیکهای پیشرفته: شبیهسازی دستگاهها و TLS fingerprinting
برای دور زدن سیستمهای محافظتشدهتر، به تکنیکهای پیشرفتهای نیاز است که فراتر از تنظیمات پایه پروکسی و مرورگر هستند. دو حوزه کلیدی — شبیهسازی دستگاههای موبایل و مدیریت TLS fingerprint است.
پروکسیهای موبایل در ترکیب با شبیهسازی مرورگرهای موبایل کارایی بالایی در برابر کپچاها دارند. دلایل: ترافیک موبایل دارای امتیاز اعتماد بالاتری است، IPهای موبایل (به ویژه 4G/5G) معمولاً دینامیک هستند و به طور طبیعی تغییر میکنند، دستگاههای موبایل دارای مجموعهای متفاوت از پارامترهای fingerprint هستند، بسیاری از وبسایتها بررسیها را برای کاربران موبایل سادهتر میکنند.
برای شبیهسازی صحیح یک دستگاه موبایل، باید: از User-Agent موبایل (مطابقت دقیق با مدل دستگاه) استفاده کنید، viewport و devicePixelRatio صحیح را تنظیم کنید، رویدادهای لمسی را به جای رویدادهای ماوس شبیهسازی کنید، از مقادیر موبایل navigator.platform و navigator.maxTouchPoints استفاده کنید، و WebGL و Canvas fingerprint را برای مدل خاص دستگاه تنظیم کنید.
// شبیهسازی iPhone 13 Pro در Playwright
const { chromium, devices } = require('playwright');
const iPhone13Pro = devices['iPhone 13 Pro'];
const browser = await chromium.launch({
proxy: {
server: 'http://mobile-proxy:port',
username: 'user',
password: 'pass'
}
});
const context = await browser.newContext({
...iPhone13Pro,
locale: 'en-US',
timezoneId: 'America/New_York',
geolocation: { latitude: 40.7128, longitude: -74.0060 },
permissions: ['geolocation']
});
const page = await context.newPage();
// تنظیمات اضافی fingerprint
await page.addInitScript(() => {
Object.defineProperty(navigator, 'hardwareConcurrency', {
get: () => 6 // iPhone 13 Pro دارای 6 هسته است
});
Object.defineProperty(navigator, 'deviceMemory', {
get: () => 6 // 6GB RAM
});
});
TLS fingerprinting — روشی برای شناسایی مشتری بر اساس پارامترهای اتصال TLS/SSL است. هر مرورگر و سیستمعامل دارای ترکیب منحصر به فردی از cipher suites، extensions، و elliptic curves هستند که در هنگام برقراری اتصال HTTPS منتقل میشوند. سیستمهای حفاظت TLS fingerprint را تحلیل کرده و آن را با User-Agent اعلام شده مقایسه میکنند.
مشکل ابزارهای اتوماسیون استاندارد — آنها از TLS fingerprint Chromium پایه استفاده میکنند که با Chrome کامل متفاوت است. این عدم تطابق شناسایی میشود. راهحلها: استفاده از کتابخانههایی مانند curl-impersonate یا tls-client برای Python که TLS fingerprint مرورگرهای خاص را شبیهسازی میکنند؛ استفاده از HTTP-clients با سفارشیسازی TLS (به عنوان مثال، cycletls برای Node.js)؛ استفاده از مرورگرهای کامل به جای حالتهای headless.
رویکرد ترکیبی:
- پروکسیهای مسکونی یا موبایل برای IP تمیز
- مرورگر ضد شناسایی یا Playwright به درستی تنظیم شده برای fingerprint صحیح
- همگامسازی تمام پارامترها: جغرافیای IP = منطقه زمانی = زبان = محلی
- شبیهسازی رفتار انسانی: تأخیرها، حرکات ماوس، اسکرول
- سرویس حل کپچا به عنوان fallback برای موارد پیچیده
مثالهای عملی کد
یک مثال کامل از دور زدن Turnstile با استفاده از Playwright، پروکسیهای مسکونی و تکنیکهای ضد شناسایی را بررسی میکنیم. این کد رویکرد جامعتری برای حل مسئله را نشان میدهد.
const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();
// پیکربندی پروکسی
const proxyConfig = {
server: 'http://residential-proxy.proxycove.com:8080',
username: 'your_username',
password: 'your_password'
};
// تنظیمات برای شبیهسازی یک کاربر واقعی از آلمان
const userConfig = {
viewport: { width: 1920, height: 1080 },
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
locale: 'de-DE',
timezoneId: 'Europe/Berlin',
geolocation: { latitude: 52.5200, longitude: 13.4050 }, // برلین
permissions: ['geolocation']
};
async function bypassTurnstile(url) {
const browser = await chromium.launch({
headless: false, // مهم برای کپچاهای پیچیده
proxy: proxyConfig,
args: [
'--disable-blink-features=AutomationControlled',
'--no-sandbox',
'--disable-dev-shm-usage'
]
});
const context = await browser.newContext({
...userConfig,
// هدرهای اضافی
extraHTTPHeaders: {
'Accept-Language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7',
'Accept-Encoding': 'gzip, deflate, br',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'DNT': '1',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1'
}
});
const page = await context.newPage();
// وارد کردن اسکریپتهای ضد شناسایی
await page.addInitScript(() => {
// پنهان کردن webdriver
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
});
// شبیهسازی runtime chrome
window.chrome = {
runtime: {}
};
// بازتعریف permissions
const originalQuery = window.navigator.permissions.query;
window.navigator.permissions.query = (parameters) => (
parameters.name === 'notifications' ?
Promise.resolve({ state: Notification.permission }) :
originalQuery(parameters)
);
// مقادیر واقعیتر برای ویندوز
Object.defineProperty(navigator, 'platform', {
get: () => 'Win32'
});
Object.defineProperty(navigator, 'hardwareConcurrency', {
get: () => 8
});
Object.defineProperty(navigator, 'deviceMemory', {
get: () => 8
});
});
// شبیهسازی رفتار انسانی
async function humanLikeDelay(min = 1000, max = 3000) {
const delay = Math.random() * (max - min) + min;
await page.waitForTimeout(delay);
}
async function humanLikeMouseMove() {
const viewportSize = page.viewportSize();
const x = Math.random() * viewportSize.width;
const y = Math.random() * viewportSize.height;
await page.mouse.move(x, y, { steps: 10 });
}
try {
// رفتن به صفحه
await page.goto(url, { waitUntil: 'networkidle' });
await humanLikeDelay(2000, 4000);
await humanLikeMouseMove();
// انتظار برای بارگذاری Turnstile
await page.waitForSelector('iframe[src*="turnstile"]', { timeout: 10000 });
console.log('Turnstile شناسایی شد، انتظار برای حل خودکار...');
// Turnstile در حالت managed اغلب به طور خودکار حل میشود
// انتظار برای ظهور توکن
await page.waitForFunction(() => {
const response = document.querySelector('[name="cf-turnstile-response"]');
return response && response.value.length > 0;
}, { timeout: 30000 });
console.log('Turnstile با موفقیت عبور شد!');
// اقدامات بعدی در وبسایت
await humanLikeDelay();
// مثال: پر کردن فرم
await page.fill('#email', 'user@example.com');
await humanLikeDelay(500, 1500);
await page.fill('#password', 'SecurePassword123');
await humanLikeDelay(500, 1500);
await humanLikeMouseMove();
await page.click('button[type="submit"]');
await page.waitForNavigation({ waitUntil: 'networkidle' });
console.log('احراز هویت انجام شد');
} catch (error) {
console.error('خطا در دور زدن Turnstile:', error.message);
// اسکرینشات برای اشکالزدایی
await page.screenshot({ path: 'turnstile_error.png', fullPage: true });
} finally {
await browser.close();
}
}
// اجرا
bypassTurnstile('https://example.com/login');
برای hCaptcha با وظایف بصری، ادغام سرویس حل ضروری است. در اینجا یک مثال با استفاده از 2Captcha آورده شده است:
const axios = require('axios');
class HCaptchaSolver {
constructor(apiKey) {
this.apiKey = apiKey;
this.baseUrl = 'https://2captcha.com';
}
async solve(sitekey, pageUrl, proxy = null) {
// ایجاد وظیفه
const params = {
key: this.apiKey,
method: 'hcaptcha',
sitekey: sitekey,
pageurl: pageUrl,
json: 1
};
if (proxy) {
params.proxy = `${proxy.type}:${proxy.host}:${proxy.port}:${proxy.username}:${proxy.password}`;
params.proxytype = proxy.type.toUpperCase();
}
const createResponse = await axios.post(`${this.baseUrl}/in.php`, null, { params });
if (createResponse.data.status !== 1) {
throw new Error(`خطا در ایجاد وظیفه: ${createResponse.data.request}`);
}
const taskId = createResponse.data.request;
console.log(`وظیفه ایجاد شد: ${taskId}`);
// Polling نتیجه
for (let attempt = 0; attempt < 60; attempt++) {
await new Promise(resolve => setTimeout(resolve, 5000));
const resultResponse = await axios.get(`${this.baseUrl}/res.php`, {
params: {
key: this.apiKey,
action: 'get',
id: taskId,
json: 1
}
});
if (resultResponse.data.status === 1) {
console.log('hCaptcha حل شد!');
return resultResponse.data.request;
}
if (resultResponse.data.request !== 'CAPCHA_NOT_READY') {
throw new Error(`خطا در حل: ${resultResponse.data.request}`);
}
console.log(`تلاش ${attempt + 1}/60: کپچا هنوز در حال حل است...`);
}
throw new Error('Timeout: کپچا در 5 دقیقه حل نشد');
}
}
// استفاده با Playwright
async function bypassHCaptcha(page, proxyConfig) {
// دریافت sitekey از صفحه
const sitekey = await page.getAttribute('[data-sitekey]', 'data-sitekey');
const pageUrl = page.url();
const solver = new HCaptchaSolver('your_2captcha_api_key');
const token = await solver.solve(sitekey, pageUrl, {
type: 'http',
host: 'residential-proxy.proxycove.com',
port: 8080,
username: 'your_username',
password: 'your_password'
});
// قرار دادن توکن در صفحه
await page.evaluate((captchaToken) => {
document.querySelector('[name="h-captcha-response"]').value = captchaToken;
// برای برخی از وبسایتها ممکن است g-recaptcha-response نیز لازم باشد
const gRecaptcha = document.querySelector('[name="g-recaptcha-response"]');
if (gRecaptcha) {
gRecaptcha.value = captchaToken;
}
// فعالسازی رویداد برای callback
const event = new Event('change', { bubbles: true });
document.querySelector('[name="h-captcha-response"]').dispatchEvent(event);
}, token);
console.log('توکن hCaptcha قرار داده شد');
}
نتیجهگیری
دور زدن Turnstile و hCaptcha از طریق پروکسی یک وظیفه پیچیده است که نیاز به درک مکانیزمهای حفاظت و ترکیب هوشمندانه فناوریها دارد. نکات کلیدی: از پروکسیهای مسکونی یا موبایل با کیفیت به جای پروکسیهای مرکز داده استفاده کنید؛ تمام پارامترهای محیطی را همگامسازی کنید (جغرافیای IP، منطقه زمانی، زبان، محلی)؛ از تکنیکهای ضد شناسایی برای پنهان کردن اتوماسیون استفاده کنید؛ رفتار انسانی واقعی را شبیهسازی کنید؛ از سرویسهای حل کپچا به عنوان یک سطح اضافی حفاظت استفاده کنید.
کارایی روشها به وبسایت خاص و تنظیمات حفاظت بستگی دارد. توصیه میشود با پیکربندی پایه شروع کنید و به تدریج پیچیدگی را افزایش دهید، در حالی که نرخ موفقیت را زیر نظر دارید. قبل از مقیاسگذاری، در حجمهای کوچک آزمایش کنید تا از مسدود شدن مجموعه IP جلوگیری کنید. پارامترهای fingerprint و User-Agent را به طور منظم به روز کنید.
برای کار حرفهای با کپچاها، استفاده از پلتفرمهای تخصصی اتوماسیون را در نظر بگیرید که پروکسیها، مرورگرهای ضد شناسایی و سرویسهای حل را در یک اکوسیستم یکپارچه ترکیب میکنند. این امر پیچیدگی ادغام را کاهش میدهد و ثبات نتایج را افزایش میدهد. با آزمایش پروکسیهای با کیفیت در وبسایتهای هدف خود شروع کنید — این پایهای برای دور زدن موفق سیستمهای حفاظت مدرن است.