ayaka.playwright
浏览器截图
1'''浏览器截图''' 2import platform 3from loguru import logger 4from .config import ayaka_root_config 5from .driver import get_driver 6 7driver = get_driver() 8running_on_windows = platform.system() == "Windows" 9fastapi_reload = getattr(driver.config, "fastapi_reload", True) 10 11if ayaka_root_config.use_playwright: 12 from playwright.async_api import async_playwright, Browser, Page, Playwright 13 from contextlib import asynccontextmanager 14 from typing import AsyncIterator 15 16 _browser: Browser = None 17 _playwright: Playwright = None 18 19 @asynccontextmanager 20 async def get_new_page(width=None, high_quality=False, **kwargs) -> AsyncIterator[Page]: 21 ''' 获取playwright Page对象,width设置屏幕宽度 22 23 使用示例: 24 ``` 25 async with get_new_page(width=200) as p: 26 await p.goto(...) 27 await p.screenshot(...) 28 ``` 29 ''' 30 if width: 31 kwargs["viewport"] = {"width": width, "height": width} 32 if high_quality: 33 kwargs["device_scale_factor"] = 2 34 page = await _browser.new_page(**kwargs) 35 yield page 36 await page.close() 37 38 @driver.on_startup 39 async def startup(): 40 print(''' 41 42 playwright init 43 44 ''') 45 if running_on_windows and fastapi_reload: 46 logger.warning("playwright未加载,win平台请关闭fastapi reload功能") 47 return 48 49 global _browser, _playwright 50 _playwright = await async_playwright().start() 51 _browser = await _playwright.chromium.launch() 52 53 @driver.on_shutdown 54 async def shutdown(): 55 # 查bug 怀疑卡死原因是没有正确退出 56 print(''' 57 58 playwright close 59 60 ''') 61 if _browser: 62 await _browser.close() 63 if _playwright: 64 await _playwright.stop() 65else: 66 async def get_new_page(width=None, high_quality=False, **kwargs): 67 logger.warning("ayaka未开启playwright功能")
async def
get_new_page(width=None, high_quality=False, **kwargs):