
مجموعة من الترقيعات (patches) لـ puppeteer و playwright لتجنب اكتشاف الأتمتة والتسريبات. تساعد في تجنب صفحات CAPTCHA الخاصة بـ Cloudflare و DataDome. سهلة الترقيع/إلغاء الترقيع، ويمكن تمكينها/تعطيلها عند الطلب.
يحتوي هذا المستودع على تصحيحات لتحسين مكتبات أتمتة الويب الشائعة. على وجه التحديد، يستهدف حزمتي puppeteer و playwright.
لا يمكن تعديل بعض جوانب مكتبات الأتمتة أو سلوك المتصفح من خلال الإعدادات أو مفاتيح سطر الأوامر. لذلك، نصلح هذه المشكلات عن طريق تصحيح الكود المصدري للمكتبة. على الرغم من أن هذا النهج هش وقد يتعطل مع تغيّر الكود المصدري للمكتبات بمرور الوقت، فإن الهدف هو الحفاظ على هذا المستودع بمساعدة المجتمع لإبقاء التصحيحات محدثة.
تعمل Puppeteer و Playwright افتراضيًا مع بعض التسريبات الكبيرة التي يسهل اكتشافها. لا يهم مدى جودة بروكسياتك، وبصماتك الرقمية، ونصوص سلوكياتك؛ إذا لم تكن قد طبّقت التصحيح، فأنت مجرد علم أحمر كبير لأي موقع رئيسي.
🕵️ يمكنك بسهولة اختبار إعداد الأتمتة لديك ضد تقنيات الكشف الحديثة الرئيسية باستخدام rebrowser-bot-detector (المصادر والتفاصيل)
| قبل التصحيحات 👎 | بعد التصحيحات 👍 |
|---|---|
![]() | ![]() |
إذا كنت لا تريد العبث بالتصحيحات وجميع الأخطاء المحتملة، فهناك حل جاهز لك. هذه الحزم طبّقت ببساطة rebrowser-patches فوق الكود الأصلي، لا أكثر.
Puppeteer: rebrowser-puppeteer (المصدر) و rebrowser-puppeteer-core (المصدر)
Playwright (Node.js): rebrowser-playwright (المصدر) و rebrowser-playwright-core (المصدر)
Playwright (Python): rebrowser-playwright (المصدر)
أسهل طريقة لبدء استخدامه هي تعديل package.json لاستخدام الحزم الجديدة مع الإبقاء على الاسم القديم كاسم مستعار. بهذه الطريقة، لن تحتاج إلى تغيير أي كود مصدري في الأتمتة الخاصة بك. إليك كيفية القيام بذلك:
package.json واستبدل "puppeteer": "^23.3.1" و "puppeteer-core": "^23.3.1" بـ "puppeteer": "npm:rebrowser-puppeteer@^23.3.1" و "puppeteer-core": "npm:rebrowser-puppeteer-core@^23.3.1". ملاحظة: 23.3.1 مجرد مثال، تحقق من أحدث إصدار على npm.npm install (أو yarn install)طريقة أخرى هي استخدام الحزم الجديدة فعليًا بدلاً من الحزمة الأصلية. إليك الخطوات التي يجب اتباعها:
package.json واستبدل حزمتي puppeteer و puppeteer-core بحزمتي rebrowser-puppeteer و rebrowser-puppeteer-core. لا تغيّر إصدارات الحزم، فقط استبدل الأسماء.npm install (أو yarn install)puppeteer و puppeteer-core واستبدله بـ rebrowser-puppeteer و rebrowser-puppeteer-core🚀 هذا كل شيء! فقط قم بزيارة صفحة rebrowser-bot-detector واختبر متصفحك المُصحَّح.
هدفنا هو الحفاظ على حزم البديل الجاهز هذه ودعمها بأحدث الإصدارات، لكننا نركّز بشكل أساسي على الإصدارات الحديثة. لذا إذا كنت ما زلت تستخدم puppeteer 13.3.7 من أوائل التسعينيات، فقد حان الوقت للترقية. هناك احتمال كبير ألا يكسر ذلك أي شيء حقًا لأن الواجهة البرمجية (API) مستقرة إلى حد كبير بمرور الوقت.
Runtime.Enableتعتمد مكتبات الأتمتة الشائعة على أمر CDP Runtime.Enable، الذي يسمح باستقبال الأحداث من نطاق Runtime.. وهذا أمر بالغ الأهمية لإدارة سياقات التنفيذ المستخدمة لتقييم JavaScript في الصفحات، وهي ميزة أساسية لأي عملية أتمتة.
ومع ذلك، هناك تقنية تكتشف استخدام هذا الأمر، مما يكشف أن المتصفح خاضع لبرنامج أتمتة مثل Puppeteer أو Playwright. هذه التقنية تُستخدم من قبل جميع برامج مكافحة البوتات الرئيسية مثل Cloudflare و DataDome وغيرها.
لقد أعددنا مقالًا كاملًا عن تحقيقنا حول هذا التسريب، يمكنك قراءته في مدونتنا.
لمزيد من التفاصيل حول هذه التقنية، اقرأ تدوينة DataDome: كيف تؤثر ميزة Headless Chrome الجديدة وإشارة CDP على اكتشاف البوتات.
باختصار، إنها بضعة أسطر من JavaScript في الصفحة تُستدعى تلقائيًا إذا تم استخدام Runtime.Enable.
يعمل إصلاحنا على تعطيل أمر Runtime.Enable التلقائي في كل إطار. بدلاً من ذلك، نقوم يدويًا بإنشاء سياقات بمعرّفات غير معروفة عند إنشاء إطار. ثم عندما يحتاج كود إلى التنفيذ، هناك عدة طرق للحصول على معرّف السياق.
🟢 الإيجابيات: النهج الأمثل الذي يحافظ على الوصول إلى العالم الرئيسي ويعمل مع web workers و iframes. لا تحتاج إلى تغيير أي شيء في قاعدة الكود الحالية لديك.
🔴 السلبيات: لم يتم اكتشاف أي منها حتى الآن.
Page.createIsolatedWorld وحفظ معرّفه.🟢 الإيجابيات: سيتم تنفيذ جميع أكوادك في عالم معزول منفصل، مما يمنع نصوص الصفحة من اكتشاف تغييراتك عبر MutationObserver والتقنيات الأخرى.
🔴 السلبيات: لن تتمكن من الوصول إلى متغيرات وكود السياق الرئيسي. على الرغم من أن هذا ضروري لبعض حالات الاستخدام، فإن السياق المعزول يعمل بشكل جيد عمومًا في معظم السيناريوهات. أيضًا، لا تسمح web workers بإنشاء عوالم جديدة، لذا لا يمكنك تنفيذ الكود الخاص بك داخل worker. هذه حالة استخدام متخصصة ولكنها قد تهم في بعض المواقف. يوجد حل بديل لهذه المشكلة، يرجى قراءة كيفية الوصول إلى كائنات السياق الرئيسي من السياق المعزول في Puppeteer و Playwright.
Runtime.Enable ثم استدعاء Runtime.Disable فورًا.يؤدي هذا إلى تشغيل أحداث Runtime.executionContextCreated، مما يتيح لنا التقاط معرّف السياق الصحيح.
🟢 الإيجابيات: ستحصل على وصول كامل إلى السياق الرئيسي.
🔴 السلبيات: هناك احتمال ضئيل أنه خلال هذه الفترة الزمنية القصيرة، ستستدعي الصفحة كودًا يؤدي إلى التسريب. الخطر منخفض، لأن كود الكشف يُستدعى عادةً أثناء إجراءات محددة مثل صفحات CAPTCHA أو نماذج تسجيل الدخول/التسجيل، وعادةً بعد تحميل الصفحة مباشرةً. منطق عملك يُستدعى عادةً بعد ذلك بقليل.
🎉 تُظهر اختباراتنا أن جميع هذه الأساليب غير قابلة للاكتشاف حاليًا بواسطة Cloudflare أو DataDome.
ملاحظة: يمكنك تغيير إعدادات هذا التصحيح أثناء التشغيل باستخدام متغير بيئة. يتيح لك ذلك التبديل بسهولة بين الإصدارات المُصحَّحة وغير المُصحَّحة بناءً على منطق عملك.
REBROWSER_PATCHES_RUNTIME_FIX_MODE=addBinding — تقنية addBinding (الافتراضية)REBROWSER_PATCHES_RUNTIME_FIX_MODE=alwaysIsolated — تشغيل جميع النصوص دائمًا في سياق معزولREBROWSER_PATCHES_RUNTIME_FIX_MODE=enableDisable — استخدام تقنية Enable/DisableREBROWSER_PATCHES_RUNTIME_FIX_MODE=0 — تعطيل إصلاح هذا التسريب تمامًاREBROWSER_PATCHES_DEBUG=1 — تفعيل بعض رسائل التصحيحتذكر أنه يمكنك ضبط هذه المتغيرات بطرق مختلفة، على سبيل المثال، في الكود:
process.env.REBROWSER_PATCHES_RUNTIME_FIX_MODE = "alwaysIsolated"
أو في سطر الأوامر:
REBROWSER_PATCHES_RUNTIME_FIX_MODE=alwaysIsolated node app.js