How oss-invisible/playwright works
invisible_playwright wraps Playwright’s sync and async APIs around a patched Firefox engine. A user creates a seeded or randomized session, the package resolves and validates the engine, and Playwright commands travel through its Juggler protocol to Firefox; humanized pointer input and engine-level fingerprinting shape browser behavior. The README also documents verified engine fetching, proxies/timezone handling, and a WebSocket server for remote clients. Edges reflect README statements and shown source references; unsampled implementation details are not asserted.
Main entry points: launcher.py Browser Launcher · _engine.py Engine Resolver · transport.py Protocol Transport · __init__.py InvisiblePlaywright
Components 22
Public API
- InvisiblePlaywright
src/invisible_playwright/__init__.py - Sync API
src/invisible_playwright/_pw/sync_api/_context_manager.py - Async API
src/invisible_playwright/_pw/async_api/_context_manager.py
Session Runtime
- Browser Launcher
src/invisible_playwright/launcher.py - Session Setup
src/invisible_playwright/_session.py - Engine Resolver
src/invisible_playwright/_engine.py
Playwright Protocol
- Protocol Connection
src/invisible_playwright/_pw/_impl/_connection.py - Browser Context
src/invisible_playwright/_pw/_impl/_browser_context.py - Page Automation
src/invisible_playwright/_pw/_impl/_page.py - Frame Automation
src/invisible_playwright/_pw/_impl/_frame.py - API Data Types
src/invisible_playwright/_pw/_impl/_api_structures.py - Juggler Dispatcher
src/invisible_playwright/_juggler/dispatcher.py - Juggler Server
src/invisible_playwright/_juggler/server.py - Protocol Transport
src/invisible_playwright/_juggler/transport.py
Fingerprint and Input
- Engine Fingerprint
src/invisible_playwright/_engine.py - Geo and Timezone
src/invisible_playwright/_geo.py - Humanized Cursor
src/invisible_playwright/_cursor.py - Pointer Actions
src/invisible_playwright/_juggler/pointer.py
Remote Browser
- Remote Server API
src/invisible_playwright/_juggler/remote.py
Other components
- Automation User
- Patched Firefox
- Playwright Client
Connections 31
- Automation User → InvisiblePlaywright: creates session
README.md - Automation User → Sync API: uses sync
README.md - Automation User → Async API: uses async
README.md - InvisiblePlaywright → Browser Launcher: launches
src/invisible_playwright/__init__.py - InvisiblePlaywright → Engine Resolver: resolves engine
src/invisible_playwright/__init__.py - InvisiblePlaywright → Remote Server API: exports server
src/invisible_playwright/__init__.py - Sync API → Protocol Connection: creates connection
src/invisible_playwright/_pw/sync_api/_context_manager.py - Sync API → Protocol Transport: uses transport
src/invisible_playwright/_pw/sync_api/_context_manager.py - Async API → Protocol Connection: creates connection
src/invisible_playwright/_pw/async_api/_context_manager.py - Async API → Protocol Transport: uses transport
src/invisible_playwright/_pw/async_api/_context_manager.py - Browser Launcher → Session Setup: starts session
src/invisible_playwright/launcher.py - Browser Launcher → Humanized Cursor: configures input
src/invisible_playwright/launcher.py - Browser Launcher → Engine Resolver: resolves binary
src/invisible_playwright/launcher.py - Session Setup → Engine Resolver: validates engine
src/invisible_playwright/_session.py - Session Setup → Juggler Server: starts protocol
src/invisible_playwright/_session.py - Session Setup → Humanized Cursor: uses cursor
src/invisible_playwright/_session.py - Engine Resolver → Patched Firefox: selects binary
src/invisible_playwright/_engine.py - Engine Resolver → Engine Fingerprint: checks seal
src/invisible_playwright/_engine.py - Protocol Connection → Protocol Transport: sends messages
src/invisible_playwright/_pw/_impl/_connection.py - Protocol Connection → Browser Context: dispatches objects
src/invisible_playwright/_pw/_impl/_connection.py - Browser Context → Page Automation: creates pages
src/invisible_playwright/_pw/_impl/_browser_context.py - Page Automation → Frame Automation: delegates actions
src/invisible_playwright/_pw/_impl/_page.py - Page Automation → API Data Types: uses types
src/invisible_playwright/_pw/_impl/_page.py - Juggler Dispatcher → Pointer Actions: dispatches actions
src/invisible_playwright/_juggler/dispatcher.py - Pointer Actions → Humanized Cursor: uses motion
src/invisible_playwright/_juggler/pointer.py - Protocol Transport → Juggler Server: carries protocol
src/invisible_playwright/_juggler/transport.py - Juggler Server → Patched Firefox: controls browser
README.md - Remote Server API → Browser Launcher: starts browser
src/invisible_playwright/_juggler/remote.py - Playwright Client → Remote Server API: connects by WebSocket
README.md - Remote Server API → Protocol Transport: serves protocol
src/invisible_playwright/_juggler/remote.py - Automation User → Geo and Timezone: sets timezone
README.md