utils/browser.py (40 lines of code) (raw):

import logging from playwright.async_api import async_playwright import os # Configure logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') # Set up browser async def start_browser(headless=False, persistent=False, data_dir=None, launch_args=None, slow_mo=None, **kwargs): """ Start a browser instance with the given parameters. :param headless: Boolean to specify if the browser should run in headless mode. :param persistent: Boolean to specify if the browser context should be persistent. :param data_dir: Directory to store browser data for persistent context. :param launch_args: List of arguments to pass to the browser instance. :param slow_mo: Slow down the browser operations by the specified amount of milliseconds. :return: A tuple of (context, page, playwright). """ # Override provided launch arguments and set proxy launch_args = [ "--disable-dev-shm-usage", "--no-sandbox", "--disable-web-security", "--disable-features=IsolateOrigins,site-per-process", "--ignore-certificate-errors" ] proxy = {"server": "http://localhost:8080"} persistent = False # Initialize Playwright playwright = await async_playwright().start() context, page = None, None if persistent: if data_dir is None: data_dir = 'browser_context' if not os.path.exists(data_dir): os.makedirs(data_dir) context = await playwright.chromium.launch_persistent_context( data_dir, headless=headless, args=launch_args, slow_mo=slow_mo, proxy=proxy ) page = context.pages[0] else: browser = await playwright.chromium.launch(headless=headless, args=launch_args, slow_mo=slow_mo, proxy=proxy) context = await browser.new_context(ignore_https_errors=True) page = await context.new_page() logging.info("The browser has been started.") return context, page, playwright # Return playwright to close later # Function to reset browser async def close_browser(context, page, playwright): await page.close() await context.close() await playwright.stop() # Explicitly stop Playwright logging.info("The browser has been stopped.")