首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JavaScript检测无头模式下运行的铬

从JavaScript检测无头模式下运行的铬
EN

Stack Overflow用户
提问于 2017-06-06 18:38:21
回答 4查看 16.4K关注 0票数 58

随着Chrome 59的发布,“无头”模式是现在有了在Linux和macOS上的稳定版本(很快也会使用Chrome 60)。这使得我们可以运行一个功能齐全的Chrome版本,而不需要任何可见的UI,这是一个很好的自动化测试功能。下面是一些例子。

代码语言:javascript
复制
chrome --headless --disable-gpu --dump-dom https://stackoverflow.com/

在我的JavaScript测试运行程序中,我希望尽可能多地记录有关正在使用的浏览器的信息,以帮助隔离问题。例如,我记录了navigator的许多属性,包括当前的浏览器插件:

代码语言:javascript
复制
JSON.stringify(Array.from(navigator.plugins).map(p => p.name))
代码语言:javascript
复制
["Chrome PDF Viewer","Widevine Content Decryption Module","Shockwave Flash","Native Client","Chrome PDF Viewer"]

我的理解是,Chrome在无头模式下的行为应该是相同的,但我有足够的经验来怀疑一个可能会显著改变渲染流水线的新特性。

现在,我将在这两种模式下运行测试。我想要测试运行记录是否使用无头模式。我可以在测试配置中传递这些信息,但我更希望有一个纯JavaScript解决方案,可以将其构建到测试运行程序本身中。但是,我还没有找到任何显示无头模式是否处于活动状态的浏览器界面。

有没有办法从JavaScript中检测Chrome是否以无头模式运行?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-22 10:43:02

您可以检查navigator.webdriver属性,即:

webdriver接口的navigator只读属性指示用户代理是否由自动化控制。 ..。 在以下情况下,navigator.webdriver属性为真: 使用Chrome--enable-automation--headless标志。 Firefox传递marionette.enabled首选项或--marionette标志。

W3C WebDriver建议描述它如下:

例如,navigator.webdriver为合作用户代理定义了一种标准方式,用于通知文档由WebDriver控制,以便在自动化过程中触发备用代码路径。

票数 19
EN

Stack Overflow用户

发布于 2017-06-08 19:08:30

用户代理字符串Chrome。这可能是您要寻找的信号,因此您可以使用:

代码语言:javascript
复制
/\bHeadlessChrome\//.test(navigator.userAgent)

其他令人感兴趣的信号包括:

  • 看起来window.chrome在无头时是没有定义的。
  • [innerWidth, innerHeight][800, 600] (在headless_browser.cc中硬编码),而[outerWidth, outerHeight][0, 0] (这通常不应该发生)。
票数 36
EN

Stack Overflow用户

发布于 2017-06-06 18:44:38

navigator.plugins应该包含浏览器中存在的插件数组(比如Flash、ActiveX或Java )。对于headless浏览器,它是可空的。

作为安全检查的一部分,它可以使用alert,对于无头的,它将被忽略:

代码语言:javascript
复制
var start = Date.now();
alert('Press OK');
var elapse = Date.now() - start;
if (elapse < 15) {
    console.log("headless environment detected");
}

在OWASP 2014对话无头浏览器捉迷藏(视频幻灯片)中,Sergey Shekyan和Bei Zhang讨论了几种检测无头浏览器的技术。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44397492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档