العودة إلى التحديثات
New releaseSep 18, 2026

invisible_playwright v0.20.0

Playwright التي لا تستطيع أنظمة مكافحة الروبوتات رؤيتها، لذا لا توجد اختبارات CAPTCHA: نفس واجهة API، متصفح Firefox بلا واجهة رسومية يتخفى من أنظمة مكافحة الكشف، بصمة غير قابلة للكشف، تجاوز كشف الروبوتات، استخراج بيانات الويب وأتمتة المتصفح باستخدام Python.

مشاركة
invisible_playwright

Playwright يتم اكتشافه بواسطة أنظمة مكافحة البوتات والكابتشا.
هذا الإصدار يعمل على Firefox مضاد للكشف مع بصمة غير قابلة للاكتشاف، ومتوافق مع كود Playwright الحالي لديك.

invisible_playwright - 5/5 detection suites passed

كيف يعمل

تطرح أنظمة مكافحة البوتات سؤالين، ويقيّم reCAPTCHA وhCaptcha وCloudflare Turnstile الإجابات. يجيب invisible_playwright بنعم على كليهما.

1. هل هذا متصفح حقيقي؟ نعم. إنه Firefox، مُعدَّل على مستوى الكود المصدري بلغة C++.

  • تُضبط بصمة المتصفح داخل المحرك نفسه، لا تُحقن في الصفحة: navigator، والشاشة، وGPU/WebGL، والكانفس، والخطوط، والصوت، وWebRTC، والمنطقة الزمنية، والشبكة. سواء كان headless أو headed، القيم نفسها في الحالتين.
  • لا طبقة JS وهمية، ولا تجاوز، ولا خط التحام يمكن قراءته.

2. هل يستخدمه شخص حقيقي؟ نعم. الإجراءات مُحوَّلة إلى سلوك بشري داخل المشغّل.

  • كل نقرة وتمرير وسحب يتبع مسار فأرة طبيعيًا بتوقيت بشري، دون قفز المؤشر.
  • كل إدخال مطابق بايت ببايت لفأرة حقيقية: مصدر إدخال حقيقي، وضغط، وأحداث موثوقة.

التثبيت

pip install invisible-playwright
python -m invisible_playwright fetch      # one-time download, sha256-verified: 240 MB (Windows) / 262 MB (Linux x86_64) / 253 MB (Linux arm64), about 550 MB unpacked

يتطلب Python 3.11 أو أحدث.

المنصات المدعومة: Windows x86_64، Linux x86_64 / arm64.


الاستخدام

بصمة عشوائية لكل جلسة

واجهة Playwright البرمجية، المتزامنة وغير المتزامنة، دون أي تغيير في الكود. نفس الكائنات، ونفس الاستدعاءات، ونفس القيم المُعادة. بعض الأسطح خارج النطاق - التتبع (tracing)، وHAR، وCDP، وسياق طلبات API - وكل واحد منها يرفض بجملة توضح السبب بدلًا من التصرف بشكل خاطئ بصمت. إذا كنت تستخدم 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")   # mouse arcs to the button on a Bezier curve

غير متزامن

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:
    ...   # same GPU, same canvas hash, same audio context, every run

الوكلاء (Proxies)

proxy = {
    "server": "socks5://gate.example.com:1080",
    "username": "user",
    "password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
    ...

المخططات المدعومة: socks5، socks4، http، https. يتم توجيه DNS عبر الوكيل افتراضيًا، دون تسريب محلي.

المنطقة الزمنية

تتبع المنطقة الزمنية للمتصفح الوسيط timezone=:

# default: timezone is auto-derived from the egress IP (proxy egress if a
# proxy is set, otherwise the host's own public IP)
with InvisiblePlaywright(proxy=proxy) as browser:
    ...

# explicit IANA zone always wins, the only way to force a specific zone
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
    ...

تثبيت حقول بصمة محددة

افتراضيًا يأتي كل شيء من seed. لفرض قيم محددة مع بقاء الباقي مشتقًا من الـ seed:

with InvisiblePlaywright(
    seed=42,
    pin={
        "gpu.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)",
        "gpu.vendor":   "Google Inc. (AMD)",
        "screen.width":  2560,
        "screen.height": 1440,
        "hardware.concurrency": 16,
    },
) as browser:
    ...

تثبيت GPU يختار واحدة من الشخصيات المُتحقق منها بدلًا من تعيين نص حر، لأن قيم getParameter البالغ عددها حوالي 81 وقائمة الإضافات ترتبط باسم الـ renderer وأي كاشف يتحقق منها مقابل الاسم. أي اسم لا تحمله المجموعة يُطلق خطأً، ويسرد الخطأ الأسماء المتاحة.

القائمة الكاملة للمفاتيح القابلة للتثبيت، وكيفية تفاعل التثبيت مع مُعيّن بايز، والأنماط الشائعة موجودة في docs/pinning.md.


واجهة سطر الأوامر (CLI)

الأمر المثبَّت هو invisible-playwright، بشرطة. وpython -m invisible_playwright يعمل بنفس الطريقة ولا يحتاج شيئًا في PATH.

invisible-playwright fetch    # download the engine if missing, check every cached
                              # one against the seal, print the path
invisible-playwright version  # wrapper, core and engine versions, and where the
                              # engine is cached

التوثيق والأدلة والمقارنات

إذا كنت تفضّل التوجيه بدلًا من كتابة السكربتات. هذه الصفحة هي المحرك، كمكتبة Python. هناك طريقتان لاستخدامه دون كتابة كود، كلتاهما سطر واحد: من عميل MCP لديك بالفعل (Claude Code، وClaude Desktop، وCursor)، claude mcp add stealth -- uvx aihawk، انظر صفحة خادم MCP؛ أو بواجهة ونموذج مضمّن، لا يحتاج سوى مفتاح OpenRouter، uvx aihawk ui --openrouter-key sk-or-...، انظر AIHawk. نفس المحرك في الأسفل، والثاني عميل للأول.

كل ذلك يُقرأ بشكل أفضل، وقابل للبحث، في الويكي، منظَّمًا في أربعة أقسام بدلًا من قائمة مسطحة واحدة:

  • التوثيق - التثبيت، والتبديل بسطرين من Playwright العادي، وإعداد الوكيل/المنطقة الزمنية، وتثبيت حقول محددة، وواجهة سطر الأوامر.
  • الأدلة - كيف يعمل الكشف فعليًا، في سبع مجموعات: هوية المتصفح، والكانفس/WebGL/الخطوط/ الصوت، والشبكة وWebRTC، وطبقة الأتمتة، ووكلاء الذكاء الاصطناعي، والكاشفات نفسها مشروحة من الكود المصدري، والاختبار.
  • المقارنات - مع Camoufox وPatchright وnodriver وplaywright-stealth، وحجة تفضيل Firefox على Chromium عمومًا.
  • التكاملات - Scrapy وCrawlee وRobot Framework وCodeceptJS ومشغّلات الاختبارات وPlaywright MCP، والأطر التي لا تناسبه، بالاسم.

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

الفئات