目錄
什麼是無頭瀏覽器(headless browser)? " >什麼是無頭瀏覽器(headless browser)?
什麼叫「無頭」瀏覽器? " >什麼叫「無頭」瀏覽器?
為什麼要偵測無頭瀏覽器? " >為什麼要偵測無頭瀏覽器?
偵測無頭瀏覽器" >偵測無頭瀏覽器
User agent" >User agent
外掛程式 Plugins" >外掛程式 Plugins
語言" >語言
WebGL" >WebGL
浏览器特征" >浏览器特征
加载失败的图片" >加载失败的图片
首頁 web前端 js教程 JavaScript怎麼偵測目前瀏覽器是無頭瀏覽器

JavaScript怎麼偵測目前瀏覽器是無頭瀏覽器

Jun 22, 2020 am 10:13 AM
javascript 瀏覽器

什麼是無頭瀏覽器(headless browser)?

無頭瀏覽器是指可以在圖形介面情況下執行的瀏覽器。我可以透過程式設計來控制無頭瀏覽器自動執行各種任務,例如做測試,給網頁截圖等。

什麼叫「無頭」瀏覽器?

「無頭」這個字源自於最初的「無頭電腦(Headless computer)」。維基百科關於的「無頭電腦」詞條:

無頭系統(headless system)是指已配置為無須顯示器(即「頭」)、鍵盤和滑鼠操作的電腦系統或設備。無頭系統通常透過網路連接控制,但也有部分無頭系統的設備需要透過RS-232串列連接進行設備的管理。伺服器通常採用無頭模式以降低運作成本。

為什麼要偵測無頭瀏覽器?

除了先前提到的兩個無害的使用案例,無頭瀏覽器可以被用來自動執行惡意任務。最常見的形式是做網路爬蟲,或偽裝訪問量,或探測網站漏洞。

一個非常流行的無頭瀏覽器是PhantomJS,因為它是基於Qt 框架,所以跟我們常見的瀏覽器相比有很多不同的特徵,因此有很多方法判斷出它。

但是,從chrome 59開始,Google發布了一款無頭Google瀏覽器。它跟PhantomJS不同,它是基於正統的谷歌瀏覽器開發出來的,不是基於其它的框架,這讓程式很難區分出它是正常瀏覽器還是無頭瀏覽器。

下面,我們將介紹幾種判斷程式是執行在普通瀏覽器還是無頭瀏覽器裡的方法。

偵測無頭瀏覽器

注意:這些方法只是在四種裝置(2 Linux, 2 Mac) 裡測試過,也是說, 肯定還有其他很多方法檢測無頭瀏覽器。

User agent

先介紹使用做最常見的一種判斷瀏覽器種類的方法,檢查User agent。在linux電腦裡Chrome version 59無頭瀏覽器的User agent值是:

「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/ 59.0.3071.115 Safari/537.36”

於是,我們可以這樣偵測是否是無頭Chrome瀏覽器:

 if (/HeadlessChrome/.test(window.navigator.userAgent)) {
  console.log("Chrome headless detected");
 }
登入後複製

#User agent 也可以從HTTP headers 取得。然而,這兩種情況都很容易偽造。

外掛程式 Plugins

navigator.plugins 會回傳一個陣列,裡面是目前瀏覽器裡的外掛程式資訊。通常,普通Chrome瀏覽器有一些預設插件,例如 Chrome PDF viewer 或 Google Native Client。相反,在無頭模式裡,沒有任何插件,回傳的是個空數組。

 if(navigator.plugins.length == 0) {
  console.log("It may be Chrome headless");
 }
登入後複製

語言

在Google瀏覽器裡,有兩個JavaScript屬性可以取得目前瀏覽器的語言設定: navigator.language 和navigator.languages。頭一個是指瀏覽器介面的語言,後者回傳的是數組,裡面儲存的是瀏覽器使用者的所有次選語言。然而,在無頭模式裡,navigator.languages 回傳的是個空字串。

if(navigator.languages == "") {
  console.log("Chrome headless detected");
 }
登入後複製

WebGL

WebGL 提供了一組能在HTML canvas 裡執行3D渲染的API。透過這些API,我們可以查詢出圖形驅動的 vendor 和 renderer 。

在linux上的普通Google瀏覽器裡,我們得到的 renderer 和 vendor 值為: “Google SwiftShader” 和 “Google Inc.”。

而在无头模式里,我们获得的一个是 “Mesa OffScreen”——它是没有使用任何 window 系统的渲染技术的名称,和 “Brian Paul” ——开源 Mesa 图形库的最初的程序。

 var canvas = document.createElement('canvas'); var gl = canvas.getContext('webgl');  
 var debugInfo = gl.getExtension('WEBGL_debug_renderer_info'); var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL); var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);  
 if(vendor == "Brian Paul" && renderer == "Mesa OffScreen") {
  console.log("Chrome headless detected");
 }
登入後複製

并不是所有版本的无头浏览器都有同样的这两个值。然而目前在无头浏览器里是“Mesa Offscreen” 和 “Brian Paul” 这两个值。

浏览器特征

Modernizr 可以探测出当前浏览器对HTML和CSS各种特性的支持程度。我发现,普通Chrome和无头Chrome里唯一的区别是,无头模式下没有 hairline 特征,它是用来检测是否支持 hidpi/retina hairlines的

 if(!Modernizr["hairline"]) {
  console.log("It may be Chrome headless");
 }
登入後複製

加载失败的图片

最后,我发现的最后一个方法,也是看起来最有效的方法,切入点是检查浏览器里不能正常加载的图片的高和宽。

在正常的Chrome里,未成功加载的图片的大小跟浏览器的zoom有关,但肯定不是零。而在无头Chrome浏览器里,这种图片的宽和高都是0。

 var body = document.getElementsByTagName("body")[0]; var image = document.createElement("img");
 image.src = "http://iloveponeydotcom32188.jg";
 image.setAttribute("id", "fakeimage");
 body.appendChild(image);
 image.onerror = function(){  if(image.width == 0 && image.height == 0) {
  console.log("Chrome headless detected");
  }
 }
登入後複製

这就是检测无头浏览器的详细步骤

推荐教程:《JS教程

以上是JavaScript怎麼偵測目前瀏覽器是無頭瀏覽器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

apache服務器是什麼 apache服務器是乾嘛的 apache服務器是什麼 apache服務器是乾嘛的 Apr 13, 2025 am 11:57 AM

Apache服務器是強大的Web服務器軟件,充當瀏覽器與網站服務器間的橋樑。 1. 它處理HTTP請求,根據請求返回網頁內容;2. 模塊化設計允許擴展功能,例如支持SSL加密和動態網頁;3. 配置文件(如虛擬主機配置)需謹慎設置,避免安全漏洞,並需優化性能參數,例如線程數和超時時間,才能構建高性能、安全的Web應用。

解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 Apr 18, 2025 am 09:24 AM

在使用CraftCMS開發網站時,常常會遇到資源文件緩存的問題,特別是當你頻繁更新CSS和JavaScript文件時,舊版本的文件可能仍然被瀏覽器緩存,導致用戶無法及時看到最新的更改。這個問題不僅影響用戶體驗,還會增加開發和調試的難度。最近,我在項目中遇到了類似的困擾,經過一番探索,我找到了wiejeben/craft-laravel-mix這個插件,它完美地解決了我的緩存問題。

HDFS文件系統在CentOS上的使用技巧 HDFS文件系統在CentOS上的使用技巧 Apr 14, 2025 pm 07:30 PM

CentOS系統下HDFS文件系統的安裝、配置及優化指南本文將指導您如何在CentOS系統上安裝、配置和優化Hadoop分佈式文件系統(HDFS)。 HDFS安裝與配置Java環境安裝:首先,確保已安裝合適的Java環境。編輯/etc/profile文件,添加以下內容,並將/usr/lib/java-1.8.0/jdk1.8.0_144替換為您的實際Java安裝路徑:exportJAVA_HOME=/usr/lib/java-1.8.0/jdk1.8.0_144exportPATH=$J

Tomcat日誌中如何查看線程狀態 Tomcat日誌中如何查看線程狀態 Apr 13, 2025 am 08:36 AM

要查看Tomcat日誌中的線程狀態,您可以採用以下幾種方法:TomcatManagerWeb界面:在瀏覽器中輸入Tomcat的管理地址(通常為http://localhost:8080/manager),登錄後即可查看線程池的狀態。 JMX監控:使用JMX監控工具(如JConsole)連接到Tomcat的MBean服務器,查看Tomcat線程池的狀態。在JConsole中選擇

Nginx性能監控與故障排查工具使用 Nginx性能監控與故障排查工具使用 Apr 13, 2025 pm 10:00 PM

Nginx性能監控與故障排查主要通過以下步驟進行:1.使用nginx-V查看版本信息,並啟用stub_status模塊監控活躍連接數、請求數和緩存命中率;2.利用top命令監控系統資源佔用,iostat和vmstat分別監控磁盤I/O和內存使用情況;3.使用tcpdump抓包分析網絡流量,排查網絡連接問題;4.合理配置worker進程數,避免並發處理能力不足或進程上下文切換開銷過大;5.正確配置Nginx緩存,避免緩存大小設置不當;6.通過分析Nginx日誌,例如使用awk和grep命令或ELK

Nginx日誌分析與統計,了解網站訪問情況 Nginx日誌分析與統計,了解網站訪問情況 Apr 13, 2025 pm 10:06 PM

本文介紹瞭如何分析Nginx日誌以提升網站性能和用戶體驗。 1.理解Nginx日誌格式,例如時間戳、IP地址、狀態碼等;2.使用awk等工具解析日誌,統計訪問量、錯誤率等指標;3.根據需求編寫更複雜的腳本或使用更高級工具,例如goaccess,分析不同維度的數據;4.對於海量日誌,考慮使用Hadoop或Spark等分佈式框架。通過分析日誌,可以識別網站訪問模式、改進內容策略,並最終優化網站性能和用戶體驗。

如何在CentOS上監控HDFS狀態 如何在CentOS上監控HDFS狀態 Apr 14, 2025 pm 07:33 PM

在CentOS系統上監控HDFS(Hadoop分佈式文件系統)狀態有多種途徑。本文將介紹幾種常用方法,助您選擇最合適的方案。 1.利用Hadoop自帶的WebUIHadoop自帶的Web界面提供集群狀態監控功能。步驟:確保Hadoop集群已啟動並運行。訪問WebUI:在瀏覽器中輸入http://:50070(Hadoop2.x)或http://:9870(Hadoop3.x)。默認用戶名和密碼通常為hdfs/hdfs。 2.命令行工具監控Hadoop提供一系列命令行工具,方便監

Debian OpenSSL如何配置HTTPS服務器 Debian OpenSSL如何配置HTTPS服務器 Apr 13, 2025 am 11:03 AM

在Debian系統上配置HTTPS服務器涉及幾個步驟,包括安裝必要的軟件、生成SSL證書、配置Web服務器(如Apache或Nginx)以使用SSL證書。以下是一個基本的指南,假設你使用的是ApacheWeb服務器。 1.安裝必要的軟件首先,確保你的系統是最新的,並安裝Apache和OpenSSL:sudoaptupdatesudoaptupgradesudoaptinsta

See all articles