ayaka.playwright

浏览器截图

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