网站提示浏览器不受支持时,怎么检查 User Agent
网站在 Pake 应用里提示浏览器不受支持时,可以先检查是不是 User Agent 字符串被拦了,试着从网站认可的浏览器里复制这个字符串,粘贴到高级里的 User Agent。这只会改变应用报给网站的身份,不会更换网页引擎,也不会补上它缺少的能力。
网站为什么检查 User Agent
浏览器发出的每个请求都带着 User-Agent 头,MDN 的说明是,这个字符串让服务器能识别发出请求的应用、操作系统、厂商和版本。有些网站读到它之后,会把不认识的都挡在门外,所以用系统网页视图做的应用,可能被带到一个“请使用 Chrome”的页面,同一个网站在 Safari 或 Edge 里却是正常的。
MDN 的用 User Agent 做浏览器检测称这种做法为 UA 嗅探,说它很难做可靠,常常是 bug 的来源,部分原因是浏览器本来就会假扮成别的浏览器,并建议改用特性检测,也就是检查某个功能是否可用,不可用时走备用方案。只做嗅探的网站换一个字符串就能满足,做特性检测的网站,或者出于别的原因拒绝你的网站,换了也没用。
Pake 默认发送什么
新应用的高级里 User Agent 一栏是空的,输入框的提示在 Mac 上写着“默认使用 Safari 的 User Agent”,在 Windows 上写着“默认使用 Chrome 的 User Agent”。空的意思是使用 Pake 内置的、对应平台的字符串,本文核对的这个 Pake 版本里,Mac 上是一条 Safari 26.0 的字符串,Windows 上是一条 Chrome 147.0.0.0 的字符串,所以在两个系统上应用本来就把自己报成常见的桌面浏览器,多数网站不需要再改。
字符串只是一个标签,不等于引擎。Pake 用系统网页视图绘制页面,Mac 上是 WebKit,Windows 上是基于 Chromium 的 WebView2。Windows 上的字符串写的是 Chrome,实际的引擎是本机装的那个 WebView2 运行时,微软单独更新它,不跟 Pake 走。这种差距也是为什么字符串里的版本号看着很新,网站的真实特性检测仍然可能不通过。
这个设置是怎么到达页面的
Pake 在创建窗口时把字符串交给网页视图,此后网站在 User-Agent 请求头和页面脚本里的 navigator.userAgent 看到的都是它,应用打开的每个页面都一样。它是整个应用的一个值,不能按页面或域名分别设置,也不会改变渲染页面用的引擎。它和其他选项一样,需要点保存修改并重新打开应用才生效。
给一个应用设置 User Agent
新应用在点创建应用之前,先打开页面上的高级。已经做好的应用,去我的应用,点编辑,打开高级,改这一栏,再点保存修改。编辑是原地重装同一个应用,登录状态还在。想恢复,就清空这一栏再保存一次,见创建应用和管理应用。
字符串从网站认可的浏览器里复制,不要凭记忆手敲。在那个浏览器里任意打开一个页面,打开开发者控制台,运行:
navigator.userAgent
MDN 的 navigator.userAgent 页面确认它返回当前浏览器的 User Agent 字符串,把结果粘贴到 User Agent 里。
MDN 给出的桌面 Chrome 字符串例子是这样的:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
它只用来看格式。版本号随每次浏览器发布而变,有些网站会拒绝它认为太旧的版本,所以要从自己的浏览器里复制当前的字符串。
确认它生效了
要确认改动,就用带开发者工具的版本。命令行里加上 --debug,Mac 上按 Command、Option 加 I 打开工具,Windows 上按 Ctrl、Shift 加 I,在控制台里运行 navigator.userAgent。开发者工具只在调试构建里有,所以用一个临时构建来测,日常用的应用保持干净。字符串和你设的一致,网站却仍然拒绝,就说明原因不在字符串上,把这一栏改回空,再看下面几种情况。
User Agent 帮不上忙的情况
- 网站测的是功能。 页面检查的是网页视图没有的接口时,换名字也没用。在 WebKit 视图上声称自己是 Chrome,还可能让网站发来这个视图跑不了的代码,改完页面反而坏了,就清空这一栏。
- 网站读的是别的东西。 浏览器还有一个独立的接口
navigator.userAgentData,MDN 把它标为有限可用,因为它在一些最常用的浏览器里不工作。如果网站通过这个接口判断浏览器,需要单独检查它实际返回的内容,不能只看 User Agent 字符串。 - 服务商拒绝内嵌登录。 Google 等服务商在政策上就禁止在内嵌网页视图里登录,换 User Agent 不是被支持的绕过办法,请在浏览器或官方客户端里用这个网站,参见登录排查和常见问题。Windows 上登录弹窗点了没反应时,先试运行偏好里的新窗口在应用内打开。
- 人机验证一直循环。 CLI 常见问题提到,一些网站前面的 Cloudflare 验证,比如 ChatGPT,可能把系统网页视图标记出来,即使设了自定义 User Agent 也一直转圈,验证检测的是引擎,Pake 里没有可靠的解决办法。
CLI 参数
配好 CLI 之后,在打包时传入字符串:
pake https://example.com --name Example --user-agent "<这里粘贴当前的 User Agent>"
--user-agent 默认是空的,CLI 常见问题把它列为登录、上传或其他网站功能出问题时最先尝试的办法,另外还有用来做小脚本修复的 --inject,参数见 CLI 参数说明,其他窗口和页面调整见调整网页应用的窗口。
常见问题
在 Mac 上假扮 Chrome 安全吗?
允许,但可能适得其反。网站以为对面是 Chrome,就可能发来为 Chrome 引擎写的代码,Mac 上的 WebKit 视图未必跑得了,页面坏了就清空这一栏。
User Agent 能按网站分别设吗?
不能,一个字符串管整个应用,两个网站要不同的字符串,就各做一个应用。
浏览器升级之后我设的 User Agent 还管用吗?
它自己不会更新。Pake 发送的就是你保存的那串文字,网站开始要求更新的版本时,要重新复制一条新的。
