目次
ヘッドレスブラウザとは何ですか? " >ヘッドレスブラウザとは何ですか?
「ヘッドレス」ブラウザとは何ですか? " >「ヘッドレス」ブラウザとは何ですか?
ヘッドレス ブラウザを検出する必要があるのはなぜですか? " >ヘッドレス ブラウザを検出する必要があるのはなぜですか?
ヘッドレス ブラウザの検出" >ヘッドレス ブラウザの検出
ユーザー エージェント" >ユーザー エージェント
Plugins Plugins" >Plugins Plugins
Language" >Language
WebGL" >WebGL
浏览器特征" >浏览器特征
加载失败的图片" >加载失败的图片
ホームページ ウェブフロントエンド jsチュートリアル JavaScript は、現在のブラウザがヘッドレス ブラウザであることをどのように検出しますか?

JavaScript は、現在のブラウザがヘッドレス ブラウザであることをどのように検出しますか?

Jun 22, 2020 am 10:13 AM
javascript ブラウザ

ヘッドレスブラウザとは何ですか?

ヘッドレス ブラウザとは、グラフィカル インターフェイスで実行できるブラウザを指します。ヘッドレス ブラウザを制御して、テストの実行や Web ページのスクリーンショットの取得など、プログラミングを通じてさまざまなタスクを自動的に実行できます。

「ヘッドレス」ブラウザとは何ですか?

「ヘッドレス」という言葉は、元の「ヘッドレス コンピューター」に由来します。 Wikipedia の「ヘッドレス コンピューター」のエントリ:

ヘッドレス システムとは、モニター (つまり「ヘッド」)、キーボード、および操作されるコンピューター システムまたはデバイスなしで構成されたシステムです。ネズミ。ヘッドレス システムは通常、ネットワーク接続を通じて制御されますが、一部のヘッドレス システム デバイスでは RS-232 シリアル接続によるデバイス管理が必要です。サーバーは通常、運用コストを削減するためにヘッドレス モードを使用します。

ヘッドレス ブラウザを検出する必要があるのはなぜですか?

前述の 2 つの無害な使用例に加えて、ヘッドレス ブラウザを使用して悪意のあるタスクを自動化することもできます。最も一般的な形式は、Web をクロールしたり、トラフィックを偽装したり、Web サイトの脆弱性を検出したりすることです。

非常に人気のあるヘッドレス ブラウザは PhantomJS です。これは Qt フレームワークに基づいているため、一般的なブラウザと比較して多くの異なる機能を備えているため、判断する方法がたくさんあります。それ。

ただし、Chrome 59 から、Google はヘッドレス Google Chrome をリリースしました。 PhantomJS との違いは、他のフレームワークではなく、オーソドックスな Google Chrome をベースに開発されているため、プログラムが通常のブラウザかヘッドレス ブラウザかを区別することが困難です。

以下では、プログラムが通常のブラウザで実行されているかヘッドレス ブラウザで実行されているかを判断するいくつかの方法を紹介します。

ヘッドレス ブラウザの検出

注: これらの方法は 4 台のデバイス (Linux 2 台、Mac 2 台) でのみテストされています。ヘッドレス ブラウザを検出する方法は他にもたくさんあります。

ユーザー エージェント

まず、ブラウザの種類を判断する最も一般的な方法として、ユーザー エージェントを確認する方法を紹介します。 Linux コンピュータの場合、Chrome バージョン 59 ヘッドレス ブラウザのユーザー エージェント値は次のとおりです:

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) HeadlessChrome/ 59.0.3071.115 Safari/537.36”

したがって、次のようにヘッドレス Chrome ブラウザであるかどうかを検出できます。

 if (/HeadlessChrome/.test(window.navigator.userAgent)) {
  console.log("Chrome headless detected");
 }
ログイン後にコピー

ユーザー エージェントは次のようにすることができます。 HTTP ヘッダーからも取得されます。ただし、どちらの場合も簡単に偽造されます。

Plugins Plugins

navigator.plugins は、現在のブラウザのプラグイン情報を含む配列を返します。通常、通常の Chrome ブラウザには、Chrome PDF ビューアや Google ネイティブ クライアントなど、いくつかのデフォルトのプラグインが含まれています。対照的に、ヘッドレス モードではプラグインは存在せず、空の配列が返されます。

 if(navigator.plugins.length == 0) {
  console.log("It may be Chrome headless");
 }
ログイン後にコピー

Language

Google Chrome には、現在のブラウザ言語設定を取得できる 2 つの JavaScript プロパティ、navigator. language と navigator があります。言語。最初のものはブラウザ インターフェイスの言語を参照し、後者はブラウザ ユーザーが第 2 に選択したすべての言語を格納する配列を返します。ただし、ヘッドレス モードでは、navigator.langages は空の文字列を返します。

if(navigator.languages == "") {
  console.log("Chrome headless detected");
 }
ログイン後にコピー

WebGL

WebGL は、HTML キャンバスで 3D レンダリングを実行できる API のセットを提供します。これらの API を通じて、グラフィックス ドライバーのベンダーとレンダラーにクエリを実行できます。

Linux 上の通常の Google Chrome では、取得するレンダラとベンダーの値は「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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Apache Serverとは何ですか? Apache Serverとは何ですか? Apache Serverとは何ですか? Apache Serverとは何ですか? Apr 13, 2025 am 11:57 AM

Apache Serverは、ブラウザとWebサイトサーバーの間のブリッジとして機能する強力なWebサーバーソフトウェアです。 1.リクエストに基づいてHTTPリクエストを処理し、Webページコンテンツを返します。 2。モジュラー設計により、SSL暗号化や動的Webページのサポートなど、拡張機能が可能になります。 3.構成ファイル(仮想ホスト構成など)は、セキュリティの脆弱性を回避し、スレッドカウントやタイムアウト時間などのパフォーマンスパラメーターを最適化して、高性能および安全なWebアプリケーションを構築するために慎重に設定する必要があります。

CENTOSでHDFSファイルシステムを使用するためのヒント CENTOSでHDFSファイルシステムを使用するためのヒント Apr 14, 2025 pm 07:30 PM

CENTOSシステムの下でのHDFSファイルシステム用のインストール、構成、および最適化ガイドこの記事では、CENTOSシステムにHadoop分散ファイルシステム(HDFS)をインストール、構成、最適化する方法をガイドします。 HDFSのインストールと構成Java環境のインストール:最初に、適切なJava環境がインストールされていることを確認してください。 /etc/プロフィールファイルを編集し、以下を追加して、/usr/lib/java-1.8.0/jdk1.8.0_144を実際のJavaインストールパスで置き換えます:Exportjava_home =/usr/lib/Java-1.8.0/JDK1.8.0_144EXPORTPATH = $ J

クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 Apr 18, 2025 am 09:24 AM

CraftCMSを使用してWebサイトを開発する場合、特にCSSやJavaScriptファイルを頻繁に更新する場合、リソースファイルのキャッシュ問題が発生することがよくあります。古いバージョンのファイルがブラウザによってキャッシュされ、ユーザーが最新の変更を表示しないようにすることがあります。この問題は、ユーザーエクスペリエンスに影響を与えるだけでなく、開発とデバッグの難しさを高めます。最近、プロジェクトで同様のトラブルに遭遇し、いくつかの調査の後、プラグインWiejeben/Craft-Laravel-Mixが見つかりました。

Nginxパフォーマンスの監視とトラブルシューティングツール Nginxパフォーマンスの監視とトラブルシューティングツール Apr 13, 2025 pm 10:00 PM

Nginxパフォーマンスの監視とトラブルシューティングは、主に次の手順を通じて実行されます。1。nginx-Vを使用してバージョン情報を表示し、Stub_statusモジュールを有効にしてアクティブな接続、要求、キャッシュヒット率の数を監視します。 2. TOPコマンドを使用して、システムリソースの職業、IOSTAT、VMSTATモニターディスクI/O、およびメモリ使用量をそれぞれ監視します。 3. TCPDUMPを使用してパケットをキャプチャしてネットワークトラフィックを分析し、ネットワーク接続の問題をトラブルシューティングします。 4.ワーカープロセスの数を適切に構成して、同時処理機能不足または過度のプロセスコンテキストスイッチングオーバーヘッドを回避します。 5.不適切なキャッシュサイズの設定を回避するように、nginxキャッシュを正しく構成します。 6.AWKコマンドやエルクの使用など、nginxログを分析することにより

debian opensslでHTTPSサーバーを構成する方法 debian opensslでHTTPSサーバーを構成する方法 Apr 13, 2025 am 11:03 AM

DebianシステムでHTTPSサーバーの構成には、必要なソフトウェアのインストール、SSL証明書の生成、SSL証明書を使用するWebサーバー(ApacheやNginxなど)の構成など、いくつかのステップが含まれます。 Apachewebサーバーを使用していると仮定して、基本的なガイドです。 1.最初に必要なソフトウェアをインストールし、システムが最新であることを確認し、ApacheとOpenSSL:sudoaptupdatesudoaptupgraysudoaptinstaをインストールしてください

CENTOSのHDFSステータスを監視する方法 CENTOSのHDFSステータスを監視する方法 Apr 14, 2025 pm 07:33 PM

CENTOSシステム上のHDF(Hadoop分散ファイルシステム)のステータスを監視する方法はたくさんあります。この記事では、最も適切なソリューションを選択するのに役立ついくつかの一般的に使用される方法を紹介します。 1. Hadoop独自のWebUIを使用して、Hadoop独自のWebインターフェイスを使用して、クラスターステータス監視機能を提供します。手順:Hadoopクラスターが稼働していることを確認してください。 WebUIへのアクセス:ブラウザにhttp://:50070(hadoop2.x)またはhttp://:9870(hadoop3.x)を入力します。デフォルトのユーザー名とパスワードは通常、HDFS/HDFSです。 2。コマンドラインツール監視Hadoopは、監視を容易にする一連のコマンドラインツールを提供します

Nginxサーバーのインストールとクイック構成ガイド Nginxサーバーのインストールとクイック構成ガイド Apr 13, 2025 pm 10:18 PM

この記事では、Nginxの構造と構成方法を紹介します。 1. nginxをインストール:centosでsudoyumininstallnginxを使用し、ubuntuでsudoapt-getinstallnginxを使用し、インストール後にsudosystemctlstartnginxから始めます。 2。基本構成:/etc/nginx/nginx.confファイルを変更し、主にサーバーブロックのリスニング(ポート)およびルート(サイトルートディレクトリ)命令を変更し、変更後、sudosystemctlrestartnginxを使用して再起動して有効にします。 3。仮想ホスト構成:ingginx.co

Tomcatログでスレッドステータスを表示する方法 Tomcatログでスレッドステータスを表示する方法 Apr 13, 2025 am 08:36 AM

Tomcatログのスレッドステータスを表示するには、次の方法を使用できます。TomcatManagerWebインターフェイス:ブラウザでTomcat(通常はhttp:// localhost:8080/manager)の管理アドレスを入力します。 Tomcatのスレッドプール。 jconsoleで選択します

See all articles