Playwright 配置¶
配置项默认值(代码基准)¶
以下默认值以当前代码实现为准(
nonebot_plugin_htmlrender/backend/playwright/config.py)。
启动与连接¶
| 配置项 | 默认值 | 说明 |
|---|---|---|
render_playwright.engine |
chromium |
浏览器引擎:chromium / firefox / webkit |
render_playwright.channel |
null |
仅 engine=chromium 时可用 |
render_playwright.executable_path |
null |
空字符串或 . 会被归一化为 null |
render_playwright.launch_args |
null |
本地浏览器启动附加参数(空格分隔字符串) |
render_playwright.proxy_server |
null |
浏览器代理地址 |
render_playwright.proxy_bypass |
null |
浏览器代理绕过规则 |
render_playwright.connect_ws.endpoint |
null |
远程 Playwright WS 地址 |
render_playwright.connect_cdp.endpoint |
null |
远程 Chromium CDP 地址 |
render_playwright.install_mirror |
null |
安装浏览器时额外镜像地址 |
render_playwright.install_proxy |
null |
安装浏览器时下载代理(HTTP/HTTPS) |
render_playwright.skip_browser_install |
false |
本地模式环境检查失败时,是否跳过自动安装 |
render_playwright.cleanup_legacy_cache |
false |
是否在启动时自动删除旧版全局 Playwright 缓存目录 |
render_playwright.close_on_exit |
true |
本地模式 session 关闭时是否关闭浏览器 |
资源解析与 filehost¶
| 配置项 | 默认值 | 说明 |
|---|---|---|
render_playwright.resource_resolve_mode |
off |
off / auto / strict |
render_playwright.remote_local_resource_policy |
passthrough |
远程模式下本地资源策略 |
render_playwright.local_local_resource_policy |
file |
本地模式下本地资源策略 |
render_playwright.filehost_allow_any_path |
false |
是否放开任意本地路径暴露 |
render_playwright.filehost_allowed_paths |
[] |
额外允许暴露目录白名单 |
render_playwright.filehost_prewarm_paths |
[] |
filehost 预热目录 |
render_playwright.filehost_prewarm_enabled |
true |
是否启用 filehost 目录预热 |
render_playwright.filehost_prewarm_max_files |
256 |
单次目录预热最大文件数 |
render_playwright.filehost_cache_ttl_seconds |
300.0 |
filehost 资源缓存 TTL(秒) |
render_playwright.filehost_prewarm_extensions |
[".css", ".js", ".mjs", ".png", ".jpg", ".jpeg", ".webp", ".gif", ".svg", ".ico", ".woff", ".woff2", ".ttf", ".otf", ".map"] |
参与目录预热的后缀 |
render_playwright.filehost_request_header_name |
X-HTMLRender-Filehost-Request |
filehost 请求头名 |
render_playwright.filehost_request_header_value |
null |
显式 token;为空时走自动派生 |
render_playwright.filehost_request_header_salt |
nonebot-plugin-htmlrender:filehost:guard:v1 |
自动派生 token 盐值 |
归一化与校验规则¶
connect_ws.endpoint与connect_cdp.endpoint不能同时配置。connect_cdp.endpoint只允许搭配engine=chromium。channel只允许在engine=chromium时配置。executable_path传空字符串或.会被归一化为null。filehost_allowed_paths/filehost_prewarm_paths传单个字符串时会自动转为列表。filehost_prewarm_extensions支持逗号分隔字符串,会自动补.、转小写、去重并保持顺序。filehost_request_header_name传空白字符串会回退到默认值。filehost_request_header_value传空白字符串会回退为null(表示自动派生 token)。filehost_request_header_salt传空白字符串会回退到默认值。
filehost 缓存行为¶
启用 filehost 解析后,插件会在进程内对**文件路径**类型的资源做去重缓存,避免同一文件被反复上传:
- 命中条件:绝对路径相同、且
mtime/size都未变化。文件被覆盖(即使路径名相同)会立刻触发重新上传。 - TTL:由
filehost_cache_ttl_seconds(默认 300 秒)控制;每次命中刷新过期时间,长时间未访问的条目会被驱逐。 - 租约保护:单次
render_template期间用到的资源会被钉住直至该次渲染结束,不会因并发请求的 TTL 检查被抢先驱逐——即使 TTL 设得很短也不影响渲染正确性。 - 并发去重:同一文件被多个并发渲染同时引用时,只会触发一次 filehost 上传,其他请求等待复用。
- bytes/
BytesIO不走缓存:因为没有稳定 key,每次都重新调用FileHost(...).to_url()。如果你大量渲染依赖二进制资源且看到 filehost 调用过多,请改成把数据落盘后再传Path。
实现细节与公共 API(prune_filehost_cache() 等)参见维护者文档的「Filehost 缓存与租约」一节:Filehost 资源解析方案。
本地启动配置¶
render_playwright.engine- 浏览器引擎类型。
参考:Playwright Browsers render_playwright.channel- Chromium channel(仅
engine=chromium)。
参考:BrowserType.launch(channel) render_playwright.executable_path- 指定浏览器可执行文件路径。
参考:BrowserType.launch(executable_path) render_playwright.launch_args- 附加浏览器启动参数。
参考:BrowserType.launch(args) render_playwright.proxy_server/render_playwright.proxy_bypass- 浏览器代理与绕过规则。
参考:BrowserType.launch(proxy) render_playwright.cleanup_legacy_cache- 是否自动清理旧版默认缓存目录(如
~/Library/Caches/ms-playwright)。默认仅告警不删除;显式设为true后,插件会在启动阶段发现 legacy 目录时自动清理。
远程连接配置¶
远程渲染分为两类:远程 Playwright(WS)与远程浏览器(CDP)。
远程 Playwright(WS)¶
render_playwright.connect_ws.endpoint- Playwright WS 连接地址。
参考:BrowserType.connect
远程浏览器(CDP)¶
render_playwright.connect_cdp.endpoint- Chromium CDP 连接地址。
参考:BrowserType.connect_over_cdp
WS / CDP 差异¶
| 维度 | 远程 Playwright(WS) | 远程浏览器(CDP) |
|---|---|---|
| 连接协议 | Playwright 协议(WebSocket) | Chrome DevTools Protocol |
| 配置项 | connect_ws.endpoint |
connect_cdp.endpoint |
| 引擎支持 | Playwright 管理的浏览器 | 仅 Chromium 系 |
| 常见部署 | Playwright Server 容器/服务 | 远程 Chrome/Chromium 实例 |
| 选型建议 | 需要更完整 Playwright 特性时优先 | 已有 CDP 基础设施时优先 |
资源解析配置¶
render_playwright.resource_resolve_modeoff/auto/strictrender_playwright.remote_local_resource_policypassthrough/filehost/errorrender_playwright.local_local_resource_policyfile/filehost/passthrough
Filehost 安全配置¶
render_playwright.filehost_allow_any_path- 是否允许 filehost 暴露任意本地路径。默认
false(推荐保持默认)。 render_playwright.filehost_allowed_paths- filehost 额外允许暴露的本地目录白名单(绝对/相对路径均可)。
未命中白名单且不在模板目录下的路径会被拒绝。 render_playwright.filehost_request_header_name- filehost 资源请求校验用 header 名。默认
X-HTMLRender-Filehost-Request。 render_playwright.filehost_request_header_value- filehost 资源请求校验 token。
配置后将直接使用该值,覆盖自动派生逻辑。 render_playwright.filehost_request_header_salt- filehost 自动派生 token 的盐值。默认
nonebot-plugin-htmlrender:filehost:guard:v1。
仅在filehost_request_header_value未配置时生效。
请求头校验默认生效
只要启用 filehost 解析策略,插件会在启动时安装 /filehost/* 请求头守卫,并在渲染请求中自动附带该 header。
Token 生成与消费行为
生成端与消费端使用同一规则,确保可识别一致:
1. 若配置 filehost_request_header_value,直接使用该值。
2. 否则按 sha256(filehost_request_header_salt + ":" + device_id) 生成。
其中 device_id 优先来自 py-machineid,不可用时回退为 unknown-device。