🚸 更新 Chromium 安装逻辑, 添加 Playwright 依赖检查逻辑

This commit is contained in:
BalconyJH 2024-08-12 15:38:37 +08:00
parent da595b8c8e
commit b6fc114a14
No known key found for this signature in database
GPG Key ID: FF602923BD2A1FAF

View File

@ -1,5 +1,10 @@
import os
import sys
from nonebot import get_driver
from playwright.__main__ import main
from playwright.async_api import Browser, Playwright, async_playwright
from zhenxun.configs.config import SYSTEM_PROXY
from zhenxun.services.log import logger
@ -13,6 +18,8 @@ _browser: Browser | None = None
async def start_browser():
global _playwright
global _browser
install()
await check_playwright_env()
_playwright = await async_playwright().start()
_browser = await _playwright.chromium.launch()
@ -33,13 +40,51 @@ def get_browser() -> Browser:
def install():
"""自动安装、更新 Chromium"""
logger.info("正在检查 Chromium 更新")
import sys
from playwright.__main__ import main
def set_env_variables():
os.environ[
"PLAYWRIGHT_DOWNLOAD_HOST"] = "https://npmmirror.com/mirrors/playwright/"
if SYSTEM_PROXY:
os.environ["HTTPS_PROXY"] = SYSTEM_PROXY
sys.argv = ["", "install", "chromium"]
def restore_env_variables():
os.environ.pop("PLAYWRIGHT_DOWNLOAD_HOST", None)
if SYSTEM_PROXY:
os.environ.pop("HTTPS_PROXY", None)
if original_proxy is not None:
os.environ["HTTPS_PROXY"] = original_proxy
def try_install_chromium():
try:
sys.argv = ["", "install", "chromium"]
main()
except SystemExit as e:
return e.code == 0
return False
logger.info("检查 Chromium 更新")
original_proxy = os.environ.get("HTTPS_PROXY")
set_env_variables()
success = try_install_chromium()
if not success:
logger.info("Chromium 更新失败,尝试从原始仓库下载,速度较慢")
os.environ["PLAYWRIGHT_DOWNLOAD_HOST"] = ""
success = try_install_chromium()
restore_env_variables()
if not success:
raise RuntimeError("未知错误Chromium 下载失败")
async def check_playwright_env():
"""检查 Playwright 依赖"""
logger.info("检查 Playwright 依赖")
try:
main()
except SystemExit:
pass
async with async_playwright() as p:
await p.chromium.launch()
except Exception as e:
raise ImportError("加载失败Playwright 依赖不全,") from e