支持使用 query_selector 限制截图区域

This commit is contained in:
xtaodada 2022-10-08 09:53:22 +08:00
parent 95b1381975
commit 9b10e382b0
Signed by: xtaodada
GPG Key ID: 4CBB3F4FA8C85659
2 changed files with 14 additions and 2 deletions

View File

@ -54,7 +54,8 @@ class TemplateService:
return html return html
async def render(self, template_path: str, template_name: str, template_data: dict, async def render(self, template_path: str, template_name: str, template_data: dict,
viewport: ViewportSize, full_page: bool = True, evaluate: Optional[str] = None) -> bytes: viewport: ViewportSize = None, full_page: bool = True, evaluate: Optional[str] = None,
query_selector: str = None) -> bytes:
"""模板渲染成图片 """模板渲染成图片
:param template_path: 模板目录 :param template_path: 模板目录
:param template_name: 模板文件名 :param template_name: 模板文件名
@ -62,6 +63,7 @@ class TemplateService:
:param viewport: 截图大小 :param viewport: 截图大小
:param full_page: 是否长截图 :param full_page: 是否长截图
:param evaluate: 页面加载后运行的 js :param evaluate: 页面加载后运行的 js
:param query_selector: 截图选择器
:return: :return:
""" """
start_time = time.time() start_time = time.time()
@ -76,7 +78,16 @@ class TemplateService:
await page.set_content(html, wait_until="networkidle") await page.set_content(html, wait_until="networkidle")
if evaluate: if evaluate:
await page.evaluate(evaluate) await page.evaluate(evaluate)
png_data = await page.screenshot(full_page=full_page) clip = None
if query_selector:
try:
card = await page.query_selector(query_selector)
assert card
clip = await card.bounding_box()
assert clip
except AssertionError:
logger.warning(f"未找到 {query_selector} 元素")
png_data = await page.screenshot(clip=clip, full_page=full_page)
await page.close() await page.close()
logger.debug(f"{template_name} 图片渲染使用了 {str(time.time() - start_time)}") logger.debug(f"{template_name} 图片渲染使用了 {str(time.time() - start_time)}")
return png_data return png_data

View File

@ -278,6 +278,7 @@ class RenderTemplate:
data, data,
{"width": 950, "height": 1080}, {"width": 950, "height": 1080},
full_page=True, full_page=True,
query_selector=".text-neutral-200"
) )
async def de_stats(self) -> List[Tuple[str, Any]]: async def de_stats(self) -> List[Tuple[str, Any]]: