
invisible_playwright v0.7.2
متصفح تخفٍّ مجاني مضاد للاكتشاف مع Playwright: بصمة Firefox غير مكتشفة في وضع headless. استخراج بيانات عبر Python وتجاوز reCAPTCHA وكشف الروبوتات. مفتوح المصدر.
تخفي متصفح مجاني مضاد للكشف لـ Playwright: بصمة Firefox غير مكتشفة، بواجهة رسومية أو بدونها.
كشط ويب بلغة Python وتجاوز كابتشا. مفتوح المصدر، ويمر بكل اختبارات كشف البوتات.

كيف يعمل
تطرح أنظمة مكافحة البوتات سؤالين، وتقوم reCAPTCHA وhCaptcha وCloudflare Turnstile بتقييم الإجابات. يجيب invisible_playwright بنعم على كليهما.
1. هل هذا متصفح حقيقي؟ نعم. إنه Firefox، مُصحح على مستوى كود C++ المصدر.
- يتم ضبط بصمة المتصفح داخل المحرك، وليس حقنها في الصفحة: navigator، الشاشة، GPU/WebGL، القماش (canvas)، الخطوط، الصوت، WebRTC، المنطقة الزمنية، الشبكة. سواء بواجهة رسومية أو بدونها، نفس القيم في الحالتين.
- لا حيل JavaScript، لا تجاوز، لا فجوة يمكن قراءتها.
2. هل يستخدمه شخص حقيقي؟ نعم. يتم إضفاء الطابع البشري على الإجراءات في السائق (driver).
- كل نقرة وتمرير وسحب يتبع مسار فأرة طبيعيًا بتوقيت بشري، دون مؤشر ينتقل فجأة.
- كل إدخال مطابق بايتًا ببايت لفأرة حقيقية: مصدر إدخال حقيقي، ضغط، أحداث موثوقة.
مدعوم بواجهة Playwright القياسية. التحليل الكامل: feder-cr/firefox_antidetect_patch.
ما زلت ترى كابتشا أو أنظمة مكافحة بوتات؟ السبب هو البروكسي.
بمجرد التعامل مع المتصفح، يتوقف عن كونه المتغير. إذا كنت لا تزال تواجه تحديات، فإن المؤشر لم يعد المتصفح، بل عنوان IP الذي تأتي منه. حوالي 90% من البروكسيات عامة: يمكن لأي شخص استئجار نفس العنوان، لذا فهو معروف مسبقًا ومدرج في قوائم عناوين IP المحظورة التي تفحصها المواقع. متصفح مثالي على عنوان IP معروف لا يزال يخسر.
التثبيت
pip install invisible-playwright
python -m invisible_playwright fetch # تنزيل لمرة واحدة ~238 MB (~544 MB بعد فك الضغط)، تم التحقق منه عبر sha256
الأنظمة المدعومة: Windows x86_64، Linux x86_64 / arm64. لم يعد macOS مدعومًا (توقفت الإصدارات عند firefox-20)؛ على جهاز Mac، يرفض الحزمة الإقلاع برسالة واضحة بدلاً من تنزيل ملف ثنائي لم يعد موجودًا.
الاستخدام
بصمة عشوائية لكل جلسة
متوافق 100% مع Playwright - متزامن وغير متزامن، جميع الطرق، صفر تغييرات في الواجهة البرمجية. إذا كنت تستخدم Playwright بالفعل، فالتحويل سطران:
- from playwright.sync_api import sync_playwright
- with sync_playwright() as p:
- browser = p.firefox.launch()
+ from invisible_playwright import InvisiblePlaywright
+ with InvisiblePlaywright() as browser:
كل جلسة تحصل على بصمة مميزة (GPU، صوت، خطوط، شاشة، ~200 حقل) وحركة فأرة بمنحنيات Bezier.
متزامن
from invisible_playwright import InvisiblePlaywright
with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
page = browser.new_page()
page.goto("https://example.com")
page.click("#submit") # تتحرك الفأرة نحو الزر بمنحنى Bezier
غير متزامن
from invisible_playwright.async_api import InvisiblePlaywright
async with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
page = await browser.new_page()
await page.goto("https://example.com")
await page.click("#submit")
كائن browser هو playwright.sync_api.Browser / playwright.async_api.Browser - كل طريقة في Playwright تعمل كما هي.
سجّل البذرة (seed) لإعادة تشغيل الجلسة:
sf = InvisiblePlaywright()
with sf as browser:
print("seed =", sf.seed)
# ...
بصمة قابلة لإعادة الإنتاج
with InvisiblePlaywright(seed=42) as browser:
... # نفس GPU، نفس تجزئة القماش، نفس سياق الصوت، في كل تشغيل
البروكسيات
proxy = {
"server": "socks5://gate.example.com:1080",
"username": "user",
"password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
...
البروتوكولات المدعومة: socks5، socks4، http، https. يتم توجيه DNS عبر البروكسي افتراضيًا، دون تسريب محلي.
المنطقة الزمنية
تتبع المنطقة الزمنية للمتصفح قيمة timezone=:
# الافتراضي: المنطقة الزمنية مشتقة تلقائيًا من عنوان IP الصادر (عنوان البروكسي الصادر إذا
# تم تعيين بروكسي، وإلا عنوان IP العام للمضيف)
with InvisiblePlaywright(proxy=proxy) as browser:
...
# المنطقة الزمنية الصريحة IANA تفوز دائمًا، وهي الطريقة الوحيدة لفرض منطقة محددة
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
...
تثبيت حقول بصمة محددة
افتراضيًا، كل شيء يأتي من seed. لفرض قيم محددة بينما يبقى الباقي مشتقًا من البذرة:
with InvisiblePlaywright(
seed=42,
pin={
"gpu.renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 Direct3D11)",
"gpu.vendor": "Google Inc. (NVIDIA)",
"screen.width": 2560,
"screen.height": 1440,
"hardware.concurrency": 16,
},
) as browser:
...
القائمة الكاملة للمفاتيح القابلة للتثبيت، وكيفية تفاعل التثبيت مع أداة أخذ العينات البايزية، والأنماط الشائعة موجودة في docs/pinning.md.
واجهة الأوامر (CLI)
الأمر المثبت هو invisible-playwright، بواصلة. python -m invisible_playwright يعمل بشكل مماثل ولا يحتاج شيئًا في PATH.
invisible-playwright fetch # تنزيل المحرك إذا كان مفقودًا، والتحقق من كل نسخة مخزنة
# مؤقتًا مقابل الختم، وطباعة المسار
invisible-playwright version # إصدارات الغلاف والنواة والمحرك، ومكان تخزين
# المحرك مؤقتًا
التوثيق والأدلة والمقارنات
كل ذلك يُقرأ بشكل أفضل، ويمكن البحث فيه، في الويكي، منظمًا في أربعة أقسام بدلاً من قائمة مسطحة واحدة:
- التوثيق - التثبيت، التحويل بسطرين من Playwright العادي، إعداد البروكسي/المنطقة الزمنية، تثبيت حقول محددة، واجهة الأوامر.
- الأدلة - كيف يعمل الكشف فعليًا، في سبع مجموعات: هوية المتصفح، القماش/WebGL/الخطوط/ الصوت، الشبكة وWebRTC، طبقة الأتمتة، وكلاء الذكاء الاصطناعي، وأجهزة الكشف نفسها مشروحة من المصدر، والاختبار.
- المقارنات - ضد Camoufox وPatchright وnodriver وplaywright-stealth، والحجة لصالح Firefox على Chromium عمومًا.
- التكاملات - Scrapy وCrawlee وRobot Framework وCodeceptJS ومشغلات الاختبار وPlaywright MCP و الأطر التي لا يناسبها، بالاسم.
إذا كنت لا تعرف من أين تبدأ: ثلاث طرق لجعل Playwright غير مكتشف هي الخريطة التي تشير إليها معظم الصفحات الأخرى، Playwright مكتشف كبوت على موقع واحد هو ترتيب استكشاف الأخطاء، وnavigator.webdriver ليس المؤشر الذي تظنه يشرح الخاصية الأكثر شهرة في هذا المجال ولماذا لا يمنحك تصحيحها وحدها شيئًا تقريبًا.
- crawl4ai stealth and custom browser engines - browser_type يقبل firefox لكن لا يوجد executable_path؛ أين توجد فجوة المحول
- لماذا تعرض المتصفحات بدون واجهة رسومية خطوطًا مختلفة - الأسباب الثلاثة، مجموعات الخطوط لكل منصة، ولماذا الحل ليس تثبيت المزيد من الخطوط
- كيفية جعل Linux وmacOS يعرضان خطوط Windows الحقيقية - بيان واحد، ثلاثة خلفيات خطوط مقتنعة بعدم سؤال المضيف، وأربع فجوات ما زالت مفتوحة
- measureText وTextMetrics كسطح لبصمة الأصابع - أكثر من عشرة أرقام من استدعاء واحد لا يتطلب موجه إذن، والخطأين اللذين ارتكبناهما في إصلاحه
- ماذا يفعل privacy.resistFingerprinting حقًا - ولماذا يضبطه هذا المشروع على false عمدًا
- متغير ChromeDriver cdc_ - لماذا إعادة تسميته ليست إزالته، وما الذي يعمم عليه ذلك
- ماذا يفحص bot.sannysoft.com فعليًا - صفًا بصف، واختبار القماش داخل iframe الذي لا يقرأه أحد
- كيف يقرر CreepJS أنك تكذب - أربع تقنيات كشف، ولماذا حظر الفحص نفسه يُسجل
- تفضيلات Firefox التي لا تفعل شيئًا بصمت - خمسة أسباب، بدءًا بالسبب الذي كلفنا خطأ حقيقيًا
- ماذا يكتشف BotD فعليًا - عشرون كاشفًا، ولماذا معظمها لا يتعلق بالبوتات أصلًا
- لماذا يتغير معرّف زائر FingerprintJS - إنه تجزئة لـ 41 مكونًا، لذا تحريك واحد يحركها كلها
مشاريع ذات صلة
الجيران مفتوحو المصدر، وما فائدة كل واحد.
في جانب Firefox
- Camoufox - Firefox مضاد للكشف يصحح أيضًا على مستوى C++. يغطي سطحًا أوسع ويشحن قاعدة بصمات خاصة به؛ هذا المشروع يستمد بصمة من بذرة باستخدام أداة أخذ عينات بايزية، لذا رقم واحد يعيد إنتاج جهاز واحد. مقارنة كاملة.
- LibreWolf - فرع من Firefox بإعدادات خصوصية افتراضية. يشحن ملفًا ثنائيًا مهيأً للناس للتصفح به؛ هذا يشحن تصحيحات مصدرية بالإضافة إلى غلاف أتمتة.
- arkenfox/user.js - تقوية Firefox عبر التفضيلات. حيث يكفي تفضيل، استخدمه؛ هذا المشروع يصحح C++ حيث لا يكفي.
في جانب Chromium
- Patchright - فرع مُصحح من Playwright، لذا يقع عمل التخفي في السائق بدلاً من ملف المتصفح الثنائي. مقارنة كاملة.
- nodriver - الخليفة لـ
undetected-chromedriver، يقود Chrome عبر CDP مباشرة ويزيل مؤشرات WebDriver. مقارنة كاملة. - playwright-stealth - تصحيح سكربت تهيئة يُطبق قبل تحميل الصفحة. مطوره نفسه يسميه إثبات مفهوم؛ مقارنة كاملة.
- puppeteer-extra-plugin-stealth - الأصل لهذا السلالة من سكربتات التهيئة، ما زال موصى به على نطاق واسع. آخر التزام جوهري في مستودعه من منتصف 2024؛ ماذا يعني ذلك عمليًا.
- selenium-stealth - نفس النهج على Selenium/CDP. آخر التزام في مستودعه من ديسمبر 2021؛ ماذا يعني ذلك عمليًا.
- pyppeteer - المنفذ غير الرسمي لـ Puppeteer بلغة Python. ملف README الخاص به يقول إنه غير مُدار ويشير إلى
playwright-pythonبدلاً منه؛ ما الذي تدور حوله تلك التوصية فعليًا. - rebrowser-patches - يصلح تسريب
Runtime.enableفي CDP على Chromium، متقاربًا بشكل مستقل مع نفس الإصلاح الذي يستخدمه Patchright تقريبًا. مقارنة كاملة. - fingerprint-suite - يولّد بصمة متماسكة بشبكة بايزية، قريبة من نهج التوليد الخاص بهذا المشروع، ثم يحقنها في صفحة Playwright أو Puppeteer على Chromium أو Firefox. مقارنة كاملة.
- playwright-with-fingerprints - يحقن قيم بصمات مصدرها خدمة مدفوعة عن بُعد، لنظام Windows فقط، مثبت على إصدار محدد من Chromium. مقارنة كاملة.
أي من هذه يناسبك يعتمد على الطبقة التي تقع فيها مشكلتك، وعلى ما إذا كنت بحاجة إلى Firefox أو Chromium. ثلاث طرق لجعل Playwright غير مكتشف يستعرض ما يمكن لكل طبقة الوصول إليه وما لا يمكن، بما في ذلك تكلفة هذا المشروع.
إذا كنت تختار بين المحركات بدلاً من الأدوات، لاحظ أن حصة كبيرة من أطر وكلاء الذكاء الاصطناعي تقود Chromium عبر CDP، وهو ما يحسم السؤال نيابة عنك: وكلاء متصفح الذكاء الاصطناعي والتخفي.
الترخيص
MIT - انظر LICENSE. يتم توزيع ملف Firefox الثنائي المُصحح بموجب MPL-2.0 (ترخيص Firefox الأصلي). تصحيحات C++ ضد mozilla-central التي تنتج ذلك الملف الثنائي موجودة في feder-cr/firefox_antidetect_patch.
إخلاء مسؤولية
هذا المشروع لأغراض تعليمية فقط. يتم توفيره كما هو، دون أي ضمانات. لا أتحمل أي مسؤولية عن كيفية استخدامه. استخدمه على مسؤوليتك الخاصة ووفقًا لقوانين منطقتك.
بُني بواسطة Federico Elia