mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-07-12 02:12:59 +08:00
stop playwright when finish
This commit is contained in:
parent
4aeff4ad95
commit
fcb12b93ef
@ -12,7 +12,7 @@ import nonebot
|
|||||||
from nonebot.adapters.cqhttp.message import MessageSegment
|
from nonebot.adapters.cqhttp.message import MessageSegment
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from playwright._impl._driver import compute_driver_executable
|
from playwright._impl._driver import compute_driver_executable
|
||||||
from playwright.async_api import Browser, Page, async_playwright
|
from playwright.async_api import Browser, Page, async_playwright, Playwright
|
||||||
|
|
||||||
from .plugin_config import plugin_config
|
from .plugin_config import plugin_config
|
||||||
|
|
||||||
@ -40,8 +40,7 @@ class Render(metaclass=Singleton):
|
|||||||
self.interval_log = ''
|
self.interval_log = ''
|
||||||
self.remote_browser = False
|
self.remote_browser = False
|
||||||
|
|
||||||
async def get_browser(self) -> Browser:
|
async def get_browser(self, playwright: Playwright) -> Browser:
|
||||||
playwright = await async_playwright().start()
|
|
||||||
if plugin_config.bison_browser:
|
if plugin_config.bison_browser:
|
||||||
if plugin_config.bison_browser.startswith('local:'):
|
if plugin_config.bison_browser.startswith('local:'):
|
||||||
path = plugin_config.bison_browser.split('local:', 1)[1]
|
path = plugin_config.bison_browser.split('local:', 1)[1]
|
||||||
@ -81,34 +80,35 @@ class Render(metaclass=Singleton):
|
|||||||
async def do_render(self, url: str, viewport: Optional[dict] = None, target: Optional[str] = None,
|
async def do_render(self, url: str, viewport: Optional[dict] = None, target: Optional[str] = None,
|
||||||
operation: Optional[Callable[[Page], Awaitable[None]]] = None) -> Optional[bytes]:
|
operation: Optional[Callable[[Page], Awaitable[None]]] = None) -> Optional[bytes]:
|
||||||
async with self.lock:
|
async with self.lock:
|
||||||
self.browser = await self.get_browser()
|
async with async_playwright() as playwright:
|
||||||
self._inter_log('open browser')
|
self.browser = await self.get_browser(playwright)
|
||||||
if viewport:
|
self._inter_log('open browser')
|
||||||
constext = await self.browser.new_context(
|
if viewport:
|
||||||
viewport={'width': viewport['width'], 'height': viewport['height']},
|
constext = await self.browser.new_context(
|
||||||
device_scale_factor=viewport.get('deviceScaleFactor', 1))
|
viewport={'width': viewport['width'], 'height': viewport['height']},
|
||||||
page = await constext.new_page()
|
device_scale_factor=viewport.get('deviceScaleFactor', 1))
|
||||||
else:
|
page = await constext.new_page()
|
||||||
page = await self.browser.new_page()
|
else:
|
||||||
if operation:
|
page = await self.browser.new_page()
|
||||||
await operation(page)
|
if operation:
|
||||||
else:
|
await operation(page)
|
||||||
await page.goto(url)
|
else:
|
||||||
self._inter_log('open page')
|
await page.goto(url)
|
||||||
if target:
|
self._inter_log('open page')
|
||||||
target_ele = page.locator(target)
|
if target:
|
||||||
if not target_ele:
|
target_ele = page.locator(target)
|
||||||
return None
|
if not target_ele:
|
||||||
data = await target_ele.screenshot(type='jpeg')
|
return None
|
||||||
else:
|
data = await target_ele.screenshot(type='jpeg')
|
||||||
data = await page.screenshot(type='jpeg')
|
else:
|
||||||
self._inter_log('screenshot')
|
data = await page.screenshot(type='jpeg')
|
||||||
await page.close()
|
self._inter_log('screenshot')
|
||||||
self._inter_log('close page')
|
await page.close()
|
||||||
await self.close_browser()
|
self._inter_log('close page')
|
||||||
self._inter_log('close browser')
|
await self.close_browser()
|
||||||
assert(isinstance(data, bytes))
|
self._inter_log('close browser')
|
||||||
return data
|
assert(isinstance(data, bytes))
|
||||||
|
return data
|
||||||
|
|
||||||
async def text_to_pic(self, text: str) -> Optional[bytes]:
|
async def text_to_pic(self, text: str) -> Optional[bytes]:
|
||||||
lines = text.split('\n')
|
lines = text.split('\n')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user