import json import logging import os from selenium import webdriver from selenium.webdriver.chrome.options import Options logger = logging.getLogger(__name__) class CustomBrowserContext: def __init__(self, browser, config=None): self.browser = browser self.config = config or {} self.driver = None def create_context(self): chrome_options = Options() if self.config.get("browser_window_size"): chrome_options.add_argument(f"--window-size={self.config['browser_window_size'][0]},{self.config['browser_window_size'][1]}") if self.config.get("disable_security", False): chrome_options.add_argument("--disable-web-security") chrome_options.add_argument("--disable-site-isolation-trials") chrome_options.add_argument("--disable-features=IsolateOrigins,site-per-process") user_agent = ( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " "(KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36" ) chrome_options.add_argument(f"user-agent={user_agent}") self.driver = webdriver.Chrome(options=chrome_options) if self.config.get("cookies_file") and os.path.exists(self.config["cookies_file"]): try: with open(self.config["cookies_file"], "r") as f: cookies = json.load(f) logger.info(f"Loaded {len(cookies)} cookies from {self.config['cookies_file']}") for cookie in cookies: self.driver.add_cookie(cookie) except Exception as e: logger.error(f"Error loading cookies: {e}") try: self.driver.execute_script( """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] }); Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5] }); window.chrome = { runtime: {} }; const originalQuery = window.navigator.permissions.query; window.navigator.permissions.query = (parameters) => ( parameters.name === 'notifications' ? Promise.resolve({ state: Notification.permission }) : originalQuery(parameters) ); """ ) except Exception as e: logger.error(f"Error executing anti-detection scripts: {e}") return self.driver def close(self): if self.driver: try: self.driver.quit() except Exception as e: logger.error(f"Error closing the browser: {e}")