javascript - 网站如何能够检测到使用 Chromium(如 Electron)的浏览器不是 Chrome 本身?
问题描述
我在 Electron 中制作了一个应用程序(它使用 Chromium 来呈现 Web 内容)来帮助在 SoundCloud 等特定网站上执行一些任务。
这是webview
代码:
<webview partition="persist:default" webpreferences="nodeIntegration=no, contextIsolation=no, enableRemoteModule=yes, worldSafeExecuteJavaScript=yes, webSecurity=yes, allowRunningInsecureContent=no, plugins=yes, scrollBounce=yes, navigateOnDragDrop=yes, safeDialogs=yes, backgroundThrottling=no, nativeWindowOpen=yes, spellcheck=yes" src="https://soundcloud.com/discover" allowpopups=""></webview>
我正在使用最新版本的 Electron,并将用户代理设置为webview
通常是 Chrome 的用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36
这是navigator
在控制台中记录对象的结果webview
:
这是在navigator
同一台计算机上登录真正的 Chrome 浏览器的结果:
但是,某些网站能够以某种方式检测到浏览器不是真正的 Chrome。例如,当尝试在 中登录 SoundCloud 时webview
,会出现错误“我们的机器人认为您是机器人”,而登录 Chrome 本身时不会出现此错误。
SoundCloud(和其他网站)还能检查哪些内容,使其相信它不是真正的 Chrome 的合法版本?该对象是我能想到的所有对象,但它似乎与真实 Chromenavigator
中的对象完全相同。navigator
webview 中没有执行其他代码,因此站点必须在登录前检查某些内容。
解决方案
推荐阅读
- java - android java Map 与自定义 BiFunction 合并
- r - 轧制 min 无需更换
- performance - 为什么 glTexSubImage2D 这么慢?
- php - 如果两个表中都存在相同的 ID,如何从 Select DropDown 中隐藏选项
- javascript - 如何使用jquery获取单击的href标签的数据属性
- c# - 未知(子类)类型的通用集合
- python-3.x - 更新从读取字典的 for 循环生成的 QLineEdit 文本框中的文本
- c++ - 从多个进程和同一进程内注册相同的 ETW TraceLogging 提供程序 GUID
- .net-core - 如何在 dotnet core 中使用存储库模式创建 API
- git - 在github上创建github页面,但是本地是最新的?