GithubHelp home page GithubHelp logo

nonebot-plugin-htmlrender's Introduction

nonebot-plugin-htmlrender

  • 通过浏览器渲染图片
  • 可通过查看example参考使用实例
  • 如果有安装浏览器等问题,先查看文档最底下的常见问题再去看 issue 有没有已经存在的

✨ 功能

  • 通过 html 和浏览器生成图片
  • 支持纯文本 markdownjinja2 模板输入
  • 通过 CSS 来控制样式

使用

参考example/plugins/render/init.py

from nonebot import require
require("nonebot_plugin_htmlrender")
# 注意顺序,先require再 from ... import ...
# 注意顺序,先require再 from ... import ...
# 注意顺序,先require再 from ... import ...
from nonebot_plugin_htmlrender import (
    text_to_pic,
    md_to_pic,
    template_to_pic,
    get_new_page,
)
# 注意顺序,先require再 from ... import ...
# 注意顺序,先require再 from ... import ...
# 注意顺序,先require再 from ... import ...

配置

# 默认情况 可不写
htmlrender_browser = "chromium"
# 使用 firefox
htmlrender_browser = "firefox"

# 下载 playwright 代理地址 可不写
htmlrender_download_host = ""

# 浏览器自定代理地址 可不写
htmlrender_proxy_host = "http://127.0.0.1:7890"

# 浏览器 channel 支持以下
# "chrome", "chrome-beta", "chrome-dev", "chrome-canary",
# "msedge", "msedge-beta", "msedge-dev", "msedge-canary"
# 手动编辑可以直接使用系统自带浏览器而不用重新下载 chromium
# 可不写
htmlrender_browser_channel = ""

markdown 转 图片

  • 使用 GitHub-light 样式
  • 支持绝大部分 md 语法
  • 代码高亮
  • latex 数学公式 (感谢@MeetWq
    • 使用 $$...$$ 来输入独立公式
    • 使用 $...$ 来输入行内公式
  • 图片需要使用外部连接并使用html格式 否则文末会超出截图范围
  • 图片可使用 md 语法 路径可为 绝对路径(建议), 或 相对于template_path 的路径

模板 转 图片

  • 使用 jinja2 模板引擎
  • 页面参数可自定义

🌰 栗子

example.md

文本转图片(同时文本里面可以包括 html 图片)

markdown 转图片(同时文本里面可以包括 html 图片)

纯 html 转图片

jinja2 模板转图片

特别感谢

  • MeetWq 提供数学公式支持代码和代码高亮

常见疑难杂症

playwright._impl._api_types.Error: 初次运行时报错

  • 一般为缺少必要的运行环境,如中文字体等

Ubuntu 使用 apt

apt update && apt install -y locales locales-all fonts-noto libnss3-dev libxss1 libasound2 libxrandr2 libatk1.0-0 libgtk-3-0 libgbm-dev libxshmfence1
  • 然后设置 ENV local
LANG zh_CN.UTF-8
LANGUAGE zh_CN.UTF-8
LC_ALL zh_CN.UTF-8

CentOS 使用 yum

  • 小心 CentOS
  • 参考CentOS Dockerfile
  • 添加中文字体库
  • 最佳解决办法
    • 使用 Docker 然后用 Python 镜像 按照上面 Ubuntu 的写 dockerfile

下面这个依赖运行一下 也许就可以用了

dnf install -y alsa-lib at-spi2-atk at-spi2-core atk cairo cups-libs dbus-libs expat flac-libs gdk-pixbuf2 glib2 glibc gtk3 libX11 libXcomposite libXdamage libXext libXfixes libXrandr libXtst libcanberra-gtk3 libdrm libgcc libstdc++ libxcb libxkbcommon libxshmfence libxslt mesa-libgbm nspr nss nss-util pango policycoreutils policycoreutils-python-utils zlib cairo-gobject centos-indexhtml dbus-glib fontconfig freetype gtk2 libXcursor libXi libXrender libXt liberation-fonts-common liberation-sans-fonts libffi mozilla-filesystem p11-kit-trust pipewire-libs harfbuzz-icu libglvnd-glx libglvnd-egl libnotify opus woff2 gstreamer1-plugins-base gstreamer1-plugins-bad-free openjpeg2 libwebp enchant libsecret hyphen libglvnd-gles

nonebot-plugin-htmlrender's People

Contributors

benx1n avatar canxin121 avatar creating3 avatar dbxxx-ac avatar eya46 avatar icexbb avatar justundertaker avatar kexue-z avatar lgc2333 avatar meetwq avatar monsterxcn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

nonebot-plugin-htmlrender's Issues

装Firefox和依赖的时候报错退出

系统:Ubuntu20.04

[INFO] nonebot-plugin-htmlrender-master | 正在安装 firefox
[INFO] nonebot-plugin-htmlrender-master | 正在安装依赖
Installing dependencies...
命中:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease
命中:2 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates InRelease
命中:3 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-backports InRelease
命中:4 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security InRelease
正在读取软件包列表... 完成
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
注意,选中 'libfontconfig1' 而非 'libfontconfig'
fonts-liberation 已经是最新版 (1:1.07.4-11)。
libatk1.0-0 已经是最新版 (2.35.1-1ubuntu2)。
libatspi2.0-0 已经是最新版 (2.36.0-2)。
libcairo-gobject2 已经是最新版 (1.16.0-4ubuntu1)。
libcairo2 已经是最新版 (1.16.0-4ubuntu1)。
libdbus-glib-1-2 已经是最新版 (0.110-5fakssync1)。
libepoxy0 已经是最新版 (1.5.4-1)。
libfontconfig1 已经是最新版 (2.13.1-2ubuntu3)。
libgstreamer1.0-0 已经是最新版 (1.16.2-2)。
libhyphen0 已经是最新版 (2.8.8-7)。
libnotify4 已经是最新版 (0.7.9-1ubuntu2)。
libnspr4 已经是最新版 (2:4.25-1)。
libopus0 已经是最新版 (1.3.1-0ubuntu1)。
libpango-1.0-0 已经是最新版 (1.44.7-2ubuntu4)。
libpangocairo-1.0-0 已经是最新版 (1.44.7-2ubuntu4)。
libpangoft2-1.0-0 已经是最新版 (1.44.7-2ubuntu4)。
libpng16-16 已经是最新版 (1.6.37-2)。
libsoup2.4-1 已经是最新版 (2.70.0-1)。
libvpx6 已经是最新版 (1.8.2-1build1)。
libwayland-client0 已经是最新版 (1.18.0-1)。
libwayland-egl1 已经是最新版 (1.18.0-1)。
libwayland-server0 已经是最新版 (1.18.0-1)。
libwoff1 已经是最新版 (1.0.2-1build2)。
libxcb-shm0 已经是最新版 (1.14-2)。
libxcb1 已经是最新版 (1.14-2)。
libxcomposite1 已经是最新版 (1:0.4.5-1)。
libxcursor1 已经是最新版 (1:1.2.0-2)。
libxdamage1 已经是最新版 (1:1.1.5-2)。
libxext6 已经是最新版 (2:1.3.4-0ubuntu1)。
libxfixes3 已经是最新版 (1:5.0.3-2)。
libxi6 已经是最新版 (2:1.7.10-0ubuntu1)。
libxkbcommon0 已经是最新版 (0.10.0-1)。
libxrandr2 已经是最新版 (2:1.5.2-0ubuntu1)。
libxrender1 已经是最新版 (1:0.9.10-1)。
libxshmfence1 已经是最新版 (1.3-1)。
libxslt1.1 已经是最新版 (1.1.34-4)。
libxt6 已经是最新版 (1:1.1.5-1)。
libxtst6 已经是最新版 (2:1.2.3-1)。
ttf-unifont 已经是最新版 (1:12.0.01-2)。
xfonts-scalable 已经是最新版 (1:1.0.3-1.1)。
fonts-ipafont-gothic 已经是最新版 (00303-18ubuntu1)。
fonts-tlwg-loma-otf 已经是最新版 (1:0.7.1-3)。
fonts-wqy-zenhei 已经是最新版 (0.9.45-7ubuntu1)。
gstreamer1.0-libav 已经是最新版 (1.16.2-2)。
gstreamer1.0-plugins-bad 已经是最新版 (1.16.2-2.1ubuntu1)。
libenchant1c2a 已经是最新版 (1.6.0-11.3build1)。
ttf-ubuntu-font-family 已经是最新版 (1:0.83-4ubuntu1)。
xfonts-cyrillic 已经是最新版 (1:1.0.4)。
fonts-noto-color-emoji 已经是最新版 (0~20200916-1~ubuntu20.04.1)。
gstreamer1.0-plugins-base 已经是最新版 (1.16.2-4ubuntu0.1)。
gstreamer1.0-plugins-good 已经是最新版 (1.16.2-1ubuntu2.1)。
libasound2 已经是最新版 (1.2.2-2.1ubuntu2.5)。
libatk-bridge2.0-0 已经是最新版 (2.34.2-0ubuntu2~20.04.1)。
libcups2 已经是最新版 (2.3.1-9ubuntu1.2)。
libdbus-1-3 已经是最新版 (1.12.16-2ubuntu2.2)。
libdrm2 已经是最新版 (2.4.107-8ubuntu1~20.04.2)。
libegl1 已经是最新版 (1.3.2-1~ubuntu0.20.04.2)。
libevdev2 已经是最新版 (1.9.0+dfsg-1ubuntu0.2)。
libfreetype6 已经是最新版 (2.10.1-2ubuntu0.2)。
libgbm1 已经是最新版 (21.2.6-0ubuntu0.1~20.04.2)。
libgdk-pixbuf2.0-0 已经是最新版 (2.40.0+dfsg-3ubuntu0.2)。
libgl1 已经是最新版 (1.3.2-1~ubuntu0.20.04.2)。
libgles2 已经是最新版 (1.3.2-1~ubuntu0.20.04.2)。
libglib2.0-0 已经是最新版 (2.64.6-1~ubuntu20.04.4)。
libgstreamer-gl1.0-0 已经是最新版 (1.16.2-4ubuntu0.1)。
libgtk-3-0 已经是最新版 (3.24.20-0ubuntu1.1)。
libharfbuzz-icu0 已经是最新版 (2.6.4-1ubuntu4.2)。
libharfbuzz0b 已经是最新版 (2.6.4-1ubuntu4.2)。
libicu66 已经是最新版 (66.1-2ubuntu2.1)。
libjpeg-turbo8 已经是最新版 (2.0.3-0ubuntu1.20.04.1)。
libnss3 已经是最新版 (2:3.49.1-1ubuntu1.8)。
libopengl0 已经是最新版 (1.3.2-1~ubuntu0.20.04.2)。
libopenjp2-7 已经是最新版 (2.3.1-1ubuntu4.20.04.1)。
libsecret-1-0 已经是最新版 (0.20.4-0ubuntu1)。
libwebp6 已经是最新版 (0.6.1-2ubuntu0.20.04.1)。
libwebpdemux2 已经是最新版 (0.6.1-2ubuntu0.20.04.1)。
libx11-6 已经是最新版 (2:1.6.9-2ubuntu1.2)。
libx11-xcb1 已经是最新版 (2:1.6.9-2ubuntu1.2)。
libxml2 已经是最新版 (2.9.10+dfsg-5ubuntu0.20.04.3)。
ffmpeg 已经是最新版 (7:4.2.7-0ubuntu0.1)。
xvfb 已经是最新版 (2:1.20.13-1ubuntu1~20.04.3)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
07-23 16:42:22 [ERROR] uvicorn | Traceback (most recent call last):
  File "/home/xharaut/zhenxun_bot-0.1.6.1/nonebot-plugin-htmlrender-master/nonebot_plugin_htmlrender/browser.py", line 29, in init
    _browser = await launch_browser(**kwargs)
  File "/home/xharaut/zhenxun_bot-0.1.6.1/nonebot-plugin-htmlrender-master/nonebot_plugin_htmlrender/browser.py", line 41, in launch_browser
    return await _playwright.firefox.launch(**kwargs)
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/playwright/async_api/_generated.py", line 11793, in launch
    await self._async(
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/playwright/_impl/_browser_type.py", line 90, in launch
    Browser, from_channel(await self._channel.send("launch", params))
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/playwright/_impl/_connection.py", line 39, in send
    return await self.inner_send(method, params, False)
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/playwright/_impl/_connection.py", line 63, in inner_send
    result = next(iter(done)).result()
playwright._impl._api_types.Error: Protocol error (Browser.enable): Browser closed.
==================== Browser output: ====================
<launching> /root/.cache/ms-playwright/firefox-1323/firefox/firefox -no-remote -headless -profile /tmp/playwright_firefoxdev_profile-t4gGYA -juggler-pipe -silent
<launched> pid=11088
[pid=11088][err] Running Nightly as root in a regular user's session is not supported.  ($XAUTHORITY is /run/user/1000/gdm/Xauthority which is owned by xharaut.)
=========================== logs ===========================
<launching> /root/.cache/ms-playwright/firefox-1323/firefox/firefox -no-remote -headless -profile /tmp/playwright_firefoxdev_profile-t4gGYA -juggler-pipe -silent
<launched> pid=11088
[pid=11088][err] Running Nightly as root in a regular user's session is not supported.  ($XAUTHORITY is /run/user/1000/gdm/Xauthority which is owned by xharaut.)
============================================================

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 635, in lifespan
    async with self.lifespan_context(app):
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 530, in __aenter__
    await self._router.startup()
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 612, in startup
    await handler()
  File "/home/xharaut/zhenxun_bot-0.1.6.1/nonebot-plugin-htmlrender-master/nonebot_plugin_htmlrender/__init__.py", line 25, in init
    browser = await get_browser(**kwargs)
  File "/home/xharaut/zhenxun_bot-0.1.6.1/nonebot-plugin-htmlrender-master/nonebot_plugin_htmlrender/browser.py", line 45, in get_browser
    return _browser or await init(**kwargs)
  File "/home/xharaut/zhenxun_bot-0.1.6.1/nonebot-plugin-htmlrender-master/nonebot_plugin_htmlrender/browser.py", line 32, in init
    _browser = await launch_browser(**kwargs)
  File "/home/xharaut/zhenxun_bot-0.1.6.1/nonebot-plugin-htmlrender-master/nonebot_plugin_htmlrender/browser.py", line 41, in launch_browser
    return await _playwright.firefox.launch(**kwargs)
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/playwright/async_api/_generated.py", line 11793, in launch
    await self._async(
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/playwright/_impl/_browser_type.py", line 90, in launch
    Browser, from_channel(await self._channel.send("launch", params))
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/playwright/_impl/_connection.py", line 39, in send
    return await self.inner_send(method, params, False)
  File "/root/.cache/pypoetry/virtualenvs/zhenxun-bot-NhgnSrs7-py3.8/lib/python3.8/site-packages/playwright/_impl/_connection.py", line 63, in inner_send
    result = next(iter(done)).result()
playwright._impl._api_types.Error: Protocol error (Browser.enable): Browser closed.
==================== Browser output: ====================
<launching> /root/.cache/ms-playwright/firefox-1323/firefox/firefox -no-remote -headless -profile /tmp/playwright_firefoxdev_profile-lpYADz -juggler-pipe -silent
<launched> pid=11634
[pid=11634][err] Running Nightly as root in a regular user's session is not supported.  ($XAUTHORITY is /run/user/1000/gdm/Xauthority which is owned by xharaut.)
=========================== logs ===========================
<launching> /root/.cache/ms-playwright/firefox-1323/firefox/firefox -no-remote -headless -profile /tmp/playwright_firefoxdev_profile-lpYADz -juggler-pipe -silent
<launched> pid=11634
[pid=11634][err] Running Nightly as root in a regular user's session is not supported.  ($XAUTHORITY is /run/user/1000/gdm/Xauthority which is owned by xharaut.)
============================================================

[ERROR] uvicorn | Application startup failed. Exiting.

与 nonebot2 2.0.0b5 依赖冲突

https://github.com/nonebot/nonebot2/blob/e5e69c272698cc13c52430193bfeb728f4fb60e0/pyproject.toml#L35

uvicorn = "^0.17.6"

derived: nonebot2 (==2.0.0b5)
3: derived: uvicorn (0.18.0 || 0.18.1 || 0.18.2)
3: derived: not uvicorn[standard] (>0.18.0,!=0.18.1,!=0.18.2,<0.19.0)
3: derived: not nonebot-plugin-htmlrender (==0.0.4.8)
3: conflict: no versions of nonebot-plugin-htmlrender match >=0.0.4,<0.0.4.8 || >0.0.4.8,<0.0.5

启动时卡死

在 get_browser 函数这里卡死。

进行了一下深入的定位,browser.py 中的 _playwright = await async_playwright().start() 这句开始卡死

进一步跟进到了playwright库,_context_manager.py的start()函数,在

        done, pending = await asyncio.wait(
            {self._connection._transport.on_error_future, playwright_future},
            return_when=asyncio.FIRST_COMPLETED,
        )

这里卡死。

之前使用一直正常,后来重装系统,进行初始安装后,前两次运行正常,后来就开始卡死。没有任何输出,nonebot也无法启动。

无法启动playwright,会默认重新下载失败报错

#51 同样的问题,但是我没办法解决,只能另开一个iss了。
系统: win2012
py:3.9.12
nb:2.0.0rc4
nonebot-plugin-htmlrender:0.2.0.3
使用playwright install正确的安装1055后,会出现启动的时候,自动下载然后失败报错。
我尝试 #51 的方法倒版本并没有解决

以下是报错

image
image

Firefox导致的问题

已知

  • 导致 base_url 参数不生效,无法载入目录下的css文件

解决办法

  • 回退到 pypi 上 0.0.5 版本

使用插件计算原神队伍伤害报错

0|Miao-Yun | /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node: /lib64/libm.so.6: version GLIBC_2.27' not found (required by /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node) 0|Miao-Yun | /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node: /lib64/libc.so.6: version GLIBC_2.25' not found (required by /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node)
0|Miao-Yun | /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node: /lib64/libc.so.6: version GLIBC_2.28' not found (required by /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node) 0|Miao-Yun | /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node: /lib64/libstdc++.so.6: version CXXABI_1.3.9' not found (required by /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node)
0|Miao-Yun | /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node: /lib64/libstdc++.so.6: version GLIBCXX_3.4.20' not found (required by /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node) 0|Miao-Yun | /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node: /lib64/libstdc++.so.6: version GLIBCXX_3.4.21' not found (required by /root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/driver/node)
0|Miao-Yun | [PyBot][02:40:42.344][ERROR] [message]Running Matcher(type='message', module=nonebot_plugin_gspanel) failed.
0|Miao-Yun | Traceback (most recent call last):
0|Miao-Yun | File "main.py", line 17, in
0|Miao-Yun | yunzai_nonebot.run()
0|Miao-Yun | File "/root/robot/Miao-Yunzai/plugins/py-plugin/yunzai_nonebot/init.py", line 31, in run
0|Miao-Yun | nonebot.run(*args, **kwargs)
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot/init.py", line 273, in run
0|Miao-Yun | get_driver().run(*args, **kwargs)
0|Miao-Yun | File "/root/robot/Miao-Yunzai/plugins/py-plugin/yunzai_nonebot/hijack/driver.py", line 42, in run
0|Miao-Yun | loop.run_until_complete(self.serve())
0|Miao-Yun | File "/usr/local/python3/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
0|Miao-Yun | self.run_forever()
0|Miao-Yun | File "/usr/local/python3/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
0|Miao-Yun | self._run_once()
0|Miao-Yun | File "/usr/local/python3/lib/python3.8/asyncio/base_events.py", line 1859, in _run_once
0|Miao-Yun | handle._run()
0|Miao-Yun | File "/usr/local/python3/lib/python3.8/asyncio/events.py", line 81, in _run
0|Miao-Yun | self._context.run(self._callback, *self._args)
0|Miao-Yun | File "/root/robot/Miao-Yunzai/plugins/py-plugin/yunzai_nonebot/hijack/message.py", line 10, in wrapper
0|Miao-Yun | return await func(*args, **kwargs)
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot/message.py", line 141, in _check_matcher
0|Miao-Yun | await _run_matcher(Matcher, bot, event, state, stack, dependency_cache)
0|Miao-Yun | > File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot/message.py", line 187, in _run_matcher
0|Miao-Yun | await matcher.run(bot, event, state, stack, dependency_cache)
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot/internal/matcher/matcher.py", line 732, in run
0|Miao-Yun | await self.simple_run(bot, event, state, stack, dependency_cache)
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot/internal/matcher/matcher.py", line 707, in simple_run
0|Miao-Yun | await handler(
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot/dependencies/init.py", line 108, in call
0|Miao-Yun | return await cast(Callable[..., Awaitable[R]], self.call)(**values)
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot_plugin_gspanel/init.py", line 79, in team_handle
0|Miao-Yun | rt = await getTeam(uid, chars, showDetail)
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot_plugin_gspanel/data_source.py", line 384, in getTeam
0|Miao-Yun | return await template_to_pic(
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot_plugin_htmlrender/data_source.py", line 233, in template_to_pic
0|Miao-Yun | return await html_to_pic(
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot_plugin_htmlrender/data_source.py", line 187, in html_to_pic
0|Miao-Yun | async with get_new_page(**kwargs) as page:
0|Miao-Yun | File "/usr/local/python3/lib/python3.8/contextlib.py", line 171, in aenter
0|Miao-Yun | return await self.gen.anext()
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot_plugin_htmlrender/browser.py", line 65, in get_new_page
0|Miao-Yun | browser = await get_browser()
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot_plugin_htmlrender/browser.py", line 60, in get_browser
0|Miao-Yun | return _browser if _browser and _browser.is_connected() else await init(**kwargs)
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/nonebot_plugin_htmlrender/browser.py", line 36, in init
0|Miao-Yun | _playwright = await async_playwright().start()
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/async_api/_context_manager.py", line 51, in start
0|Miao-Yun | return await self.aenter()
0|Miao-Yun | File "/root/.cache/pypoetry/virtualenvs/py-plugin-0fRIzhtO-py3.8/lib/python3.8/site-packages/playwright/async_api/_context_manager.py", line 46, in aenter
0|Miao-Yun | playwright = AsyncPlaywright(next(iter(done)).result())
0|Miao-Yun | Exception: Connection closed while reading from the driver

windows平台启动nonebot-plugin-htmlrender 报错 NotImplementedError

已经安装了playwright, 执行测试: python -m playwright codegen --target python -o baidu.py -b chromium https://www.baidu.com 正常
Python版本3.10.4, 这个报错是缺少什么还是哪里有问题?
方便的话, 可以出一个详细的windows安装教程吗

报错信息 ![20220530144136](https://user-images.githubusercontent.com/48077551/170932269-e188c8cf-186b-4540-87f8-cbc60bf61f6b.png)

Package Version


aerich 0.6.3
aiocache 0.11.1
aiofiles 0.8.0
aiohttp 3.8.1
aiosignal 1.2.0
aiosqlite 0.17.0
anyio 3.5.0
APScheduler 3.9.1
arrow 1.2.2
asgiref 3.5.0
async-timeout 4.0.2
asyncpg 0.25.0
attrs 21.4.0
bilireq 0.1.2
binaryornot 0.4.4
CacheControl 0.12.11
cachy 0.3.0
certifi 2021.10.8
chardet 4.0.0
charset-normalizer 2.0.12
cleo 0.8.1
click 8.1.2
clikit 0.6.2
colorama 0.4.4
cookiecutter 1.7.3
crashtest 0.3.1
dictdiffer 0.9.0
distlib 0.3.4
Django 4.0.4
emoji 1.7.0
fastapi 0.73.0
filelock 3.7.0
fonttools 4.33.3
frozenlist 1.3.0
fuzzywuzzy 0.18.0
greenlet 1.1.2
h11 0.12.0
haruka-bot 1.3.6.post1
html5lib 1.1
httpcore 0.14.7
httptools 0.4.0
httpx 0.22.0
httpx-socks 0.7.3
idna 3.3
imageio 2.19.2
importlib-metadata 4.11.4
iso8601 0.1.16
Jinja2 3.1.1
jinja2-time 0.2.0
keyring 23.5.1
lockfile 0.12.2
loguru 0.6.0
lxml 4.8.0
Markdown 3.3.7
MarkupSafe 2.1.1
msgpack 1.0.3
multidict 6.0.2
nb-cli 0.6.6
nonebot-adapter-onebot 2.0.0b1
nonebot-plugin-apscheduler 0.1.2
nonebot-plugin-htmlrender 0.0.5
nonebot-plugin-picsearcher 0.1.6rc2
nonebot-plugin-read-60s 0.2.4
nonebot2 2.0.0b2
numpy 1.22.3
opencv-contrib-python 4.5.5.64
opencv-python 4.5.5.64
packaging 20.9
pastel 0.2.1
pexpect 4.8.0
Pillow 9.1.1
pip 22.0.4
pkginfo 1.8.2
platformdirs 2.5.2
playwright 1.22.0
poetry 1.1.13
poetry-core 1.0.8
poyo 0.5.0
prompt-toolkit 3.0.29
ptyprocess 0.7.0
pyasn1 0.4.8
pydantic 1.9.0
pyee 8.1.0
pyfiglet 0.8.post1
Pygments 2.12.0
pygtrie 2.4.2
pylev 1.4.0
pymdown-extensions 9.4
pyparsing 3.0.9
pypika-tortoise 0.1.4
python-dateutil 2.8.2
python-dotenv 0.19.2
python-markdown-math 0.8
python-slugify 6.1.1
python-socks 2.0.3
pytz 2022.1
pytz-deprecation-shim 0.1.0.post0
pywin32-ctypes 0.2.0
PyYAML 6.0
requests 2.27.1
requests-toolbelt 0.9.1
rfc3986 1.5.0
rsa 4.8
setuptools 58.1.0
shellingham 1.4.0
six 1.16.0
sniffio 1.2.0
sqlparse 0.4.2
starlette 0.17.1
text-unidecode 1.3
tomlkit 0.9.2
tortoise-orm 0.18.1
tqdm 4.64.0
typing_extensions 4.1.1
tzdata 2022.1
tzlocal 4.2
urllib3 1.26.9
uvicorn 0.17.6
virtualenv 20.14.1
watchgod 0.8.2
wcwidth 0.2.5
webencodings 0.5.1
websockets 10.1
wfastcgi 3.0.0
win32-setctime 1.1.0
yarl 1.7.2
zipp 3.8.0

启动过程中Playwright,asyncio,starlette等报错

系统版本Windows Server 2019
Python版本3.9.7
nonebot版本为2.0.0-beta.2
未安装其他任何插件

04-30 16:20:27 [SUCCESS] nonebot | NoneBot is initializing...
04-30 16:20:27 [INFO] nonebot | Current Env: dev
04-30 16:20:27 [DEBUG] nonebot | Loaded Config
04-30 16:20:28 [DEBUG] nonebot | Succeeded to load adapter "mirai V2"
04-30 16:20:28 [SUCCESS] nonebot | Succeeded to import "nonebot_plugin_htmlrender"
04-30 16:20:28 [WARNING] __main__ | Always use `nb run` to start the bot instead of manually running!
04-30 16:20:28 [SUCCESS] nonebot | Running NoneBot...
04-30 16:20:28 [DEBUG] nonebot | Loaded adapters: mirai V2
04-30 16:20:28 [INFO] uvicorn | Will watch for changes in these directories: ['C:\\Users\\Administrator\\Desktop\\bot\\plugins\\nonebot2\\LesdNoneBot2']
04-30 16:20:28 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)
04-30 16:20:28 [INFO] uvicorn | Started reloader process [10056] using watchgod
04-30 16:20:29 [SUCCESS] nonebot | NoneBot is initializing...
04-30 16:20:29 [INFO] nonebot | Current Env: dev
04-30 16:20:27 [DEBUG] nonebot | Loaded Config
04-30 16:20:29 [DEBUG] nonebot | Succeeded to load adapter "mirai V2"
04-30 16:20:30 [SUCCESS] nonebot | Succeeded to import "nonebot_plugin_htmlrender"
04-30 16:20:30 [WARNING] uvicorn | The --reload flag should not be used in production on Windows.
04-30 16:20:30 [INFO] uvicorn | Started server process [9124]
04-30 16:20:30 [INFO] uvicorn | Waiting for application startup.

Task exception was never retrieved
future: <Task finished name='Task-4' coro=<Connection.run() done, defined at C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\playwright\_impl\_connection.py:174> exception=NotImplementedError()>
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\playwright\_impl\_connection.py", line 181, in run
    await self._transport.connect()
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\playwright\_impl\_transport.py", line 132, in connect
    raise exc
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\playwright\_impl\_transport.py", line 120, in connect
    self._proc = await asyncio.create_subprocess_exec(
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\subprocess.py", line 236, in create_subprocess_exec
    transport, protocol = await loop.subprocess_exec(
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 1661, in subprocess_exec
    transport = await self._make_subprocess_transport(
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 493, in _make_subprocess_transport
    raise NotImplementedError
NotImplementedError
04-30 16:20:30 [ERROR] uvicorn | Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\starlette\routing.py", line 621, in lifespan
    async with self.lifespan_context(app):
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\starlette\routing.py", line 518, in __aenter__
    await self._router.startup()
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\starlette\routing.py", line 598, in startup
    await handler()
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot_plugin_htmlrender\__init__.py", line 27, in init
    browser = await get_browser(**kwargs)
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot_plugin_htmlrender\browser.py", line 40, in get_browser
    return _browser or await init(**kwargs)
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\nonebot_plugin_htmlrender\browser.py", line 26, in init
    _playwright = await async_playwright().start()
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\playwright\async_api\_context_manager.py", line 51, in start
    return await self.__aenter__()
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\playwright\async_api\_context_manager.py", line 46, in __aenter__
    playwright = AsyncPlaywright(next(iter(done)).result())
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\playwright\_impl\_connection.py", line 181, in run
    await self._transport.connect()
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\playwright\_impl\_transport.py", line 132, in connect
    raise exc
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\site-packages\playwright\_impl\_transport.py", line 120, in connect
    self._proc = await asyncio.create_subprocess_exec(
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\subprocess.py", line 236, in create_subprocess_exec
    transport, protocol = await loop.subprocess_exec(
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 1661, in subprocess_exec
    transport = await self._make_subprocess_transport(
  File "C:\ProgramData\Anaconda3\envs\lesd2\lib\asyncio\base_events.py", line 493, in _make_subprocess_transport
    raise NotImplementedError
NotImplementedError

04-30 16:20:30 [ERROR] uvicorn | Application startup failed. Exiting.

使用了最低要求的Playwright 1.17.2版本依旧出现该错误

启动时卡死

在 get_browser 函数这里卡死。

进行了一下深入的定位,browser.py 中的 _playwright = await async_playwright().start() 这句开始卡死

进一步跟进到了playwright库,_context_manager.py的start()函数,在

        done, pending = await asyncio.wait(
            {self._connection._transport.on_error_future, playwright_future},
            return_when=asyncio.FIRST_COMPLETED,
        )

这里卡死。

之前使用一直正常,后来重装系统,进行初始安装后,前两次运行正常,后来就开始卡死。没有任何输出,nonebot也无法启动。

请教一下html2img如何使用本地图片资源

项目结构:
bot/
|-- data/
|xxx|-- template.html
|xxx|-- picture/
|xxxxxx |--picture.jpg
|-- plugins/
|xxx|-- nonebot_plugin_htmlrender/
|xxxxxx|--...
|xxx|-- ...
|-- bot.py

在html模板template文件中写了
background-image: url(".picture/picture.jpg")

直接打开html文件可以正常加载图片
使用htmlrender的htmltoimg功能时可以加载除图片外的大部分其他内容,我参考了其他issue,将template_path参数设置为f"file://{data文件夹的绝对路径}",但仍然无法加载picture.jpg,请问应该如何正常使用呢

version `GLIBC_2.28' not found

如题,遇到这个问题后我去按照网上教程升级gcc,安装GLIBC_2.28,结果遇到一些问题,导致我的bash失效,ls,cd这些最基础的指令都无法使用,重启后服务器无法ssh登录,寄。

导入ERROR,是否缺少什么?

02-13 21:43:24 [ERROR] nonebot | Failed to import "nonebot_plugin_htmlrender"
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in run_code
exec(code, run_globals)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\Scripts\nb.exe_main
.py", line 7, in
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\click\core.py", line 1130, in call
return self.main(*args, **kwargs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\click\core.py", line 1055, in main
rv = self.invoke(ctx)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\click\core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\click\core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\click\core.py", line 760, in invoke
return _callback(*args, **kwargs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nb_cli\commands\main.py", line 30, in run
run_bot(file, app)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nb_cli\handlers\deploy.py", line 20, in run_bot
module = importlib.import_module(module_name)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\importlib_init
.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1050, in _gcd_import
File "", line 1027, in _find_and_load
File "", line 1006, in _find_and_load_unlocked
File "", line 688, in _load_unlocked
File "", line 883, in exec_module
File "", line 241, in _call_with_frames_removed
File "C:\Users\Administrator\Desktop\bot\kln_nb.\bot.py", line 26, in
nonebot.load_from_toml("pyproject.toml")
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\plugin\load.py", line 122, in load_from_toml
return load_all_plugins(plugins, plugin_dirs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\plugin\load.py", line 59, in load_all_plugins
return manager.load_all_plugins()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\plugin\manager.py", line 168, in load_all_plugins
return set(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\plugin\manager.py", line 169, in
filter(None, (self.load_plugin(name) for name in self.available_plugins))

File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\plugin\manager.py", line 141, in load_plugin
module = importlib.import_module(name)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\importlib_init_.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1050, in _gcd_import
File "", line 1027, in _find_and_load
File "", line 1006, in _find_and_load_unlocked
File "", line 688, in load_unlocked
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot\plugin\manager.py", line 233, in exec_module
super().exec_module(module)
File "", line 883, in exec_module
File "", line 241, in call_with_frames_removed
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot_plugin_htmlrender_init
.py", line 4, in
from .browser import get_browser, get_new_page, shutdown_browser
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\nonebot_plugin_htmlrender\browser.py", line 18, in
from playwright.async_api import Page, Error, Browser, Playwright, async_playwright
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\playwright\async_api_init
.py", line 25, in
import playwright.async_api._generated
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\playwright\async_api_generated.py", line 25, in
from playwright._impl._accessibility import Accessibility as AccessibilityImpl
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\playwright_impl_accessibility.py", line 17, in
from playwright._impl.connection import Channel
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\playwright_impl_connection.py", line 23, in
from greenlet import greenlet
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\greenlet_init
.py", line 29, in
from ._greenlet import _C_API # pylint:disable=no-name-in-module
ImportError: DLL load failed while importing _greenlet: 找不到指定的模块。

请求添加更自由的截图配置

async def html_to_pic(
html: str, wait: int = 0, template_path: str = f"file://{getcwd()}", **kwargs
) -> bytes:
"""html转图片
Args:
html (str): html文本
wait (int, optional): 等待时间. Defaults to 0.
template_path (str, optional): 模板路径 如 "file:///path/to/template/"
Returns:
bytes: 图片, 可直接发送
"""
# logger.debug(f"html:\n{html}")
if "file:" not in template_path:
raise Exception("template_path 应该为 file:///path/to/template")
async with get_new_page(**kwargs) as page:
await page.goto(template_path)
await page.set_content(html, wait_until="networkidle")
await page.wait_for_timeout(wait)
img_raw = await page.screenshot(full_page=True)
return img_raw

我看到当前插件通过 html_to_pic() 渲染 HTML 截图时,无法自由定义图像的 type="jpeg"quality=90 等配置,只能返回 PNG 图片,这样图片体积通常较大。能否为相关函数添加对应的参数,让用户可以更自由地决定这些配置呢?

虽然说如果在编写插件时使用 get_new_page() 自行处理能实现,但这样通常不得不另外 import jinjia2(获取 html_to_pic()html)等等。我希望能只用一行 import 就搞定,比如我现在是这样用的:

from nonebot_plugin_htmlrender import template_to_pic

async def something():
    # ...
    
    return await template_to_pic(...)
    # 想要的:
    # return await template_to_pic(..., type="jpeg", quality=80)

使用0.0.4.7时报错

windows下使用0.0.4.7时,无论是否开启uvicorn的reload均报错
回退至0.0.4.6后并关闭reload则正常

05-26 23:07:53 [WARNING] nonebot_plugin_htmlrender | 检测到当前为 Windows 系统,已自动注入猴子补丁
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\uvicorn\loops\auto.py", line 3, in auto_loop_setup
    import uvloop  # noqa
ModuleNotFoundError: No module named 'uvloop'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\Scripts\nb.exe\__main__.py", line 7, in <module>
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\click\core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\click\core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\click\core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\nb_cli\commands\main.py", line 30, in run
    run_bot(file, app)
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\nb_cli\handlers\deploy.py", line 25, in run_bot
    nonebot.run(app=f"{module_name}:{app}")
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\nonebot\__init__.py", line 259, in run
    get_driver().run(*args, **kwargs)
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\nonebot\drivers\fastapi.py", line 170, in run
    uvicorn.run(
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\uvicorn\main.py", line 463, in run
    server.run()
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\uvicorn\server.py", line 59, in run
    self.config.setup_event_loop()
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\uvicorn\config.py", line 506, in setup_event_loop
    loop_setup(reload=self.reload)
  File "C:\Users\Administrator\miniconda3\envs\nonebot2\lib\site-packages\uvicorn\loops\auto.py", line 7, in auto_loop_setup
    loop_setup(reload=reload)
TypeError: asyncio_setup() got an unexpected keyword argument 'reload'

playwright._impl._api_types.Error: Executable doesn't exist

即使执行了playwright installplaywright install chromium 也还是一样。再执行playwright install则没有任何输出。

01-10 23:56:20 [INFO] nonebot_plugin_htmlrender | 使用 chromium 启动
01-10 23:56:20 [ERROR] uvicorn | Traceback (most recent call last):
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/nonebot_plugin_htmlrender/browser.py", line 38, in init
    _browser = await launch_browser(**kwargs)
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/nonebot_plugin_htmlrender/browser.py", line 56, in launch_browser
    return await _playwright.chromium.launch(**kwargs)
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/async_api/_generated.py", line 14007, in launch
    await self._impl_obj.launch(
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/_impl/_browser_type.py", line 93, in launch
    Browser, from_channel(await self._channel.send("launch", params))
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 44, in send
    return await self._connection.wrap_api_call(
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 419, in wrap_api_call
    return await cb()
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 79, in inner_send
    result = next(iter(done)).result()
playwright._impl._api_types.Error: Executable doesn't exist at /home/ljzd/.cache/ms-playwright/chromium-1041/chrome-linux/chrome
╔════════════════════════════════════════════════════════════╗
║ Looks like Playwright was just installed or updated.       ║
║ Please run the following command to download new browsers: ║
║                                                            ║
║     playwright install                                     ║
║                                                            ║
║ <3 Playwright Team                                         ║
╚════════════════════════════════════════════════════════════╝

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/starlette/routing.py", line 671, in lifespan
    async with self.lifespan_context(app):
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/starlette/routing.py", line 566, in __aenter__
    await self._router.startup()
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/starlette/routing.py", line 648, in startup
    await handler()
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/nonebot_plugin_htmlrender/__init__.py", line 25, in init
    browser = await get_browser(**kwargs)
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/nonebot_plugin_htmlrender/browser.py", line 60, in get_browser
    return _browser or await init(**kwargs)
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/nonebot_plugin_htmlrender/browser.py", line 41, in init
    _browser = await launch_browser(**kwargs)
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/nonebot_plugin_htmlrender/browser.py", line 56, in launch_browser
    return await _playwright.chromium.launch(**kwargs)
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/async_api/_generated.py", line 14007, in launch
    await self._impl_obj.launch(
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/_impl/_browser_type.py", line 93, in launch
    Browser, from_channel(await self._channel.send("launch", params))
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 44, in send
    return await self._connection.wrap_api_call(
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 419, in wrap_api_call
    return await cb()
  File "/home/ljzd/anaconda3/envs/nonebot/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 79, in inner_send
    result = next(iter(done)).result()
playwright._impl._api_types.Error: Executable doesn't exist at /home/ljzd/.cache/ms-playwright/chromium-1041/chrome-linux/chrome
╔════════════════════════════════════════════════════════════╗
║ Looks like Playwright was just installed or updated.       ║
║ Please run the following command to download new browsers: ║
║                                                            ║
║     playwright install                                     ║
║                                                            ║
║ <3 Playwright Team                                         ║
╚════════════════════════════════════════════════════════════╝

01-10 23:56:20 [ERROR] uvicorn | Application startup failed. Exiting.

在Windows端会出现asyncio_setup() got an unexpected keyword argument 'reload'的异常

操作系统: Windows 10 19042.1466
Python 版本: Python 3.9.5
uvicorn 版本:uvicorn 0.17.6

03-13 22:33:01 [WARNING] nonebot_plugin_htmlrender | 检测到当前为 Windows 系统,已自动注入猴子补丁
03-13 22:33:05 [WARNING] main | Always use nb run to start the bot instead of manually running!
03-13 22:33:05 [SUCCESS] nonebot | Running NoneBot...
03-13 22:33:05 [DEBUG] nonebot | Loaded adapters: OneBot V11
python-BaseException
Traceback (most recent call last):
File "D:\Python\Python39\lib\site-packages\uvicorn\loops\auto.py", line 3, in auto_loop_setup
import uvloop # noqa
ModuleNotFoundError: No module named 'uvloop'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "D:\JetBrain\apps\PyCharm-P\ch-0\211.7442.45\plugins\python\helpers\pydev\pydevd.py", line 1483, in exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "D:\JetBrain\apps\PyCharm-P\ch-0\211.7442.45\plugins\python\helpers\pydev_pydev_imps_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "E:/Works/meguchan-lte/bot.py", line 36, in
nonebot.run(app="mp_main:app")
File "D:\Python\Python39\lib\site-packages\nonebot_init
.py", line 258, in run
get_driver().run(*args, **kwargs)
File "D:\Python\Python39\lib\site-packages\nonebot\drivers\fastapi.py", line 168, in run
uvicorn.run(
File "D:\Python\Python39\lib\site-packages\uvicorn\main.py", line 463, in run
server.run()
File "D:\Python\Python39\lib\site-packages\uvicorn\server.py", line 59, in run
self.config.setup_event_loop()
File "D:\Python\Python39\lib\site-packages\uvicorn\config.py", line 506, in setup_event_loop
loop_setup(reload=self.reload)
File "D:\Python\Python39\lib\site-packages\uvicorn\loops\auto.py", line 7, in auto_loop_setup
loop_setup(reload=reload)
TypeError: asyncio_setup() got an unexpected keyword argument 'reload'

推测原因是在最新的uvicorn中,在uvicorn/loops/auto.py中asyncio_setup的调用方式发生改变:
由loop_setup() 变为 loop_setup(reload=reload)

同时asyncio_setup的函数签名也已由
def asyncio_setup() -> None:
...
变为
def asyncio_setup(reload: bool = False) -> None:
...

但是在本项目的patch.py中却试图用一个无形参的asyncio_setup()去替换有形参的asyncio_setup(reload: bool = False) 故发生了上述异常

encode/uvicorn@81802ce#diff-c93420ffcc3d45d9385926cfe72deaaccec6dbce77c7aa2458f92db7e09b9cecL7-R7

pm2挂载nonebot2进程卡死

一开始是在树莓派armv8架构下不通过pm2启动bot的,运行正常,没有问题。
但是换用pm2后台运行nonebot2后就发生了与#17 类似的问题,尝试了提到的解决办法,但依旧没有办法解决。
image
输入日志就一直卡在 Scheduler Started就不往下打log了

wsl平台渲染时两个内核均出现问题

火速进行一个issue的发(虽然我觉得问题大概率是playwright上的)

chromium内核+wsl2:无list渲染,无jinja2内容,无css
5~W1FYAR0RI8 OHYZN9V9VA
firefox+wsl2:有list渲染,有jinja2内容,无css定义的颜色、进度条等内容
AC~%JK7 WY$Z%74V(S_XGRE
同样代码,win下运行,可以正常渲染(是的,标题的分隔线也是在css里定义的):
DX0 )Y5S{T_}X_RM87UR6U7

安装后bot启动闪退,没但报错信息

使用命令nb plugin install nonebot-plugin-htmlrender,安装过程中没有任何报错,最后也提示
Successfully installed nonebot-plugin-htmlrender-0.2.1

但安装后执行nb run控制台闪一下,然后nb run程序就退出了(控制台没有任何报错信息)。在bot的pyproject.toml中去掉htmlrender后,nb run可以是可以正常启动的。

os: win10
nonebot: 2.0.0
python:3.10.6

不适配centos7?

01-02 14:04:52 [INFO] nonebot_plugin_htmlrender | 正在安装 chromium
01-02 14:04:52 [ERROR] uvicorn | Traceback (most recent call last):
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/nonebot_plugin_htmlrender/browser.py", line 28, in init
_browser = await launch_browser(**kwargs)
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/nonebot_plugin_htmlrender/browser.py", line 36, in launch_browser
return await _playwright.chromium.launch(**kwargs)
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/playwright/async_api/_generated.py", line 11602, in launch
await self._async(
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/playwright/_impl/_browser_type.py", line 88, in launch
return from_channel(await self._channel.send("launch", params))
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/playwright/_impl/_connection.py", line 39, in send
return await self.inner_send(method, params, False)
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/playwright/_impl/_connection.py", line 63, in inner_send
result = next(iter(done)).result()
playwright._impl._api_types.Error:
╔════════════════════════════════════════════════════════════╗
║ Host system is missing a few dependencies to run browsers. ║
║ Please install them with the following command: ║
║ ║
║ playwright install-deps ║
║ ║
║ <3 Playwright Team ║
╚════════════════════════════════════════════════════════════╝

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/starlette/routing.py", line 540, in lifespan
async for item in self.lifespan_context(app):
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/starlette/routing.py", line 481, in default_lifespan
await self.startup()
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/starlette/routing.py", line 516, in startup
await handler()
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/nonebot_plugin_htmlrender/init.py", line 20, in init
browser = await get_browser(**kwargs)
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/nonebot_plugin_htmlrender/browser.py", line 40, in get_browser
return _browser or await init(**kwargs)
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/nonebot_plugin_htmlrender/browser.py", line 31, in init
_browser = await launch_browser(**kwargs)
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/nonebot_plugin_htmlrender/browser.py", line 36, in launch_browser
return await _playwright.chromium.launch(**kwargs)
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/playwright/async_api/_generated.py", line 11602, in launch
await self._async(
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/playwright/_impl/_browser_type.py", line 88, in launch
return from_channel(await self._channel.send("launch", params))
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/playwright/_impl/_connection.py", line 39, in send
return await self.inner_send(method, params, False)
File "/root/.virtualenvs/hongshibot_venv/lib/python3.8/site-packages/playwright/_impl/_connection.py", line 63, in inner_send
result = next(iter(done)).result()
playwright._impl._api_types.Error:
╔════════════════════════════════════════════════════════════╗
║ Host system is missing a few dependencies to run browsers. ║
║ Please install them with the following command: ║
║ ║
║ playwright install-deps ║
║ ║
║ <3 Playwright Team ║
╚════════════════════════════════════════════════════════════╝

01-02 14:04:52 [ERROR] uvicorn | Application startup failed. Exiting.
(hongshibot_venv) [root@VM-12-5-centos hongshibot]# playwright install-deps
Installing Ubuntu dependencies...
sh: apt-get: command not found

Docker部署缺少依赖问题

系统:linux mint

Dockerfile:

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8

ENV APP_MODULE=bot:app
ENV MAX_WORKERS=1

WORKDIR /app

COPY ./ /app

COPY ./requirements.txt ./

RUN python3 -m pip install -r requirements.txt --no-dependencies

RUN python3 -m playwright install

RUN python3 -m playwright install-deps

RUN rm requirements.txt

镜像构建时

Step 9/10 : RUN python3 -m playwright install-deps
……
E: Package 'ttf-ubuntu-font-family' has no installation candidate
E: Unable to locate package libenchant1c2a
E: Unable to locate package libicu66
E: Package 'libjpeg-turbo8' has no installation candidate

启动时
机器人是启动成功的

╔═════════════════════════════════════════════════════════════════════════╗
║ Looks like Playwright Test or Playwright was just installed or updated. ║
║ Please run the following command to download new browsers: ║
║ ║
║ playwright install ║
║ ║
║ <3 Playwright Team ║
╚═════════════════════════════════════════════════════════════════════════╝

╔════════════════════════════════════════════════════════════╗
║ Host system is missing a few dependencies to run browsers. ║
║ Please install them with the following command: ║
║ ║
║ playwright install-deps ║
║ ║
║ <3 Playwright Team ║
╚════════════════════════════════════════════════════════════╝

小白求解

如何让playwright实例常驻后台

每次启动playwright感觉要消耗很长时间, 能否常驻后台呢

我想通过page获取一些网站上Dom上的图片, 所以使用get_new_page

async def xx():
  async with get_new_page() as page:
      await page.goto('https://xxx')
      ...

但是指令结束后, 这个实例也就结束了, 我试了下和我直接使用async_playwright时间上没啥区别(启动耗时2 3秒感觉)

图片生成失败

使用的版本是0.2.0.1
调用方法后抛出异常,没有返回值。控制台日志如下:
image

提示安装chromium报错退出

image
image
image

插件提示06-18 07:57:15 [INFO] nonebot_plugin_htmlrender | 正在安装 chromium
后直接报06-18 07:57:17 [ERROR] uvicorn | Application startup failed. Exiting.退出,重装无法解决

能否放宽aiofiles依赖的版本限制

aiofiles在Sep 5, 2022时发布了22.1.0版本,商店里有些插件使用了该版本,导致安装htmlrender时发生依赖冲突

htmlrender是否可以放宽依赖要求,支持22.1.0的aiofiles呢

所有图像化输出全部超时

nb插件中需要图像化的都报超时,询问了插件作者也无法有效解决
第一次使用issues,有什么做的不到位的轻喷..
board1
board2
ddcheck
QQ截图20220519202706
QQ截图20220519202717
shindan

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.