diff --git a/browser_login/login.py b/browser_login/login.py index 7045363..294e68c 100644 --- a/browser_login/login.py +++ b/browser_login/login.py @@ -46,17 +46,21 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage: is_docker = os.path.exists('/.dockerenv') if headless or is_docker: co.set_argument("--headless=new") + co.set_argument("--disable-gpu") # Docker 无头模式下强烈建议禁用 GPU,防止 404 和渲染崩溃 + co.set_argument("--disable-blink-features=AutomationControlled") co.set_argument("--no-sandbox") - co.set_argument("--disable-dev-shm-usage") # 增加这个参数防止容器内存不足 + co.set_argument("--disable-dev-shm-usage") # 防止 Docker 共享内存耗尽导致浏览器崩溃 + co.set_argument("--disable-software-rasterizer") # 配合无头模式禁用软件光栅化器 co.set_argument("--window-size=1440,900") if is_docker: - # 在 Docker 生产环境中,为了防止僵尸进程占用固定端口导致 404 握手失败 - # 我们使用 auto_port(True) 让它每次都随机分配一个空闲端口,完全隔离 + # Docker 生产环境:每次启动分配随机端口,避免前一个僵尸进程占用导致 404 co.auto_port(True) + # 指定 Docker 内的 Chromium 路径,确保 DrissionPage 不会去找不存在的默认路径 + co.set_browser_path('/usr/bin/chromium') else: - # 本地开发环境保持使用固定端口,方便复用已经打开的浏览器 + # 本地开发环境:使用固定端口,方便复用 co.set_local_port(port) return ChromiumPage(co)