Spaces:
Runtime error
Runtime error
"""Utilities for the Playwright browser tools.""" | |
from __future__ import annotations | |
import asyncio | |
from typing import TYPE_CHECKING, Any, Coroutine, TypeVar | |
if TYPE_CHECKING: | |
from playwright.async_api import Browser as AsyncBrowser | |
from playwright.async_api import Page as AsyncPage | |
from playwright.sync_api import Browser as SyncBrowser | |
from playwright.sync_api import Page as SyncPage | |
async def aget_current_page(browser: AsyncBrowser) -> AsyncPage: | |
""" | |
Asynchronously get the current page of the browser. | |
Args: | |
browser: The browser (AsyncBrowser) to get the current page from. | |
Returns: | |
AsyncPage: The current page. | |
""" | |
if not browser.contexts: | |
context = await browser.new_context() | |
return await context.new_page() | |
context = browser.contexts[0] # Assuming you're using the default browser context | |
if not context.pages: | |
return await context.new_page() | |
# Assuming the last page in the list is the active one | |
return context.pages[-1] | |
def get_current_page(browser: SyncBrowser) -> SyncPage: | |
""" | |
Get the current page of the browser. | |
Args: | |
browser: The browser to get the current page from. | |
Returns: | |
SyncPage: The current page. | |
""" | |
if not browser.contexts: | |
context = browser.new_context() | |
return context.new_page() | |
context = browser.contexts[0] # Assuming you're using the default browser context | |
if not context.pages: | |
return context.new_page() | |
# Assuming the last page in the list is the active one | |
return context.pages[-1] | |
def create_async_playwright_browser(headless: bool = True) -> AsyncBrowser: | |
""" | |
Create an async playwright browser. | |
Args: | |
headless: Whether to run the browser in headless mode. Defaults to True. | |
Returns: | |
AsyncBrowser: The playwright browser. | |
""" | |
from playwright.async_api import async_playwright | |
browser = run_async(async_playwright().start()) | |
return run_async(browser.chromium.launch(headless=headless)) | |
def create_sync_playwright_browser(headless: bool = True) -> SyncBrowser: | |
""" | |
Create a playwright browser. | |
Args: | |
headless: Whether to run the browser in headless mode. Defaults to True. | |
Returns: | |
SyncBrowser: The playwright browser. | |
""" | |
from playwright.sync_api import sync_playwright | |
browser = sync_playwright().start() | |
return browser.chromium.launch(headless=headless) | |
T = TypeVar("T") | |
def run_async(coro: Coroutine[Any, Any, T]) -> T: | |
"""Run an async coroutine. | |
Args: | |
coro: The coroutine to run. Coroutine[Any, Any, T] | |
Returns: | |
T: The result of the coroutine. | |
""" | |
event_loop = asyncio.get_event_loop() | |
return event_loop.run_until_complete(coro) | |