العودة إلى المدونة

كيفية تجاوز كشف PerimeterX و Akamai

نستعرض آليات عمل PerimeterX و Akamai، ندرس طرق اكتشافها ونضع استراتيجية فعالة للتجاوز باستخدام البروكسي، بصمات المتصفح ومحاكاة السلوك.

📅٣ رجب ١٤٤٧ هـ
```html

تجاوز حماية PerimeterX و Akamai: طرق عملية لمكافحة الكشف

تعتبر PerimeterX و Akamai Bot Manager من الحلول الأكثر تطوراً لحماية المواقع من الروبوتات، والتي تستخدمها أكبر منصات التجارة الإلكترونية، والخدمات المالية، والمواقع المؤسسية. تقوم هذه الأنظمة بتحليل مئات المعايير الخاصة بالمتصفح، وسلوك المستخدم، وخصائص الشبكة، مما يخلق حماية متعددة الطبقات يصعب تجاوزها بتغيير عنوان IP فقط.

في هذا الدليل، سنقوم بتحليل معمق لهندسة كلا النظامين، وسندرس طرق الكشف الخاصة بهم، وسنضع استراتيجية شاملة للتجاوز تعتمد على حالات حقيقية وتجارب تقنية.

هندسة PerimeterX و Akamai: كيف يعمل الكشف

تعمل PerimeterX (الآن HUMAN Security) و Akamai Bot Manager كنظم حماية متعددة الطبقات، حيث تتداخل في مراحل مختلفة من معالجة الطلب. فهم هيكلها أمر بالغ الأهمية لتطوير استراتيجية التجاوز.

هندسة PerimeterX

تعمل PerimeterX على ثلاث مراحل. في المرحلة الأولى، يتم تضمين مستشعر JavaScript في صفحة HTML ويتم تنفيذه في متصفح العميل، حيث يجمع بيانات عن بيئة التشغيل: بصمة WebGL، بصمة Canvas، سياق الصوت، الخطوط المتاحة، المكونات الإضافية، دقة الشاشة والعديد من المعايير الأخرى. يتم تشفير هذا المستشعر وتحديثه بانتظام، مما يجعل تحليله صعبًا.

في المرحلة الثانية، يقوم المكون الخادم لـ PerimeterX بتحليل رؤوس HTTP، بصمة TLS، سمعة IP، وخصائص الشبكة قبل أن يصل الطلب إلى التطبيق الرئيسي. تستخدم النظام قاعدة بيانات خاصة بها للبوتات المعروفة وعناوين IP المشبوهة، والتي يتم تحديثها في الوقت الحقيقي.

المرحلة الثالثة هي التحليل السلوكي. تتعقب PerimeterX حركات الماوس، سرعة التمرير، أنماط النقر، الوقت بين الإجراءات وتبني ملفًا سلوكيًا. تقارن نماذج تعلم الآلة هذا الملف مع أنماط المستخدمين الحقيقيين والبوتات المعروفة.

هندسة Akamai Bot Manager

يتكامل Akamai Bot Manager على مستوى CDN، مما يمنحه ميزة في سرعة التحليل. تستخدم النظام تقنية BMP (مدير البوتات المتميز) الخاصة به، التي تحلل الطلبات على الخوادم الحدودية لـ Akamai قبل إرسالها إلى خادم الأصل.

الاختلاف الرئيسي في Akamai هو استخدام البيانات من ملايين المواقع المحمية بواسطة CDN الخاص بهم. هذا يمكّن النظام من التعرف بسرعة على أنواع جديدة من البوتات وتحديث قواعد الكشف على مستوى عالمي. كما يستخدم Akamai تقنية Web SDK، المشابهة لمستشعر PerimeterX، ولكن مع التركيز على التحقق من سلامة العميل باستخدام التشفير.

مهم: تستخدم كلا النظامين ملفات تعريف الارتباط مع بيانات مشفرة عن نتائج التحقق. لا يمكن تزوير هذه الملفات دون معرفة المفتاح الخادم، لذا فإن مجرد نسخ ملفات تعريف الارتباط بين الجلسات لا يعمل.

طرق الكشف: ماذا تحلل أنظمة الحماية

تقوم أنظمة مكافحة البوت الحديثة بتحليل الطلبات بناءً على مئات المعايير، التي تجمع في عدة فئات. فهم كل فئة يسمح بإزالة علامات الأتمتة بشكل منهجي.

تحليل رؤوس HTTP و TLS

ترتيب رؤوس HTTP هو أحد أبسط طرق الكشف. ترسل المتصفحات الرؤوس بترتيب محدد بدقة، يختلف بين الإصدارات والمصنعين. تستخدم المكتبات مثل requests في Python أو axios في Node.js ترتيبًا خاصًا بها، مما يكشف الأتمتة على الفور.

يتم إنشاء بصمة TLS (بصمة JA3) من معايير مصافحة TLS: إصدار TLS، قائمة التشفيرات المدعومة، الامتدادات وترتيبها. كل مجموعة من المتصفح ونظام التشغيل تخلق بصمة فريدة. على سبيل المثال، Chrome 120 على Windows 11 لديه بصمة تختلف عن Chrome 120 على macOS أو Firefox على نفس النظام.

// مثال على عدم تطابق User-Agent وبصمة TLS
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0
TLS Fingerprint: بصمة JA3 تتوافق مع Python requests
// النتيجة: حظر فوري

بيئة JavaScript

تترك المتصفحات بدون واجهة عشرات الآثار في بيئة JavaScript. يتم التحقق من خصائص navigator.webdriver، وجود كائنات window.chrome، عدم التطابق في navigator.plugins، الشذوذ في WebGL و Canvas rendering.

تستخدم PerimeterX و Akamai تقنيات متقدمة للتحقق: تقيس وقت تنفيذ وظائف JavaScript (في المتصفحات بدون واجهة يختلف)، تتحقق من وجود آثار الأتمتة في DOM، وتحلل مكدس استدعاءات الوظائف. كما تتحقق الأنظمة من اتساق البيانات - على سبيل المثال، إذا كان User-Agent يشير إلى جهاز محمول، ولكن navigator.maxTouchPoints يساوي 0، فهذا يعد محفزًا للكشف.

خصائص الشبكة وسمعة IP

تتحقق أنظمة الحماية من عنوان IP بناءً على العديد من المعايير: الانتماء لمزودي البروكسي المعروفين، وجوده في القوائم السوداء، تاريخ النشاط من هذا IP، اتساق الجغرافيا مع المعايير الأخرى للطلب (لغة المتصفح، المنطقة الزمنية).

يتم إعطاء اهتمام خاص لأنماط استخدام IP. إذا كانت الطلبات تأتي من عنوان واحد مع User-Agent أو بصمات متصفح مختلفة، فهذا إشارة قوية للأتمتة. بالمثل، إذا كان IP يتغير بشكل متكرر جدًا ضمن جلسة واحدة (تدوير بروكسي عدواني)، فإن ذلك يؤدي إلى الحظر.

معيار الكشف PerimeterX Akamai
بصمة TLS أولوية عالية أولوية حرجة
بصمة Canvas أولوية متوسطة أولوية عالية
التحليل السلوكي أولوية حرجة أولوية عالية
سمعة IP أولوية عالية أولوية عالية
بصمة HTTP/2 أولوية متوسطة أولوية حرجة

بصمة المتصفح وبصمات TLS

بصمة المتصفح هي تقنية لإنشاء معرف فريد للمتصفح بناءً على خصائصه. حتى بدون ملفات تعريف الارتباط، يمكن لأنظمة الحماية تتبع المستخدمين واكتشاف الشذوذ.

بصمة Canvas و WebGL

تعمل بصمة Canvas عن طريق رسم صورة غير مرئية تحتوي على نص ورسوم. بسبب الاختلافات في برامج تشغيل الرسوم، والخطوط، وإعدادات مكافحة التعرج، تنتج كل نظام صورة مختلفة قليلاً. يصبح تجزئة هذه الصورة جزءًا من البصمة.

تستخدم بصمة WebGL الرسم ثلاثي الأبعاد لإنشاء بصمة أكثر تميزًا. يطلب النظام معلومات عن GPU، والامتدادات المدعومة، وأقصى أحجام القوام وخصائص أخرى. تخلق مجموعة هذه البيانات بصمة ذات إنتروبيا كافية لتحديد الجهاز.

// مثال على الحصول على بصمة WebGL
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);

// النتيجة قد تكون: "Google Inc. (NVIDIA)" + "ANGLE (NVIDIA GeForce RTX 3080)"
// مجموعة فريدة لكل جهاز

سياق الصوت والخطوط

يسمح Audio Context API بإنشاء بصمة فريدة بناءً على معالجة الصوت. تؤدي الاختلافات في مجموعة الصوت لنظام التشغيل إلى اختلافات دقيقة في معالجة إشارة الصوت، والتي يمكن قياسها واستخدامها للتعرف.

قائمة الخطوط المثبتة أيضًا فريدة لكل نظام. تستخدم أنظمة الحماية تقنية قياس أحجام النصوص بخطوط مختلفة - إذا لم يكن الخط مثبتًا، يستخدم المتصفح بديلًا، مما يغير الأحجام. يتحقق فحص مئات الخطوط من إنشاء توقيع فريد.

بصمات TLS و HTTP/2

يتم إنشاء بصمة JA3 من معايير TLS Client Hello: إصدار SSL/TLS، قائمة مجموعات التشفير، قائمة الامتدادات، قائمة المجموعات البيانية المدعومة، وأشكال نقاط المجموعات البيانية. يتم دمج هذه المعايير وتجميعها، مما يخلق سلسلة فريدة.

تقوم بصمة HTTP/2 بتحليل معايير SETTINGS frame، وترتيب وأولويات التدفقات، وقيم window update. يستخدم كل متصفح إعدادات HTTP/2 فريدة، مما يسمح بتحديد العميل حتى مع بصمة TLS صحيحة.

نصيحة عملية: لتجاوز بصمة المتصفح، يجب ضمان اتساق جميع المعايير. استخدام User-Agent من Chrome مع بصمة TLS من Firefox يتم اكتشافه على الفور. تساعد أدوات مثل curl-impersonate أو مكتبات tls-client في إنشاء بصمة متسقة تمامًا.

التحليل السلوكي وتعلم الآلة

التحليل السلوكي هو الجانب الأكثر صعوبة في تجاوزه في أنظمة مكافحة البوت الحديثة. حتى مع بصمة تقنية مثالية، سيظهر السلوك غير البشري الأتمتة.

تحليل حركات الماوس والتفاعلات

تتعقب PerimeterX و Akamai مسارات حركة الماوس، التسارع والتباطؤ، والحركات الدقيقة التي تميز اليد البشرية. عادةً ما تتحرك الروبوتات المؤشر في خطوط مستقيمة أو لا تولد أحداث الماوس على الإطلاق. كما تحلل الأنظمة وقت الاستجابة - النقر مباشرة بعد تحميل الصفحة دون حركة ماوس يبدو مشبوهًا.

أنماط التمرير أيضًا فريدة. يقوم الإنسان بتمرير الصفحة بشكل غير متساوٍ: بسرعة في البداية، يتباطأ للقراءة، وأحيانًا يقوم بالتمرير للخلف. عادةً ما تقوم الروبوتات بالتمرير بسرعة ثابتة أو تستخدم window.scrollTo() للتمرير الفوري.

أنماط زمنية وسرعة الإجراءات

الوقت بين الإجراءات هو معيار حاسم. لا يمكن للإنسان ملء نموذج مكون من 10 حقول في 0.5 ثانية أو الانتقال عبر 50 رابطًا في دقيقة واحدة. تبني أنظمة الحماية ملفًا شخصيًا للسرعة لكل نوع من الإجراءات وتقارنه بسلوك المستخدم.

يتم إعطاء اهتمام خاص لاتساق التأخيرات. إذا كان هناك تأخير ثابت قدره ثانيتين بين كل نقرة، فهذا مؤشر واضح على sleep(2000) في الشيفرة. التأخيرات البشرية تتمتع بتنوع طبيعي وتتبع توزيعات إحصائية معينة.

نماذج تعلم الآلة

تستخدم كلا النظامين نماذج تعلم الآلة المدربة على ملايين جلسات المستخدمين الحقيقيين والبوتات المعروفة. تحلل النماذج مئات الميزات في وقت واحد: تسلسل الإجراءات، عمق التصفح، أنماط التنقل، التفاعل مع العناصر.

تستخدم PerimeterX مجموعة من النماذج بأوزان مختلفة لأنواع مختلفة من المواقع. تركز النموذج الخاص بالتجارة الإلكترونية على أنماط الشراء، بينما يركز النموذج الخاص بمواقع الوسائط على أنماط قراءة المحتوى. وهذا يجعل التجاوز أكثر صعوبة، حيث يتطلب التكيف مع خصوصية كل موقع.

// مثال على تأخيرات بشرية مع تنوع
function humanDelay(baseMs) {
  // توزيع لوغاريتمي بدلاً من توزيع منتظم
  const variance = baseMs * 0.3;
  const delay = baseMs + (Math.random() - 0.5) * variance;
  // نضيف تأخيرات دقيقة تميز معالجة الأحداث بواسطة المتصفح
  const microDelay = Math.random() * 50;
  return Math.max(100, delay + microDelay);
}

// الاستخدام: await new Promise(r => setTimeout(r, humanDelay(2000)));

استراتيجية اختيار وتدوير البروكسي

يعد اختيار نوع البروكسي واستراتيجية التدوير أمرًا بالغ الأهمية عند العمل مع PerimeterX و Akamai. ستؤدي التهيئة غير الصحيحة للبروكسي إلى إبطال جميع الجهود المبذولة لإخفاء بصمة المتصفح.

بروكسي سكنية مقابل موبايل مقابل بروكسي مركز البيانات

بروكسي مركز البيانات هي الأقل تكلفة، ولكنها أيضًا الأكثر عرضة للاكتشاف. تدعم PerimeterX و Akamai قواعد بيانات عناوين IP لمراكز البيانات وتزيد تلقائيًا من مستوى التحقق لهذه الطلبات. يمكن استخدام بروكسي مركز البيانات فقط للمهام ذات الأولوية المنخفضة أو بالتزامن مع بصمة متصفح عالية الجودة جدًا.

بروكسي سكنية تستخدم عناوين IP لمزودي الإنترنت الحقيقيين، مما يقلل بشكل كبير من احتمال الاكتشاف. ومع ذلك، فإن جودة البروكسي السكنية تتفاوت بشكل كبير. من المهم اختيار مزودين لديهم مجموعات IP نظيفة، حيث لم يتم استخدام العناوين سابقًا في البريد العشوائي أو أنشطة مشبوهة أخرى.

بروكسي موبايل توفر أعلى مستوى من الثقة، حيث تستخدم عناوين IP لمشغلي الهواتف المحمولة. عادةً ما يتم مشاركة هذه العناوين بين العديد من المستخدمين (NAT من الدرجة الناقلة)، مما يجعل الحظر صعبًا. تعتبر البروكسي الموبايل فعالة بشكل خاص ضد Akamai، الذي يكون أكثر حذرًا في حظر حركة المرور المحمولة.

استراتيجيات التدوير

يعد التدوير العدواني (تغيير IP مع كل طلب) خطأ شائعًا. يخلق هذا نمطًا مشبوهًا: لا يمكن لمستخدم واحد تغيير عنوان IP كل بضع ثوانٍ. التدوير الجلساتي أكثر فعالية، حيث يتم استخدام IP واحد لجلسة المستخدم الكاملة (10-30 دقيقة من النشاط).

بالنسبة للعمليات الطويلة، يُوصى باستخدام جلسات ثابتة تستمر من 30 إلى 60 دقيقة. هذا يحاكي سلوك المستخدم الحقيقي، الذي يبقى على نفس IP خلال الجلسة. من المهم عدم استخدام IP واحد لفترة طويلة جدًا - الجلسات التي تستمر لعدة ساعات تبدو أيضًا مشبوهة.

الاتساق الجغرافي

من الضروري ضمان مطابقة بين الجغرافيا لعناوين IP والمعايير الأخرى: لغة المتصفح، المنطقة الزمنية، إعدادات اللغة. إذا كان عنوان IP من ألمانيا، ولكن navigator.language يعيد "en-US"، والمنطقة الزمنية "America/New_York" - فهذا يعد محفزًا فوريًا للكشف.

عند العمل مع عدة مناطق جغرافية، استخدم ملفات تعريف متصفح منفصلة لكل منطقة. التبديل بين المناطق ضمن نفس الجلسة (IP من فرنسا، ثم من اليابان) غير ممكن لمستخدم حقيقي ويتم اكتشافه على الفور.

نوع البروكسي الفعالية ضد PerimeterX الفعالية ضد Akamai التوصيات
مركز البيانات منخفضة (30-40%) منخفضة جدًا (20-30%) فقط للاختبار
سكنية عالية (75-85%) متوسطة (65-75%) الاختيار الرئيسي لمعظم المهام
موبايل عالية جدًا (85-95%) عالية (80-90%) للمهام الحرجة والمواقع عالية الحماية

إعداد متصفحات مكافحة الكشف والأدوات

يعد الإعداد الصحيح لأدوات الأتمتة عاملًا رئيسيًا في نجاح تجاوز PerimeterX و Akamai. حتى أفضل البروكسيات لن تساعد إذا كانت بصمة المتصفح تحتوي على علامات واضحة للأتمتة.

Playwright و Puppeteer: إعداد متقدم

يؤدي التثبيت الأساسي لـ Playwright أو Puppeteer إلى إنشاء متصفح بدون واجهة واضح. من الضروري استخدام ملحقات التخفي وإعدادات إضافية لإخفاء الأتمتة. تخفي مكتبة puppeteer-extra-plugin-stealth العلامات الأساسية، ولكنها تتطلب إعدادًا إضافيًا.

// إعداد متقدم لـ Playwright مع مكافحة الكشف
const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();

chromium.use(stealth);

const browser = await chromium.launch({
  headless: false, // وضع الرأس بدون واجهة يتم اكتشافه بسهولة
  args: [
    '--disable-blink-features=AutomationControlled',
    '--disable-features=IsolateOrigins,site-per-process',
    '--disable-site-isolation-trials',
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-dev-shm-usage',
    '--disable-accelerated-2d-canvas',
    '--disable-gpu',
    '--window-size=1920,1080',
    '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  ]
});

const context = await browser.newContext({
  viewport: { width: 1920, height: 1080 },
  locale: 'en-US',
  timezoneId: 'America/New_York',
  permissions: ['geolocation', 'notifications'],
  geolocation: { latitude: 40.7128, longitude: -74.0060 }
});

Selenium مع undetected-chromedriver

يتم اكتشاف Selenium WebDriver القياسي بسهولة من خلال خاصية navigator.webdriver. تقوم مكتبة undetected-chromedriver بتصحيح ChromeDriver تلقائيًا، مما يزيل العلامات الأساسية للأتمتة ويتم تحديثها بانتظام لتجاوز طرق الكشف الجديدة.

import undetected_chromedriver as uc
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920,1080')

# استخدام إصدار محدد من Chrome لضمان الاتساق
driver = uc.Chrome(options=options, version_main=120)

# إخفاء إضافي من خلال CDP
driver.execute_cdp_cmd('Network.setUserAgentOverride', {
    "userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
})

driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

متصفحات مكافحة الكشف: AdsPower، Multilogin، GoLogin

توفر المتصفحات التجارية لمكافحة الكشف حلولاً جاهزة لإدارة البصمات. يسمح AdsPower و Multilogin بإنشاء ملفات تعريف مع بصمات Canvas و WebGL وصوت فريدة وإدارتها عبر API. تعتبر هذه الأدوات مفيدة بشكل خاص عند العمل مع العديد من الحسابات.

الميزة الرئيسية هي إمكانية الحفاظ على بصمة متسقة بين الجلسات. تحتوي كل ملف تعريف على معايير ثابتة لـ Canvas و WebGL و fonts، وهو أمر حاسم للعمل على المدى الطويل. من المهم أيضًا استخدام تكوينات واقعية - يمكن أن يؤدي إنشاء بصمات عشوائية إلى إنشاء مجموعات غير ممكنة تقنيًا، والتي يتم اكتشافها بسهولة.

عملاء HTTP مع بصمات صحيحة

بالنسبة للمهام التي لا تتطلب رسم JavaScript، فإن عملاء HTTP مع بصمات TLS و HTTP/2 الصحيحة أكثر فعالية. تساعد مكتبات curl-impersonate (لـ Python - curl_cffi) و tls-client في محاكاة بصمات TLS لمتصفحات حقيقية.

from curl_cffi import requests

# محاكاة Chrome 120 مع بصمة TLS و HTTP/2 الصحيحة
response = requests.get(
    'https://example.com',
    impersonate="chrome120",
    proxies={
        "http": "http://user:pass@proxy:port",
        "https": "http://user:pass@proxy:port"
    },
    headers={
        'Accept-Language': 'en-US,en;q=0.9',
        'Accept-Encoding': 'gzip, deflate, br',
        'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"'
    }
)

# بصمة TLS تتوافق تلقائيًا مع Chrome 120

تقنيات الأتمتة بدون محفزات الكشف

حتى مع بصمة تقنية مثالية، يمكن أن تكشف أنماط الأتمتة عن الروبوت. من الضروري محاكاة السلوك البشري على مستوى التفاعل مع الموقع.

محاكاة حركات الماوس

الحركة الخطية للماوس من النقطة A إلى النقطة B هي علامة واضحة على الأتمتة. تخلق اليد البشرية منحنيات سلسة مع تصحيحات دقيقة. تسمح المكتبات مثل pyautogui بتوليد مسارات واقعية باستخدام منحنيات بيزير.

// توليد مسار يشبه الإنسان لحركة الماوس
async function humanMouseMove(page, targetX, targetY) {
  const current = await page.evaluate(() => ({
    x: window.mouseX || 0,
    y: window.mouseY || 0
  }));
  
  const steps = 25 + Math.floor(Math.random() * 15);
  const points = generateBezierCurve(current.x, current.y, targetX, targetY, steps);
  
  for (let point of points) {
    await page.mouse.move(point.x, point.y);
    await new Promise(r => setTimeout(r, 10 + Math.random() * 20));
  }
  
  // تصحيحات دقيقة قبل النقر
  await page.mouse.move(targetX + (Math.random() - 0.5) * 2, 
                        targetY + (Math.random() - 0.5) * 2);
}

function generateBezierCurve(x1, y1, x2, y2, steps) {
  const cp1x = x1 + (x2 - x1) * (0.3 + Math.random() * 0.2);
  const cp1y = y1 + (y2 - y1) * (0.3 + Math.random() * 0.2);
  const points = [];
  
  for (let i = 0; i <= steps; i++) {
    const t = i / steps;
    const x = Math.pow(1-t, 2) * x1 + 2 * (1-t) * t * cp1x + Math.pow(t, 2) * x2;
    const y = Math.pow(1-t, 2) * y1 + 2 * (1-t) * t * cp1y + Math.pow(t, 2) * y2;
    points.push({x: Math.round(x), y: Math.round(y)});
  }
  return points;
}

تمرير واقعي وقراءة المحتوى

يقوم الإنسان بتمرير الصفحة لقراءة المحتوى، متوقفًا عند الأقسام المثيرة للاهتمام. عادةً ما يقوم الروبوت بالتمرير إلى أسفل الصفحة أو إلى العنصر المطلوب بأقصى سرعة. تتطلب محاكاة القراءة تحليل المحتوى وإنشاء فترات توقف واقعية.

async function humanScroll(page, targetElement) {
  const elementPosition = await page.evaluate(el => {
    const rect = el.getBoundingClientRect();
    return rect.top + window.pageYOffset;
  }, targetElement);
  
  const currentScroll = await page.evaluate(() => window.pageYOffset);
  const distance = elementPosition - currentScroll;
  const scrollSteps = Math.floor(Math.abs(distance) / 100);
  
  for (let i = 0; i < scrollSteps; i++) {
    const scrollAmount = (distance / scrollSteps) * (0.8 + Math.random() * 0.4);
    await page.evaluate((amount) => {
      window.scrollBy({top: amount, behavior: 'smooth'});
    }, scrollAmount);
    
    // فترات توقف عشوائية لـ "القراءة"
    if (Math.random() > 0.7) {
      await new Promise(r => setTimeout(r, 1000 + Math.random() * 2000));
    } else {
      await new Promise(r => setTimeout(r, 200 + Math.random() * 400));
    }
  }
}

أنماط تنقل طبيعية

لا ينتقل المستخدمون مباشرة إلى الصفحة المستهدفة - بل يتفاعلون مع الموقع بشكل طبيعي. ابدأ من الصفحة الرئيسية، وزر عدة أقسام، واستخدم البحث أو قائمة التنقل. يخلق هذا تاريخًا للتفاعل يزيد من ثقة أنظمة الحماية.

من المهم أيضًا محاكاة الأخطاء والتصحيحات - قد ينقر الشخص على الرابط الخطأ ويعود للخلف، أو يخطئ عند إدخال نص في حقل البحث ويصحح الخطأ. يبدو الطريق المباشر المثالي إلى الهدف مشبوهًا.

إدارة ملفات تعريف الارتباط والتخزين

تستخدم PerimeterX و Akamai ملفات تعريف الارتباط و localStorage لتتبع الجلسات. يبدو أن المسح الكامل لملفات تعريف الارتباط بين الطلبات مشبوهًا - يحتفظ المتصفح الحقيقي ببعض ملفات تعريف الارتباط (التحليلات، الإعدادات). احتفظ بملفات تعريف الارتباط بين الجلسات لنفس "المستخدم"، ولكن استخدم مجموعات مختلفة من ملفات تعريف الارتباط لملفات تعريف مختلفة.

مهم: تحلل أنظمة الحماية عمر ملفات تعريف الارتباط. إذا ظهرت ملفات تعريف الارتباط الواقية (_px، _abck) للتو، ولكن المستخدم يظهر سلوك زائر دائم - فهذا عدم تطابق. للعمليات طويلة الأمد، "قم بتسخين" الملفات الشخصية، مما يخلق تاريخًا للزيارات.

حالات عملية وحل المشكلات الشائعة

دعونا نستعرض سيناريوهات محددة لتجاوز PerimeterX و Akamai مع حلول للمشكلات الشائعة التي قد تنشأ في العملية.

الحالة 1: استخراج بيانات التجارة الإلكترونية مع PerimeterX

المهمة: استخراج بيانات المنتجات من متجر إلكتروني كبير محمي بواسطة PerimeterX. يقوم الموقع بالحظر بعد 3-5 طلبات حتى مع عناوين IP مختلفة.

الحل: استخدام مجموعة من البروكسي السكنية مع جلسات ثابتة (30 دقيقة) و Playwright مع محاكاة كاملة للسلوك. النقاط الرئيسية: نبدأ من الصفحة الرئيسية، نستخدم البحث أو الفئات للتنقل، نضيف تأخيرات عشوائية تتراوح بين 3-7 ثوانٍ بين الطلبات، ونحاكي التمرير وحركات الماوس. من الضروري الحفاظ على ملفات تعريف الارتباط _px بين الطلبات ضمن نفس الجلسة.

// مثال على جلسة مع التسخين
async function scrapeWithWarmup(page, targetUrls) {
  // تسخين الملف الشخصي
  await page.goto('https://example.com');
  await humanScroll(page, await page.$('footer'));
  await new Promise(r => setTimeout(r, 3000 + Math.random() * 2000));
  
  // التنقل عبر القائمة
  await humanMouseMove(page, menuX, menuY);
  await page.click('nav a.category');
  await new Promise(r => setTimeout(r, 2000 + Math.random() * 1000));
  
  // فقط بعد التسخين ننتقل إلى الصفحات المستهدفة
  for (let url of targetUrls) {
    await page.goto(url);
    await humanScroll(page, await page.$('.product-info'));
    // استخراج البيانات
    const data = await page.evaluate(() => extractProductData());
    await new Promise(r => setTimeout(r, 5000 + Math.random() * 3000));
  }
}

الحالة 2: تجاوز Akamai لطلبات API

المهمة: الوصول إلى API المحمي بواسطة Akamai Bot Manager. يتطلب API رؤوسًا محددة ورموزًا يتم إنشاؤها بواسطة JavaScript على الصفحة.

الحل: غالبًا ما تستخدم Akamai sensor_data - سلسلة مشفرة تحتوي على نتائج تحقق المتصفح. يتم إنشاء هذه السلسلة بواسطة JavaScript ويجب تضمينها في الطلب. نستخدم أتمتة المتصفح للحصول على sensor_data صالح، ثم نطبقه في عميل HTTP مع بصمة TLS صحيحة.

// استخراج sensor_data عبر المتصفح
async function getSensorData(page) {
  await page.goto('https://example.com');
  
  // الانتظار حتى يتم تنفيذ مستشعر Akamai
  await page.waitForTimeout(5000);
  
  // استخراج sensor_data من ملفات تعريف الارتباط أو localStorage
  const sensorData = await page.evaluate(() => {
    const cookie = document.cookie.split(';')
      .find(c => c.trim().startsWith('_abck='));
    return cookie ? cookie.split('=')[1] : null;
  });
  
  return sensorData;
}

// الاستخدام في عميل HTTP
const sensorData = await getSensorData(page);
const response = await fetch('https://example.com/api/data', {
  headers: {
    'Cookie': `_abck=${sensorData}`,
    'User-Agent': 'Mozilla/5.0...',
    // يجب أن تتوافق الرؤوس الأخرى مع المتصفح
  }
});

الحالة 3: حل CAPTCHA وصفحات التحدي

المشكلة: حتى مع التهيئة الصحيحة، تظهر أحيانًا PerimeterX أو Akamai صفحات تحدي أو CAPTCHA للتحقق الإضافي.

الحل: عادةً ما تقوم صفحات تحدي PerimeterX بتنفيذ إجراءات إضافية للتحقق من المستخدم. يتطلب تجاوز هذه التحديات استخدام تقنيات أتمتة متقدمة، مثل محاكاة السلوك البشري، أو استخدام خدمات خارجية لحل CAPTCHA.

```