from DrissionPage import ChromiumOptions, ChromiumPage import sys import os import logging class BrowserManager: def __init__(self, noheader=False): self.browser = None self.noheader = noheader def init_browser(self): """初始化浏览器""" co = self._get_browser_options() # 如果设置了 noheader,添加相应的参数 if self.noheader: co.set_argument('--headless=new') self.browser = ChromiumPage(co) return self.browser def _get_browser_options(self): """获取浏览器配置""" co = ChromiumOptions() try: extension_path = self._get_extension_path() co.add_extension(extension_path) extension_block_path = self.get_extension_block() co.add_extension(extension_block_path) extension_recaptcha_path = self.get_extension_recaptcha() co.add_extension(extension_recaptcha_path) except FileNotFoundError as e: logging.warning(f"警告: {e}") co.set_user_agent( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.92 Safari/537.36" ) co.set_pref("credentials_enable_service", False) co.set_argument("--hide-crash-restore-bubble") co.auto_port() # Mac 系统特殊处理 if sys.platform == "darwin": co.set_argument("--no-sandbox") co.set_argument("--disable-gpu") return co def _get_extension_path(self): """获取插件路径""" root_dir = os.getcwd() extension_path = os.path.join(root_dir, "turnstilePatch") if hasattr(sys, "_MEIPASS"): extension_path = os.path.join(sys._MEIPASS, "turnstilePatch") if not os.path.exists(extension_path): raise FileNotFoundError(f"插件不存在: {extension_path}") return extension_path def get_extension_block(self): """获取插件路径""" root_dir = os.getcwd() extension_path = os.path.join(root_dir, "uBlock0.chromium") if hasattr(sys, "_MEIPASS"): extension_path = os.path.join(sys._MEIPASS, "uBlock0.chromium") if not os.path.exists(extension_path): raise FileNotFoundError(f"插件不存在: {extension_path}") return extension_path def get_extension_recaptcha(self): """获取插件路径""" root_dir = os.getcwd() extension_path = os.path.join(root_dir, "recaptchaPatch") if hasattr(sys, "_MEIPASS"): extension_path = os.path.join(sys._MEIPASS, "recaptchaPatch") if not os.path.exists(extension_path): raise FileNotFoundError(f"插件不存在: {extension_path}") return extension_path def quit(self): """关闭浏览器""" if self.browser: try: self.browser.quit() except: pass