使用 --bot-dpr 设置设备像素比策略
为 BotBrowser 会话选择 profile、real 或 advanced 显示缩放,并在桌面、移动端和 per-context 工作流中保持 DPR 一致。
显示缩放是身份的一部分
window.devicePixelRatio 告诉页面一个 CSS 像素背后对应多少个物理像素。普通办公笔记本通常是 1 或 1.25,Retina MacBook 是 2,很多手机是 3。同一个值还会参与 CSS resolution 媒体查询、响应式图片选择和布局计算,因此它和屏幕尺寸、窗口尺寸、色深一起构成显示身份。
当配置文件描述的是一块显示器,而宿主机的显示器是另一块时,同一个会话里就同时存在两套显示信息。BotBrowser 152.0.7977.76 新增了 --bot-dpr,让这个选择变成显式配置,而不是由浏览器恰好运行在哪台机器上来决定。
三种模式
| 模式 | 适用场景 | 结果 |
|---|---|---|
profile | 由配置文件定义显示身份 | 使用配置文件的显示缩放。默认值。 |
real | 会话应跟随宿主机显示器 | 使用宿主机的显示缩放。 |
advanced | 宿主机和配置文件的缩放无法对齐 | 为该工作流使用兼容性回退方案。 |
profile 是默认值,因此现有启动命令的行为保持不变。只有部署确实需要时才设置其他模式。
启动
chromium-browser \
--bot-profile="/path/to/profile.enc" \
--bot-dpr=profile
当宿主机显示器就是预期的显示环境时,切换到 real,例如代表操作者自己显示器的有头工作站会话:
chromium-browser \
--bot-profile="/path/to/profile.enc" \
--bot-dpr=real
advanced 是兼容性回退方案,不是精度更高的模式。它保留配置文件的缩放值,只做有限的布局调整,而不是重新缩放整个页面。基于配置文件的会话优先使用 profile,有意跟随宿主机显示器时使用 real。只有两者都不适用时才使用 advanced,并且在评估期间保持配置文件、浏览器版本和启动配置不变。
与窗口和屏幕配合使用
DPR、窗口和屏幕共同构成一套显示配置。要一起修改,不要在多次运行之间逐个调整。
chromium-browser \
--bot-profile="/path/to/profile.enc" \
--bot-dpr=profile \
--bot-window=profile \
--bot-screen=profile
桌面有头会话默认使用宿主机的窗口和屏幕尺寸。如果有头会话必须报告配置文件中的尺寸,请在 --bot-dpr=profile 旁边同时设置 --bot-window=profile 和 --bot-screen=profile。屏幕和窗口指南介绍了尺寸相关标志,设备模拟介绍了移动端配置文件。
Per-context 会话
使用 per-context 指纹时,要在 BrowserContext 创建第一个页面或 worker 之前设置 --bot-dpr。该策略在整个生命周期内都绑定在这个 context 的显示和布局行为上。
const { browserContextId } = await client.send('Target.createBrowserContext', {
botbrowserFlags: [
'--bot-profile=/path/to/profile.enc',
'--bot-dpr=profile'
]
});
当主浏览器和 per-context 配置文件代表同一台设备时,使用相同的模式。只有当 context 有意代表不同的显示环境时,才选择不同的模式。扩展浏览器上下文介绍了更完整的 context 生命周期。
验证
- 使用选定的配置文件和一种 DPR 模式启动会话。
- 整个检查过程中保持窗口、屏幕和 DPR 不变。
- 使用相同的配置文件和模式启动第二个会话,确认显示行为一致。
- 对比不同模式时,只修改
--bot-dpr,并记录每次运行的完整启动命令。
验证浏览器指纹列出了可以查看所报告显示值的公开检测工具。
故障排查
| 情况 | 操作 |
|---|---|
| 期望使用配置文件的显示行为 | --bot-dpr=profile |
| 会话必须跟随宿主机显示器 | --bot-dpr=real |
| 宿主机和配置文件的缩放无法对齐 | --bot-dpr=advanced |
| 不同 context 之间显示不一致 | 在每个 context 创建页面或 worker 之前设置模式 |
| 有头模式的尺寸跟随了宿主机 | 添加 --bot-window=profile 和 --bot-screen=profile |
完整的标志说明见 CLI 标志参考。