computers/default/local_playwright.py (38 lines of code) (raw):

from playwright.sync_api import Browser, Page from ..shared.base_playwright import BasePlaywrightComputer class LocalPlaywrightBrowser(BasePlaywrightComputer): """Launches a local Chromium instance using Playwright.""" def __init__(self, headless: bool = False): super().__init__() self.headless = headless def _get_browser_and_page(self) -> tuple[Browser, Page]: width, height = self.get_dimensions() launch_args = [ f"--window-size={width},{height}", "--disable-extensions", "--disable-file-system", ] browser = self._playwright.chromium.launch( chromium_sandbox=True, headless=self.headless, args=launch_args, env={"DISPLAY": ":0"}, ) context = browser.new_context() # Add event listeners for page creation and closure context.on("page", self._handle_new_page) page = context.new_page() page.set_viewport_size({"width": width, "height": height}) page.on("close", self._handle_page_close) page.goto("https://bing.com") return browser, page def _handle_new_page(self, page: Page): """Handle the creation of a new page.""" print("New page created") self._page = page page.on("close", self._handle_page_close) def _handle_page_close(self, page: Page): """Handle the closure of a page.""" print("Page closed") if self._page == page: if self._browser.contexts[0].pages: self._page = self._browser.contexts[0].pages[-1] else: print("Warning: All pages have been closed.") self._page = None