browser_utils.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from DrissionPage import ChromiumOptions, Chromium
  2. import sys
  3. import os
  4. import logging
  5. class BrowserManager:
  6. def __init__(self):
  7. self.browser = None
  8. def init_browser(self):
  9. """初始化浏览器"""
  10. co = self._get_browser_options()
  11. self.browser = Chromium(co)
  12. return self.browser
  13. def _get_browser_options(self):
  14. """获取浏览器配置"""
  15. co = ChromiumOptions()
  16. try:
  17. extension_path = self._get_extension_path()
  18. co.add_extension(extension_path)
  19. except FileNotFoundError as e:
  20. logging.warning(f"警告: {e}")
  21. co.set_user_agent(
  22. "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.92 Safari/537.36"
  23. )
  24. co.set_pref("credentials_enable_service", False)
  25. co.set_argument("--hide-crash-restore-bubble")
  26. co.auto_port()
  27. # 只在开发环境启用无头模式
  28. if os.environ.get("ENV") == "development":
  29. co.headless(True)
  30. else:
  31. co.headless(False)
  32. # Mac 系统特殊处理
  33. if sys.platform == "darwin":
  34. co.set_argument("--no-sandbox")
  35. co.set_argument("--disable-gpu")
  36. return co
  37. def _get_extension_path(self):
  38. """获取插件路径"""
  39. root_dir = os.getcwd()
  40. extension_path = os.path.join(root_dir, "turnstilePatch")
  41. if hasattr(sys, "_MEIPASS"):
  42. extension_path = os.path.join(sys._MEIPASS, "turnstilePatch")
  43. if not os.path.exists(extension_path):
  44. raise FileNotFoundError(f"插件不存在: {extension_path}")
  45. return extension_path
  46. def quit(self):
  47. """关闭浏览器"""
  48. if self.browser:
  49. try:
  50. self.browser.quit()
  51. except:
  52. pass