تجاوز Turnstile و hCaptcha: تقنيات الحماية وطرق الحل
أصبحت Cloudflare Turnstile و hCaptcha معيارًا لحماية خدمات الويب من الروبوتات، حيث حلت محل reCAPTCHA التقليدية. تقوم هذه الأنظمة بتحليل العشرات من معلمات المتصفح والبيئة الشبكية، مما يجعل استخدام البروكسي تحديًا كبيرًا للتشغيل الآلي. في هذه المقالة، سنستعرض كيف تعمل هذه التقنيات على المستوى الفني وما هي طرق التجاوز الفعالة حقًا عند العمل عبر البروكسي.
كيف تعمل Cloudflare Turnstile
Cloudflare Turnstile هي نظام حماية من الجيل الجديد، الذي يتم تسويقه كبديل "غير مرئي" لـ CAPTCHA. على عكس reCAPTCHA الكلاسيكية، لا تتطلب Turnstile من المستخدم اختيار إشارات المرور أو معابر المشاة. بدلاً من ذلك، يقوم النظام بتحليل الخصائص السلوكية والتقنية للمتصفح في الخلفية.
من الناحية الفنية، تعمل Turnstile على ثلاث مراحل. الأولى هي تحميل عنصر JavaScript، الذي يتم تضمينه في الصفحة عبر iframe. الثانية هي جمع البيانات: يقوم النظام بجمع بيانات عن المتصفح، بما في ذلك بصمة WebGL، بصمة Canvas، قائمة الخطوط، دقة الشاشة، المنطقة الزمنية، لغة النظام والعديد من المعلمات الأخرى. المرحلة الثالثة هي التحقق على خوادم Cloudflare، حيث يتم مطابقة البيانات المجمعة مع أنماط معروفة للروبوتات والبروكسي.
الميزة الرئيسية لـ Turnstile هي استخدام نظام سمعة عناوين IP. تمتلك Cloudflare قاعدة بيانات ضخمة تم جمعها من ملايين المواقع التي تستخدم CDN الخاص بها والحماية من هجمات DDoS. إذا تم ملاحظة عنوان IP في نشاط مشبوه، فإن احتمال تجاوز Turnstile ينخفض بشكل حاد. وهذا يخلق مشكلة أولى لمستخدمي البروكسي - حتى عناوين IP السكنية النظيفة قد تكون لها سمعة منخفضة بسبب المالكين السابقين.
مهم: تحتوي Turnstile على ثلاثة أوضاع تشغيل - managed (تلقائي)، non-interactive (بدون تفاعل) وinvisible (مخفي بالكامل). تحدد الوضعية صرامة التحقق وتؤثر على طرق التجاوز.
تقنية hCaptcha وطرق الكشف
ظهرت hCaptcha كمنافس لـ Google reCAPTCHA مع التركيز على الخصوصية والت monetization من خلال التعلم الآلي. تقدم النظام لأصحاب المواقع الدفع مقابل استخدام بيانات المستخدمين لتدريب نماذج الذكاء الاصطناعي. من الناحية الفنية، تعتبر hCaptcha أكثر عدوانية في كشف التشغيل الآلي مقارنةً بـ Turnstile.
تشمل الآلية الأساسية لعمل hCaptcha عدة مستويات من الحماية. المستوى الأول هو فحص المعلمات الشبكية: يقوم النظام بتحليل TTL للحزم، التأخيرات في الشبكة، اتساق الموقع الجغرافي لعنوان IP والمنطقة الزمنية المعلنة للمتصفح. المستوى الثاني هو استدعاءات JavaScript: تتحقق hCaptcha من وجود وصحة عمل Web API، بما في ذلك WebRTC، Battery API، وSensor API. المستوى الثالث هو التحليل السلوكي لحركات الماوس، سرعة التمرير، وأنماط النقرات.
تتميز hCaptcha باستخدام اختبارات تعتمد على التحديات. إذا اشتبه النظام في وجود روبوت، فإنه يعرض مهام بصرية: اختيار الصور التي تحتوي على كائنات معينة، حل الألغاز، التعرف على النصوص في الصور المشوهة. تزداد صعوبة المهام ديناميكيًا مع كل محاولة فاشلة. بالنسبة لمستخدمي البروكسي، يعني ذلك أنه حتى مع بصمة صحيحة، يمكن أن يحصلوا على سلسلة لا نهائية من الكابتشا.
| المعلمة | Turnstile | hCaptcha |
|---|---|---|
| وضعية عدم الظهور | نعم، بشكل افتراضي | اختياري |
| سمعة IP | حرجة | مهمة |
| تتبع البصمة | معتدل | عدواني |
| التحليل السلوكي | أساسي | متقدم |
| تكرار الكابتشا | منخفضة | متوسطة إلى عالية |
تتبع بصمة المتصفح والبروكسي
تتبع بصمة المتصفح هو تقنية لتحديد هوية المستخدم من خلال مجموعة فريدة من خصائص المتصفح والجهاز. حتى إذا كنت تستخدم بروكسي لتغيير عنوان IP، تبقى البصمة ثابتة ويمكن أن تكشف عن استخدام التشغيل الآلي. تجمع أنظمة الحماية الحديثة من 50 إلى 200+ معلمة لإنشاء بصمة.
تشمل المكونات الأساسية للبصمة: بصمة Canvas (تقديم فريد للرسومات يعتمد على GPU وبرامج التشغيل)، بصمة WebGL (معلمات مسرع الرسوميات)، بصمة Audio Context (خصائص معالجة الصوت)، قائمة الخطوط المثبتة، معلمات الشاشة (الدقة، عمق اللون، نسبة البكسل)، User-Agent ورؤوس المتصفح، إعدادات اللغة، المنطقة الزمنية، وجود المكونات الإضافية والإضافات.
تكمن المشكلة لمستخدمي البروكسي في عدم التوافق. على سبيل المثال، إذا كان عنوان IP الخاص بك يظهر موقعًا في ألمانيا، بينما المنطقة الزمنية للمتصفح تم تعيينها على موسكو - فهذا علم أحمر. إذا كان تسرب WebRTC يكشف عن عنوان IP الحقيقي الخاص بك، الذي يختلف عن البروكسي - فإن النظام يحدد التبديل على الفور. إذا كان User-Agent يعلن Windows، لكن بصمة Canvas تتوافق مع Linux - فإن الكشف مضمون.
// مثال على جمع بصمة أساسية
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('بصمة المتصفح', 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 للحزم منخفض جدًا أو مرتفع جدًا، تأخيرات غير عادية، استخدام منافذ غير قياسية، عدم تطابق الموقع الجغرافي ومسار التوجيه. على سبيل المثال، إذا كان عنوان IP جغرافيًا في الولايات المتحدة، لكن traceroute يظهر مسارًا عبر خوادم أوروبية - فهذا علامة على وجود بروكسي.
خطأ شائع: استخدام عنوان IP واحد لجلسات متعددة مع بصمات مختلفة. تتابع الأنظمة مثل هذه الأنماط وتحظر IP بالكامل، حتى لو كانت بروكسي سكنية ذات جودة عالية.
البروكسي السكنية كحل أساسي
البروكسي السكنية هي الأساس لتجاوز Turnstile و hCaptcha. على عكس بروكسي مراكز البيانات، تستخدم السكنية عناوين IP لأجهزة حقيقية: أجهزة التوجيه المنزلية، الهواتف المحمولة، وأجهزة IoT. وهذا يجعلها تقريبًا غير قابلة للتمييز عن المستخدمين العاديين من حيث البنية التحتية الشبكية.
المزايا الرئيسية للبروكسي السكنية لتجاوز الكابتشا: الانتماء إلى ISP (مزود خدمة الإنترنت)، وليس لمزودي الاستضافة؛ سمعة نظيفة لعناوين IP في معظم الحالات؛ الموقع الجغرافي الصحيح ومسار التوجيه؛ احتمال منخفض للدخول في القوائم السوداء. ومع ذلك، ليست جميع البروكسي السكنية فعالة بنفس القدر. هناك عدة عوامل حاسمة.
العامل الأول هو تدوير عناوين IP. تسمح البروكسي السكنية الثابتة (الجلسات الثابتة) باستخدام 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 دون تشويش إضافي.
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. تقوم هذه الحلول بإنشاء ملفات تعريف متصفح معزولة مع بصمات فريدة، تدير الكوكيز وsession storage، وتزامن تلقائي للمنطقة الزمنية مع الموقع الجغرافي للبروكسي، وتحاكي بصمات Canvas وWebGL بشكل واقعي.
خدمات حل الكابتشا: التكامل والفعالية
عندما تكون الطرق التقنية غير كافية، تأتي خدمات حل الكابتشا للمساعدة. تنقسم إلى نوعين: بشرية (crowdsourcing) وآلية (تعلم الآلة). تختلف الفعالية لـ Turnstile وhCaptcha.
تعمل الخدمات البشرية (2Captcha، AntiCaptcha، CapSolver، CapMonster Cloud) على مبدأ العمل الموزع: يتم إرسال كابتشا الخاصة بك إلى شخص حقيقي، يقوم بحلها يدويًا. المزايا: معدل نجاح مرتفع (95-99% لـ hCaptcha، 85-95% لـ Turnstile)، دعم المهام البصرية المعقدة، استقرار نسبي. العيوب: سرعة الحل 10-60 ثانية، التكلفة 1-3 دولارات لكل 1000 كابتشا، الاعتماد على توفر المشغلين.
تستخدم الخدمات الآلية نماذج الذكاء الاصطناعي للتعرف. إنها أسرع (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، User-Agent ومعلمات الجلسة الأخرى.
تقنيات متقدمة: محاكاة الأجهزة وTLS fingerprinting
لتجاوز الأنظمة الأكثر حماية، تتطلب تقنيات متقدمة تتجاوز الإعداد الأساسي للبروكسي والمتصفح. المجالان الرئيسيان هما محاكاة الأجهزة المحمولة وإدارة بصمة TLS.
البروكسي المحمولة بالتزامن مع محاكاة متصفحات الهواتف المحمولة توفر فعالية عالية ضد الكابتشا. الأسباب: يتمتع حركة المرور المحمولة بسمعة أعلى، وعناوين IP المحمولة (خاصة 4G/5G) غالبًا ما تكون ديناميكية وتتغير بشكل طبيعي، والأجهزة المحمولة لها مجموعة مختلفة من معلمات البصمة، والعديد من المواقع تبسط التحقق للمستخدمين المحمولين.
لمحاكاة الجهاز المحمول بشكل صحيح، يجب: استخدام User-Agent المحمول (مطابقة دقيقة لطراز الجهاز)، تعيين viewport الصحيح وdevicePixelRatio، محاكاة أحداث اللمس بدلاً من أحداث الماوس، استخدام قيم المحمول لـ navigator.platform وnavigator.maxTouchPoints، وضبط بصمة WebGL وCanvas وفقًا لطراز الجهاز المحدد.
// محاكاة 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();
// إعداد إضافي للبصمة
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 ومقارنتها مع User-Agent المعلن.
تكمن المشكلة في أدوات التشغيل الآلي القياسية - أنها تستخدم بصمة TLS الخاصة بـ Chromium الأساسي، والتي تختلف عن Chrome الكامل. يتم الكشف عن هذا التباين. الحلول: استخدام مكتبات مثل curl-impersonate أو tls-client لـ Python، التي تحاكي بصمة TLS لمتصفحات معينة؛ استخدام عملاء HTTP مع تخصيص TLS (مثل cycletls لـ Node.js)؛ استخدام متصفحات كاملة بدلاً من أوضاع headless.
نهج مركب:
- بروكسي سكنية أو محمولة للحصول على IP نظيف
- متصفح مضاد للكشف أو Playwright مُعد بشكل صحيح لبصمة صحيحة
- تزامن جميع المعلمات: الموقع الجغرافي لـ IP = المنطقة الزمنية = اللغة = اللغة المحلية
- محاكاة سلوك إنساني: تأخيرات، حركات الماوس، تمرير
- خدمة حل الكابتشا كخطة احتياطية للحالات المعقدة
أمثلة عملية على الكود
دعونا نستعرض مثالًا كاملًا لتجاوز 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
});
// محاكاة chrome runtime
window.chrome = {
runtime: {}
};
// إعادة تعريف الأذونات
const originalQuery = window.navigator.permissions.query;
window.navigator.permissions.query = (parameters) => (
parameters.name === 'notifications' ?
Promise.resolve({ state: Notification.permission }) :
originalQuery(parameters)
);
// قيم أكثر واقعية لـ Windows
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}`);
// استعلام النتيجة
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('انتهت المدة: لم يتم حل الكابتشا خلال 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. قم بتحديث معلمات البصمة وUser-Agent بانتظام لتتناسب مع الإصدارات الحالية من المتصفحات.
للعمل الاحترافي مع الكابتشا، ضع في اعتبارك استخدام منصات التشغيل الآلي المتخصصة التي تجمع بين البروكسي، متصفحات مضادة للكشف وخدمات الحل في نظام بيئي واحد. يقلل ذلك من تعقيد التكامل ويزيد من استقرار النتائج. ابدأ بـ اختبار بروكسي عالية الجودة على مواقعك المستهدفة - هذا هو أساس تجاوز أنظمة الحماية الحديثة بنجاح.