"""
This type stub file was generated by pyright.
"""
from abc import ABC, abstractmethod
from typing import Any, Callable, Dict, List, Optional
from playwright.async_api import Page
from patchright.async_api import Page as UndetectedPage
"""
Browser adapter for Crawl4AI to support both Playwright and undetected browsers
with minimal changes to existing codebase.
"""
class BrowserAdapter(ABC):
"""Abstract adapter for browser-specific operations"""
@abstractmethod
async def evaluate(self, page: Page, expression: str, arg: Any = ...) -> Any:
"""Execute JavaScript in the page"""
...
@abstractmethod
async def setup_console_capture(self, page: Page, captured_console: List[Dict]) -> Optional[Callable]:
"""Setup console message capturing, returns handler function if needed"""
...
@abstractmethod
async def setup_error_capture(self, page: Page, captured_console: List[Dict]) -> Optional[Callable]:
"""Setup error capturing, returns handler function if needed"""
...
@abstractmethod
async def retrieve_console_messages(self, page: Page) -> List[Dict]:
"""Retrieve captured console messages (for undetected browsers)"""
...
@abstractmethod
async def cleanup_console_capture(self, page: Page, handle_console: Optional[Callable], handle_error: Optional[Callable]): # -> None:
"""Clean up console event listeners"""
...
@abstractmethod
def get_imports(self) -> tuple:
"""Get the appropriate imports for this adapter"""
...
class PlaywrightAdapter(BrowserAdapter):
"""Adapter for standard Playwright"""
async def evaluate(self, page: Page, expression: str, arg: Any = ...) -> Any:
"""Standard Playwright evaluate"""
...
async def setup_console_capture(self, page: Page, captured_console: List[Dict]) -> Optional[Callable]:
"""Setup console capture using Playwright's event system"""
...
async def setup_error_capture(self, page: Page, captured_console: List[Dict]) -> Optional[Callable]:
"""Setup error capture using Playwright's event system"""
...
async def retrieve_console_messages(self, page: Page) -> List[Dict]:
"""Not needed for Playwright - messages are captured via events"""
...
async def cleanup_console_capture(self, page: Page, handle_console: Optional[Callable], handle_error: Optional[Callable]): # -> None:
"""Remove event listeners"""
...
def get_imports(self) -> tuple:
"""Return Playwright imports"""
...
class StealthAdapter(BrowserAdapter):
"""Adapter for Playwright with stealth features using playwright_stealth"""
def __init__(self) -> None:
...
async def apply_stealth(self, page: Page): # -> None:
"""Apply stealth to a page if available"""
...
async def evaluate(self, page: Page, expression: str, arg: Any = ...) -> Any:
"""Standard Playwright evaluate with stealth applied"""
...
async def setup_console_capture(self, page: Page, captured_console: List[Dict]) -> Optional[Callable]:
"""Setup console capture using Playwright's event system with stealth"""
...
async def setup_error_capture(self, page: Page, captured_console: List[Dict]) -> Optional[Callable]:
"""Setup error capture using Playwright's event system"""
...
async def retrieve_console_messages(self, page: Page) -> List[Dict]:
"""Not needed for Playwright - messages are captured via events"""
...
async def cleanup_console_capture(self, page: Page, handle_console: Optional[Callable], handle_error: Optional[Callable]): # -> None:
"""Remove event listeners"""
...
def get_imports(self) -> tuple:
"""Return Playwright imports"""
...
class UndetectedAdapter(BrowserAdapter):
"""Adapter for undetected browser automation with stealth features"""
def __init__(self) -> None:
...
async def evaluate(self, page: UndetectedPage, expression: str, arg: Any = ...) -> Any:
"""Undetected browser evaluate with isolated context"""
...
async def setup_console_capture(self, page: UndetectedPage, captured_console: List[Dict]) -> Optional[Callable]:
"""Setup console capture using JavaScript injection for undetected browsers"""
...
async def setup_error_capture(self, page: UndetectedPage, captured_console: List[Dict]) -> Optional[Callable]:
"""Setup error capture using JavaScript injection for undetected browsers"""
...
async def retrieve_console_messages(self, page: UndetectedPage) -> List[Dict]:
"""Retrieve captured console messages and errors from the page"""
...
async def cleanup_console_capture(self, page: UndetectedPage, handle_console: Optional[Callable], handle_error: Optional[Callable]): # -> List[Dict[Any, Any]]:
"""Clean up for undetected browser - retrieve final messages"""
...
def get_imports(self) -> tuple:
"""Return undetected browser imports"""
...