2022-06-18 14:31:44 +08:00
|
|
|
import asyncio
|
2021-11-23 21:44:59 +08:00
|
|
|
from typing import Optional
|
2023-02-18 18:46:54 +08:00
|
|
|
|
|
|
|
|
from nonebot import get_driver
|
2021-11-23 21:44:59 +08:00
|
|
|
from nonebot.log import logger
|
2023-02-18 18:46:54 +08:00
|
|
|
from playwright.async_api import Browser, Playwright, async_playwright
|
|
|
|
|
|
2021-11-23 21:44:59 +08:00
|
|
|
from services.log import logger
|
|
|
|
|
|
2023-02-18 18:46:54 +08:00
|
|
|
driver = get_driver()
|
2021-11-23 21:44:59 +08:00
|
|
|
|
2023-02-18 18:46:54 +08:00
|
|
|
_playwright: Optional[Playwright] = None
|
2021-11-23 21:44:59 +08:00
|
|
|
_browser: Optional[Browser] = None
|
|
|
|
|
|
|
|
|
|
|
2023-02-18 18:46:54 +08:00
|
|
|
@driver.on_startup
|
|
|
|
|
async def start_browser():
|
|
|
|
|
global _playwright
|
2022-04-26 14:45:04 +08:00
|
|
|
global _browser
|
2023-02-18 18:46:54 +08:00
|
|
|
_playwright = await async_playwright().start()
|
|
|
|
|
_browser = await _playwright.chromium.launch()
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
2023-02-18 18:46:54 +08:00
|
|
|
@driver.on_shutdown
|
|
|
|
|
async def shutdown_browser():
|
|
|
|
|
if _browser:
|
|
|
|
|
await _browser.close()
|
|
|
|
|
if _playwright:
|
|
|
|
|
_playwright.stop()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_browser() -> Browser:
|
|
|
|
|
if not _browser:
|
|
|
|
|
raise RuntimeError("playwright is not initalized")
|
|
|
|
|
return _browser
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def install():
|
|
|
|
|
"""自动安装、更新 Chromium"""
|
|
|
|
|
logger.info("正在检查 Chromium 更新")
|
|
|
|
|
import sys
|
2023-02-18 18:46:54 +08:00
|
|
|
|
2021-11-23 21:44:59 +08:00
|
|
|
from playwright.__main__ import main
|
|
|
|
|
|
|
|
|
|
sys.argv = ["", "install", "chromium"]
|
2022-02-19 18:20:19 +08:00
|
|
|
try:
|
|
|
|
|
main()
|
|
|
|
|
except SystemExit:
|
|
|
|
|
pass
|