Python Playwright Extensions - A comprehensive wrapper around Playwright for browser automation.
# Install dependencies
pip install -r requirements.txt
# Install Playwright browsers
playwright install --with-depsfrom playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
browser.close()from ext_playwright import ExtPlaywrightOption, BrowserTypeNames
from ext_browser_context import ExtBrowserContext
# Create options
ext_pw_opt = ExtPlaywrightOption(
headless=False,
browser_type=BrowserTypeNames.Chrome
)
# Create browser context
ext_bc = ExtBrowserContext.new_ext_browser_context(ext_pw_opt)
# Get or create page
ext_page = ext_bc.get_or_new_ext_page()
# Navigate to page
ext_page.navigate_with_loaded_state("https://example.com")
# Use extended locator
ext_locator = ext_page.ext_locator("h1")
print(f"H1 text: {ext_locator.must_inner_text()}")
# Close
ext_page.close_all()from chrome import start_chrome, shutdown_chrome
# Start Chrome with debug port
chrome_process, user_data_dir = start_chrome(9222)
# ... do something ...
# Shutdown Chrome
shutdown_chrome(chrome_process, "http://localhost:9222")- Chrome Browser Management: Start, stop, and manage Chrome browsers with CDP support
- Extended Page Operations: Enhanced page navigation, waiting, and interaction methods
- Extended Locator Operations: Advanced element locating and interaction capabilities
- Browser Context Management: Create and manage browser contexts with persistent sessions
- Debugging Capabilities: Connect to existing Chrome instances for debugging
py-playwright/
├── __init__.py # Package initialization
├── chrome.py # Chrome browser management
├── ext_playwright.py # Playwright configuration and options
├── ext_browser_context.py # Extended browser context
├── ext_page.py # Extended page operations
├── ext_locator.py # Extended locator operations
├── test_chrome.py # Chrome tests
├── scripts/
│ └── shell/
│ ├── install.sh # Install browsers
│ ├── driver.sh # Download driver
│ ├── browsers.sh # Install browsers
│ └── chrome.sh # Start Chrome with debug port
└── examples/
├── basic_usage.py # Basic usage examples
├── using_ext_classes.py # Using extension classes
└── chrome_management.py # Chrome management examples
Start Chrome browser with remote debugging port.
Parameters:
debug_port: Remote debugging port (default: 0, auto-detect)
Returns:
- Tuple of (chrome_process, user_data_dir)
Shutdown Chrome browser gracefully.
Parameters:
process: Chrome process objectbase_url: CDP base URL
Configuration options for extended Playwright.
Attributes:
skip_install_browsers: Skip browser installationheadless: Run in headless modebrowser_type: Browser type (chrome/firefox/webkit)channel: Browser channeldriver_directory: Driver directory pathbrowser_path: Browser executable pathuser_data_dir: User data directoryremote_debugging_host: Remote debugging hostremote_debugging_port: Remote debugging port
Extended browser context with enhanced page management.
Methods:
new_debug_ext_browser_context(): Create debug mode contextconnect_debug_ext_browser_context(): Connect to existing Chromenew_ext_browser_context(): Create new browser contextget_or_new_ext_page(): Get or create pagenew_ext_page(): Create new pageclose(): Close browser context
Extended page with enhanced operations.
Methods:
navigate_with_loaded_state(url: str): Navigate and wait for loadnavigate(url: str, wait_until: str): Navigate to URLreload_with_loaded_state(): Reload and wait for loadwait_for_load_state_load(): Wait for load statewait_for_dom_content_loaded(): Wait for DOM content loadedwait_for_selector_state_visible(selector: str): Wait for selector visiblerandom_wait_short(): Random short wait (100-1000ms)random_wait_middle(): Random medium wait (3000-6000ms)random_wait_long(): Random long wait (10000-20000ms)expect_response_text(url_or_predicate: str, cb: Callable) -> str: Wait for responsehtml_content() -> str: Get HTML contentext_locator(*selectors) -> ExtLocator: Create extended locatormust_inner_text(*selectors) -> str: Get inner textmust_text_content(*selectors) -> str: Get text contentexists(selector: str) -> bool: Check if element existsclick(selector: str): Click elementsuspend(): Suspend page operationscontinue_page(): Continue page operations
Extended locator with enhanced element operations.
Methods:
ext_locator(selector: str) -> ExtLocator: Create child locatorexists() -> bool: Check if element existsmust_inner_text() -> str: Get inner textmust_text_content() -> str: Get text contentmust_get_attribute(attr: str) -> str: Get attribute valueext_all() -> List[ExtLocator]: Get all matching elementsmust_all_inner_texts() -> List[str]: Get all inner textsmust_all_text_contents() -> List[str]: Get all text contentsmust_all_get_attributes(attr: str) -> List[str]: Get all attribute valuesmust_click(): Click elementhas_class(class_name: str) -> bool: Check if has class
bash scripts/shell/install.shbash scripts/shell/driver.shbash scripts/shell/chrome.sh# Run tests
pytest test_chrome.py
# Or run directly
python test_chrome.pySee the examples/ directory for more usage examples:
basic_usage.py: Basic Playwright usageusing_ext_classes.py: Using extension classeschrome_management.py: Chrome browser management
This project is licensed under the MIT License.