検索
ホームページウェブフロントエンドjsチュートリアルJavaScript を使用して、現在のブラウザがヘッドレス ブラウザかどうかを検出します

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

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. languages があります。最初のものはブラウザ インターフェイスの言語を参照し、後者はブラウザ ユーザーが第 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」と、オープン ソースの元の名前である「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");
}

ヘッドレス ブラウザのすべてのバージョンが同じ 2 つの値を持つわけではありません。ただし、現在ヘッドレス ブラウザには、「Mesa Offscreen」と「Brian Paul」という 2 つの値があります。

ブラウザ機能

Modernizr は、HTML および CSS のさまざまな機能に対する現在のブラウザのサポートを検出できます。通常の Chrome とヘッドレス Chrome の唯一の違いは、ヘッドレス モードにはヘアライン機能がないことです。これは、hidpi/retina ヘアラインがサポートされているかどうかを検出するために使用されます。

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

画像の読み込みに失敗しました

最後に、私が見つけた最後の方法も最も効果的な方法ですが、出発点は、ブラウザに正常に読み込むことができない画像の高さと幅を確認することです。

通常の Chrome では、ロードに失敗した画像のサイズはブラウザのズームに関係しますが、決してゼロではありません。ヘッドレス 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");
    }
}

推奨チュートリアル: 「JavaScript ビデオ チュートリアル

以上がJavaScript を使用して、現在のブラウザがヘッドレス ブラウザかどうかを検出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はwebhekで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター