この解説記事では次のことを説明します。
- ヘッドレスブラウザとは
- プログラムでヘッドレスブラウザを操作する方法
- 人気のヘッドレスブラウザライブラリを紹介
さっそく始めましょう!
ヘッドレスブラウザとは
ヘッドレスブラウザとは、グラフィカルユーザーインターフェース(GUI)のないウェブブラウザのことです。ウェブページを視覚的に表示する従来のブラウザとは異なり、ヘッドレスブラウザは完全にバックグラウンドで動作します。
ここまで聞くと、「なるほど、でもなぜ?」と疑問に思われるかもしれません。現在のブラウザがリソースを大量に消費すること周知の事実です。そこでページを視覚的にレンダリングして表示する必要をなくすことで、多くのリソースを節約できます。適切なツールを見つけることができれば、効率的にブラウザを自動操作できるようになります。
ヘッドレスブラウザを使ってテストやウェブスクレイピングを行う方法
ヘッドレスブラウザにはグラフィカルインターフェースがありません。それでも、インターネットを閲覧するためのツールとして十分に機能します。とはいえ、ヘッドレスブラウザだけではエンドツーエンドのテストやウェブスクレイピングをきちんと行えません。ヘッドレスブラウザのテストやスクレイピングを行う能力を最大限に引き出すためには、ブラウザ自動操作ツールと併用する必要があります。
こういったツールと組み合わせることで、ウェブページ上の人間の操作を模倣させ、プログラムを通じて特定の操作を実行するようにブラウザに指示を送れるようになります。ヘッドレスブラウザライブラリを利用することで、これを実現できます。ヘッドレスブライサのライブラリはたくさん存在しますが、ここではその中でも人気のライブラリを紹介していきます。
人気のヘッドレスブラウザツールを比較する際に考慮すべきこと
ヘッドレスブラウザツールを評価する際に留意すべき最も重要な点は次のとおりです。
- 長所と短所:そのヘッドレスブラウザツールの主な利点と欠点
- サポートされているプログラミング言語:ライブラリがどのプログラミング言語をサポートしているか。
- 対応ブラウザ:どのブラウザを操作できるか。
- GitHubの星の数:GitHub上のヘッドレスブラウザライブラリのリポジトリにある星の数。
- 最新リリース:これを書いている時点でのパッケージの最終更新日。
- リポジトリ:ツールの詳細を確認できるライブラリのリポジトリへのリンク。
それではこれらの基準でライブラリを比較しながら、人気のヘッドレスブラウザライブラリについて学んでいきましょう。
人気のヘッドレスブラウザライブラリの8選
では、人気のヘッドレスブラウザライブラリを紹介していきます。
1.Playwright
Playwrightはウェブテストとブラウザ自動操作のためのフレームワークです。Playwrightは2020年に初めてコミットされたモダンなテクノロジーで、これを使えば一貫性のあるAPIを介してChromiumやFirefox、WebKitを操作できます。
Playwrightは様々なブラウザで自動操作ができるように開発されたライブラリで、汎用性があり、高速、高性能で、信頼性も高い自動操作を実現します。あらゆるプラットフォームでヘッドレスブラウザの操作を行え、どのようなブラウザにも対応しています。詳細についてはPythonや.NET、Java用のPlaywrightの該当するドキュメントを参照してください。
👍長所:
- クロスプラットフォーム、クロスブラウザ、クロス言語
- 全てのツールの中で最も包括的な機能とAPIドキュメントを備える
- 週間ダウンロード数は数百万回
- モダン、高速、効率が良い
- 視覚的にわかりやすいデバッグ、自動待機、再試行、調整可能なレポーターなどの数多くの機能
- 直感的でキーワード選びに一貫性のあるAPI
- 現在最も勢いのあるヘッドレスブラウザ技術
- マイクロソフトが開発・保守
👎短所:
- 多くの依存関係が必要
💻 サポートしているプログラミング言語:JavaScript、Python、C#、Java
🌐 対応ブラウザ:Chromiumベースのブラウザ(Chrome、Edgeなど)、Mozilla Firefox、Webkitベースのブラウザ(Safariなど)
⭐ GitHubの星の数:60万300
🔗 リポジトリ:GitHub
2.Selenium
SeleniumはITコミュニティで最も広く使用されているブラウザ自動操作フレームワーク、およびエコシステムの1つです。このライブラリの人気は非常に高く、非公式の移植版もいくつかあります。Selenium APIは標準化されており、多くのプログラミング言語に公式に対応しています。
Seleniumはヘッドレスブラウザの自動操作を行うための様々なツールやライブラリがまとめられた包括的なプロジェクトです。さらに、W3C WebDriverに対応したインフラストラクチャも提供しています。
このツールには、UIテストとスクレイピングに必要なAPIが全て備えられています。一方で、自動待機や高度なデバッグなどの複雑な機能は備えられていません。
👍長所:
- クロスプラットフォーム、クロスブラウザ、クロス言語
- 単なるライブラリではなく、包括的なプロジェクト
- さまざまなプログラミング言語のドキュメンテーション
- オンラインリソースが豊富
- 20年以上開発が継続中
👎短所:
- 自動待機などの高度な機能はない
- 他のツールと比べて少し遅い
💻 サポートされているプログラミング言語: Java、Python、JavaScript、C#、Ruby。非公式の移植版でその他の多くの言語もサポート
🌐 対応ブラウザ:Chromiumベースのブラウザ(Chrome、Edgeなど)、Mozilla Firefox、Webkitベースのブラウザ(Safariなど)
⭐ GitHubの星の数:2万9,000
🔗 リポジトリ:GitHub
3.Puppeteer
PuppeteerはNode.jsのライブラリで、DevToolsプロトコルを介してChromeやChromiumを操作するための高レベルのAPIが備わっています。Puppeteerではデフォルトでブラウザをヘッドレスモードで開きますが、フルGUIモードを開くように設定することもできます。
Puppeteerは毎週約500万回ダウンロードされているため、ITエコシステム内で最も人気のヘッドレスブラウザライブラリの一つだと言えるでしょう。以前はChromeのみをサポートしていましたが、試験的に導入された機能を使えばFirefoxも操作できるようになりました。
Pupeeteerでウェブスクレイピングをするためのガイドで詳細をご覧ください。
👍長所:
- ページのスクリーンショット機能、ページのPDF変換機能
- 自動操作でフォーム送信、UIテスト、キーボード入力などをシミュレート
- Chrome拡張機能のテストをサポート
- Chrome for Testingの互換バージョンを自動的にダウンロード
- TypeScriptのタイプがパッケージに付属
- 直感的なAPI
👎短所:
- WebKitに非対応
- クロス言語ではない
💻 サポートされているプログラミング言語:JavaScript
🌐 対応ブラウザ:Chrome, Chromium、Firefox (試験導入)
⭐ GitHubの星の数:8万6,400
🔗 リポジトリ:GitHub
4.Cypress
Cypressはモダンウェブブラウザ向けに開発されたツールで、フロントエンドテストに必要な機能が全て揃っています。開発者とQAエンジニアがモダンなアプリケーションをテストする際に直面する主な課題に対処することが、このプロジェクトの目標です。
このライブラリはテストという点では特に優れていますが、汎用のブラウザ自動操作ツールではありません。つまり、推奨ユースケース以外で使用する場合の機能が十分に備えられていません。例えば、Cypressは2つのブラウザインスタンスを同時に処理できません。一方で、テスト目的でヘッドレスブラウザを操作する場合には最適です。
👍長所:
- モダンウェブアプリのE2Eテスト用のAPIを完備
- 自動待機、ネットワークトラフィック制御などの数多くの機能
- エンドツーエンドテスト、コンポーネントテスト、統合テスト、ユニットテストなどをサポート
- タイムトラベル機能と高度なデバッグ機能
- Cypressクラウドプラットフォームとの統合
- CI/CDとの統合が簡単
👎短所:
- スクレイピング機能は不十分
- 汎用の自動化ツールではない
💻 サポートされているプログラミング言語:JavaScript
🌐 対応ブラウザ:Chrome、Chromium、Edge、Firefox
⭐ GitHubの星の数:4万5,900
🔗 リポジトリ:GitHub
5. chromedp
chromedp は、GoのChrome DevToolsプロトコルを介してヘッドレスブラウザの操作ができるオールインワンライブラリです。高レベルのDevToolsプロトコルクライアントで、ウェブスクレイピングやユニットテストもサポートしています。
プレーンテキストやCSSセレクター、XPath言語を使用してページ内のノードを検索するためのAPIが全て備わっています。また、タッチ操作をシミュレートしたり、モバイルデバイスをエミュレートしたりする機能もあります。
👍長所:
- 使用例を載せるためだけに作られたレポジトリも用意されている
- CSSセレクターとXPath言語の両方をサポート
- モバイルデバイスのエミュレーションとタッチ操作のシミュレーション
- Linuxでの効率的なリソース処理に最適化
- スクリーンショット機能
👎短所:
- E2Eテスト機能は不十分
- Chromeのみをサポート
- 人気がある他のブラウザ自動操作ライブラリに比べてリリースが遅い
💻 サポートされているプログラミング言語:Go
🌐 対応ブラウザ:Chrome
⭐ GitHubの星の数:1万200
🔗 リポジトリ:GitHub
6.Splash
SplashはJavaScriptレンダリングツールで、これを通じて軽量なウェブブラウザを利用できます。TwistedとQT5を使用し、Python 3で実装されています。QT reactorを使うことで、QTメインループを利用したWebKitでの並行処理ができ、完全に非同期で操作を実行できます。
Splashはスクリプト操作ができるブラウザであり、Luaスクリプトを使用してカスタム操作ロジックを定義できます。Splashはいくつかライブラリに統合されていますが、一般的にはscrapy-splashライブラリを通じて使用します。
👍長所:
- Scrapyにネイティブに統合
- 並列処理とパフォーマンスを重視
- Splash-Jupyterノートブック上でLuaスクリプトを開発可能
👎短所:
- WindowsはDocker経由でのみサポート
- Lua言語はあまり人気がなく、それほど簡単でもない
- JavaScriptレンダリングツールであり、完全なヘッドレスブラウザツールではない
- 更新頻度が遅い
💻 サポートされているプログラミング言語:Python
🌐 対応ブラウザ:独自のJavaScriptエンジン
⭐ GitHubの星の数:4,000
🔗 リポジトリ:GitHub
7.Headless Chrome
Headless ChromeはRustのライブラリで、DevToolsプロトコルを介してヘッドレスChromeやChromiumを操作するための高レベルAPIが備えられています。このプロジェクトはPuppeteerのRust移植版として誕生しましたが、保守頻度ではPuppeteerに劣っています。Puppeteerの機能の全てを継承しているわけではありませんが、それでもテストやスクレイピング用に人気のヘッドレスブラウザツールの1つです。
👍長所:
- ページの要素または全体のスクリーンショットをサポート
- テスト用にネットワークリクエストを監視
- ページをPDFに変換する機能
- Linux、macOS、およびWindows用のChromium/Chromeバイナリを自動でダウンロード
- スクレイピング用APIを完備
- APIドキュメンテーション
👎短所:
- iframeのサポート、タッチスクリーン操作シミュレーション、様々なネットワーク状態のシミュレーションなど、不足している機能が多々あり。DevToolsを使えばレイテンシー、スループット、オフラインステータス、「接続タイプ(connection type)」を変更可能
- HTTP Basic認証に非対応
- サポートされているブラウザが少ない
- Rustでのみ利用可能
- オンラインで利用できるリソースが少ない
💻 サポートされているプログラミング言語:Rust
🌐 対応ブラウザ:Chrome, Chromium
⭐ GitHubの星の数:2,000
🔗 リポジトリ:GitHub
8.HTMLUnit
HTMLUnitはJavaエコシステム用のGUIを使用しないブラウザです。Rhino JavaScript エンジンをコア言語として使用し、ページへのアクセス、フォームへの入力、リンクのクリックなどを行うAPIを提供します。ユーザーが普段ブラウザで行う操作をシミュレートできるようにすることがこのブラウザの目標です。
JavaScriptに非常に良く対応しており、AJAXやその他の最新テクノロジーも使用できます。ブラウザの設定に基づき、ChromeやFirefox、Internet Explorerをシミュレートできます。
👍長所:
- 長年開発が継続されている
- 豊富な使用例を含む詳細なドキュメント
- 多くの書籍でも言及されている
👎短所:
- 現在でもInternet Explorerをサポートしているが、Internet Explorerは何年も前に廃止されている
- 最新のブラウザと比較して機能が不十分
- 人気のある他のヘッドレスブラウザライブラリと比べて、APIが少ない
💻 サポートされているプログラミング言語:Java
🌐 対応ブラウザ:Rhino JavaScriptエンジンをベースに使用。Chrome、Firefox、またはInternet Explorerをシミュレート可能
GitHubの星の数:806
🔗 リポジトリ:GitHub
人気のヘッドレスブラウザ:一覧表
以下の概要表で、人気のヘッドレスブラウザツールを比較してみましょう。
ツール | 言語 | ブラウザ | GitHubの星の数 | 最終更新日 |
Playwright | JavaScript、Python、C#、Java | Chromiumベースのブラウザ、Firefox、WebKitベースのブラウザ | 6万300 | 2024年3月3日 |
Selenium | Java、Python、JavaScript、C#、Ruby | Chromiumベースのブラウザ、Firefox、WebKitベースのブラウザ | 2万9,000 | 2024年2月18日 |
Puppeteer | JavaScript | Chrome, Chromium、Firefox(試験導入) | 8万6,400 | 2024年3月15日 |
Cypress | JavaScript | Chrome, Chromium、Edge、Firefox | 4万5,900 | 2024年3月13日 |
chromedp | Go | Chrome | 1万200 | 2023年8月5日 |
Splash | Python | 独自エンジン | 4,000 | 2020年6月16日 |
Headless Chrome | Rust | Chrome、Chromium | 2,000 | 2024年1月27日 |
HTMLUnit | Java | Rhinoエンジン | 806 | 2024年3月13日 |
まとめ
このガイドでは人気のあるブラウザ自動操作ライブラリについての理解を深めながら、様々な言語やツールでヘッドレスブラウザを操作する方法について学習しました。どのプログラミング言語を使うべきかは、使用者が開発している個々のプロジェクトの要件によって変わります。今回は人気のヘッドレスブラウザライブラリについて学ぶことができました。
どれを選ぶにしても、ヘッドレスブラウザのプログラムからリクエストを送ると、ボット対策システムに目をつけられてしまうことに注意してください。つまり、ボット対策システムによって、スクレイピング操作がブロックされる可能性があるのです。幸いなことに、Bright Dataを使えばこの問題を解決できます。
Scraping Browserは細かな調節にも対応するGUI付きのクラウドベースでブラウザで、Puppeteerを含むあらゆるブラウザ自動操作ライブラリと統合できます。様々な機能が備わったソリューションであり、CAPTCHAの回答、IPブロックや通信頻度制限の回避などができます。つまり、これを使えば制限やブロックなしを回避しつつ、ブラウザからあらゆるウェブページにアクセスできるのです。
スクレイピングソリューションについてのご相談がある場合、当社のデータ専門家にお問い合わせください。