ヘッドレスブラウザは、Webページにアクセスするソフトウェアの一部ですが、実際のユーザーには表示されません。グラフィカル・ユーザー・インターフェース【GUI】のないWebブラウザです。Webページの内容を他のプログラムに提供するために使われることが多く、例えば、あるプログラムがWebページにアクセスして、そのページの幅や使用されているフォント、特定の要素の座標などの情報を抽出するのに使われます。
ヘッドレスブラウザは、他のテスト手法では通常利用できないJavaScriptやAJAXを実行することができます。ヘッドレスブラウザを使用する目的は以下の通りです。
・自動テストの実行
・Webページのデータのスクレイピング【Webサイトのコンテンツの中から特定の情報だけを抽出・取集する技術・行為】
・Webページのスクリーンショットを取得
・Webページのインタラクションの自動化
・DDOS攻撃やバナーインプレッション【広告の表示回数】の増加
この記事では、完全またはそれに近いヘッドレス実装を提供し、ブラウザ環境をシミュレートするブラウザをご紹介します。
【タイトルをクリックすると、該当のWebサイトが開きます(一部を除く)】
10. Zombie.js
Zombie.jsは、Node.jsのシミュレートブラウザ環境です。DOMのレンダリングは行わず、DOMイベントのサポートも限定的です。サブミットボタンを押すなど、ページコンテンツと関わるためのフル機能のAPI【異なるソフトウェアとソフトウェアを繋ぐインターフェース】を提供します。このツールはフルブラウザよりも高速に動作しますが、一般的なWebサイトのほとんどを正しく解釈することはできません。
HTTPやHTTPSでスクリプト、XHRリクエスト、HTMLページを取得することは、リソースを含む限り、舞台裏で行われます。Zombieは取得したリソースの履歴を検査し、リソースの読み込みに関するエラーのトラブルシューティングに役立ちます。
9. X-Ray
X-Rayは、各Webページのスクラップ方法に柔軟性を与える、完全にコンポーザブルなAPIを備えています。このツールは、オブジェクトの配列、ネストされたオブジェクト構造、文字列、ページネーション【ページ割付け】、クローラーの同時実行、文字列の遅延、タイムアウト、スロットル、プラグイン可能なドライバーをサポートしています。
X-Rayは、ユーザーが複数のインスタンスを組み合わせることで、より強力になります。さらに、「コレクションのコレクション」をサポートしており、すべてのリストのすべての項目をスマートに選択することができます。
8. Erik
ErikはWebKitをベースにしており、JavaScriptを使ってWebページにアクセスしたり操作したりするための機能テストを実行するのに役立ちます。WebKitとHTMLパーサKannaをベースにしており、Swift言語をサポートしていることが知られています。macOS 10.11とiOS 9(またはそれ以降のバージョン)では、HTTPSを使用する必要があります。
7. AngleSharp
AngleSharpは、SVG、HTML、MathMLなどの山括弧ベースのハイパーテキストを解析するための.NETライブラリです。パーサ【構文解析を行うためのプログラムの総称】はW3C仕様に従って開発されており、CSSも解析可能です。さらに、このライブラリは標準準拠、インタラクティブ性、拡張性に重点を置いています。
AngleSharpは、便利な抽象化機能(型ヘルパー)、完全機能のDOM、フォーム送信、ナビゲーション、強化されたLINQ、標準準拠を特徴としています。.NET framework 4.5、Windows 8.1、Xamarin.Android/iOS、Silverlight 5など、幅広いプラットフォームをサポートするPCLとして開発されています。
6. SlimerJS
SlimerJSを使用すると、外部JavaScriptでWebページを操作できます。例えば、Webページを開いたり、リンクをクリックしたり、コンテンツを変更したりすることができます。主に機能テスト、ページの自動化、画面キャプチャ、ネットワーク監視に使用されています。
SlimerJSは、MozillaのレンダリングエンジンであるGeckoで動作します。まだネイティブにヘッドレスではありませんが、Linux上でxvfbを使用することで、自分でヘッドレス化することができます。
5. Splash
SplashはHTTP APIを備えた軽量ブラウザで、QTとTwistedを使ってPythonで実装されています。JavaScriptのWebページを適切にレンダリングし、ページと関わることもできます。ページによって開始されたリクエストとレスポンスに関する情報を抽出することができます。このプロジェクトは2013年にScrapingHubで開始され、DARPA【アメリカ国防高等研究計画局】から部分的に資金提供を受けています。
Splashを使うと、複数のWebページを並列処理したり、Luaブラウジングスクリプトを書いたり、HARフォーマットで詳細なレンダリングデータを取得したり、画像をオフにしたり、Adblockルールを使ってレンダリングを高速化したり、Splash-Jupyter Notebooksで Luaスクリプトを開発したりできます。
4. TrifleJS
TrifleJSは、ヘッドレスInternet Explorerのスクリプト可能なブラウザで、スクリプト化されたテストを実行するためのV8 JavaScriptエンジン、ページをレンダリングするためのTridentレイアウトエンジン、Internet Explorerを制御するための.NET WebBrowserオブジェクトを使用しています。
API部分のほとんどはPhantomJSの移植としてコード化されており、自動テストに最適です。Phantomに精通している人であれば、TrifleJSの使い方はすでにご存知でしょう。IEは市場シェアを失い続けているため、MicrosoftがIEの廃止を決定した場合、このプロジェクト全体が役に立たなくなります。
3. HtmlUnit
もともとJavaで書かれたHtmlUnitは、Rhinoエンジンを使用して、部分的なレンダリング機能とともにAJAXとJavaScriptをサポートしています。Webページのテスト自動化、Webスクレイピング、Webサイトのコンテンツのダウンロードによく使用されます。高レベルのAPIを提供し、あらゆるブラウザをシミュレートするように設定できます。
HtmlUnitは、基本的なHTTP認証、ページの自動リダイレクト、HTTPSセキュリティに対応するのに十分な機能を備えています。また、XML DOM、テキスト、またはリンク、フォーム、テーブルのコレクションとして返されたページを分析するJavaテストコードを可能にします。さらに、HtmlUnitDriverの実装速度は、他のWebDriverに比べて高速です。
2. PhantomJS
Ariya Hidayatによって開発されたPhantomJSは、スクリプトテストの実行にJavaScriptCoreを使用し、WebページのレンダリングにWebKitレイアウトエンジンを使用しています。CSSセレクタ、SVG、DOM処理、Canvasなど、様々なWeb標準を高速かつネイティブにサポートしています。
PhantomJSは、ヘッドレスWebページテスト、画面キャプチャ、ページ自動化、ネットワーク監視のためのオプションソリューションです。PhantomJSは、Webサイトに対する攻撃を自動化する手段として使用されることが多く、正当なユーザートラフィックを模倣し、攻撃緩和技術を複雑にする可能性があります。
1. Chrome
世界で最も人気のあるブラウザであるGoogle Chromeが、ヘッドレス環境をサポートするようになりました(バージョン59以上)。ChromiumとBlinkレンダリングエンジンが提供するモダンなWebプラットフォームの機能をすべてコマンドラインで利用できます。
便利なコマンドラインフラグがいくつかありますので、Headless Chromeをプログラムでスクリプト化する必要はありません。C++アプリケーションに埋め込むためのライブラリとして開発でき、DevTools接続でブラウザを制御するのと似ていますが、mojoサービスやネットワークなど、より多くのカスタマイズキーを提供します。
Embedder APIを使用すると、アプリにヘッドレスライブラリを追加できます。これは、ネットワーキングや実行ループのような低レベルの適応ポイントのデフォルト実装を提供します。さらに、ヘッドレスクライアントAPIを使用すると、ブラウザを駆動し、ロードされたWebページと対話することができます。