DUICUO

優れたオープンソースのヘッドレス ブラウザー 10 個 – 自動テスト、Web スクレイピング、RPA のための強力なツール。

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

今日のデジタル世界において、ヘッドレスブラウザは開発者やテスターに​​とって欠かせないツールとなっています。ヘッドレスブラウザとは、ウェブページをプログラムで操作できる一連のヘッドレスブラウザのことを指し、手作業の負担を軽減、あるいは代替することさえ可能です。

ヘッドレス ブラウザのアプリケーション シナリオは何ですか?

(1)データ抽出

ヘッドレス ブラウザは Web ページ コンテンツのスクレイピングに優れており、Web ページをナビゲートし、HTML を解析し、ユーザーフレンドリーな環境でデータを取得できるため、Web サイトから情報を効果的に抽出できます。

(2)自動テスト

ヘッドレスブラウザは、自動テストの分野で重要な役割を果たします。人間の介入なしにWebアプリケーション上でテストスクリプトを実行できるため、Webの機能テストとパフォーマンステストが可能になります。このアプローチはテストプロセスを加速し、最終製品の品質を保証します。

(3)パフォーマンス指標の最適化

ヘッドレスブラウザはパフォーマンス監視にも役立ちます。ページの読み込み時間や実行速度といった主要な指標を測定できるため、ウェブサイトの効率性に関する詳細な情報が得られます。これらのベンチマークは、ボトルネックの特定やユーザーエクスペリエンスの向上に役立ちます。

(4)ウェブページのスナップショットを作成する

ヘッドレス ブラウザは、いつでもプログラムで Web ページのスクリーンショットを生成できるため、ドキュメント作成、デバッグ、UI 検証に役立ちます。

(5)ユーザーの行動をシミュレートする

ユーザーインタラクションの自動化は、ヘッドレスブラウザの最も強力な機能の一つです。クリック、フォームの送信、その他のウェブ操作をシミュレートできます。実際のユーザー行動を模倣することで、複雑なワークフローをテストし、スムーズなユーザーエクスペリエンスを確保する上で極めて重要です。

以下に、高品質で無料のオープンソースのヘッドレスブラウザをいくつかご紹介します。開発者の皆様は、ご自身のニーズに最適なブラウザをお選びいただけます。

1. 操り人​​形師

https://github.com/puppeteer/puppeteer

GitHubスター: 88K

開発言語: Node/TypeScript/JavaScript

Puppeteerは、DevToolsプロトコルを介してChromeまたはChromiumを制御するためのAPIを実装したオープンソースのNode.jsライブラリです。Webスクレイピング、自動テスト、パフォーマンス監視などのブラウザタスクを自動化できます。

Puppeteerはヘッドレスモードをサポートしており、グラフィカルインターフェースなしで実行できます。スクリーンショットやPDFの生成、ユーザーインタラクションのシミュレーション、パフォーマンスメトリックのキャプチャなどの機能を提供します。強力な機能とWebプロジェクトへの統合の容易さから、広く利用されています。

インストール:

 npm i puppeteer

使用:

 import puppeteer from 'puppeteer'; (async () => { // Launch the browser and open a new blank page const browser = await puppeteer.launch(); const page = await browser.newPage(); // Navigate the page to a URL await page.goto('https://developer.chrome.com/'); // Set screen size await page.setViewport({width: 1080, height: 1024}); // Type into search box await page.type('.devsite-search-field', 'automate beyond recorder'); // Wait and click on first result const searchResultSelector = '.devsite-result-item-link'; await page.waitForSelector(searchResultSelector); await page.click(searchResultSelector); // Locate the full title with a unique string const textSelector = await page.waitForSelector( 'text/Customize and automate' ); const fullTitle = await textSelector?.evaluate(el => el.textContent); // Print the full title console.log('The title of this blog post is "%s".', fullTitle); await browser.close(); })();

2. Selenium WebDriver

セレン

GitHubスター: 3万

開発言語: Java、Python、Javascript、Ruby、.Net、C++、Rust などをサポートします。

Seleniumは、Webブラウザを自動化するための様々なツールとライブラリをカプセル化した、ブラウザ自動化フレームワークおよびエコシステムです。Seleniumは、主要なWebブラウザすべてと互換性があり、クロスランゲージエンコーディングをサポートするW3C WebDriver仕様に基づくインターフェースを提供します。

3. 劇作家

https://github.com/microsoft/playwright-python

GitHub スター: 11.4K+

プログラミング言語: Python

Playwrightは、Webブラウザの操作を自動化するためのPythonライブラリです。エンドツーエンドのテストをサポートし、強力な機能を備え、Chromium、Firefox、WebKitなど複数のブラウザをサポートしています。

Playwrightは、Webクロール、フォームの自動送信、UIテストなどのタスクを実行できるほか、ユーザーインタラクションのシミュレーションやスクリーンショットのキャプチャツールも提供しています。強力なAPIを備え、様々なWebアプリケーションテストのニーズを効果的にサポートします。

Python の依存関係をインストールします。

 pip install pytest-playwright playwright

デモ:

 import re from playwright.sync_api import Page, expect def test_has_title(page: Page): page.goto("https://playwright.dev/") # Expect a title "to contain" a substring. expect(page).to_have_title(re.compile("Playwright")) def test_get_started_link(page: Page): page.goto("https://playwright.dev/") # Click the get started link. page.get_by_role("link", name="Get started").click() # Expects page to have a heading with the name of Installation. expect(page.get_by_role("heading", name="Installation")).to_be_visible()

4. クロームドップ

https://github.com/chromedp/chromedp

GitHub スター: 10.8K+

プログラミング言語: Golang

Chromedpは、ブラウザでChrome DevToolsプロトコルを迅速に実装できるようにするGolangライブラリです。外部依存関係は必要ありません。

Golang のさまざまなアプリケーション例をご覧いただけます。

https://github.com/chromedp/examples

5. ヘッドレスクロームクローラー

https://github.com/yujiosaka/headless-chrome-crawler

GitHub スター: 5.5K

開発言語: JavaScript

このプロジェクトは、ヘッドレス Chrome ブラウザを活用した分散クローラー機能を提供します。

プロジェクトの主な特徴は次のとおりです。

  • 分散クロールをサポート
  • 同時実行性、レイテンシ、再試行を構成可能
  • 深さ優先探索と幅優先探索の両方のアルゴリズムをサポートします。
  • Redisキャッシュをサポート
  • CSV および JSON 形式での結果のエクスポートをサポートします。
  • 最大リクエスト数に達したら一時停止し、いつでも再開できます。
  • Webスクレイピング用のjQueryを自動挿入
  • スクリーンショットを証拠として保存します。
  • アナログデバイスとユーザーエージェント
  • 優先キューを使用してクロール効率を向上させる
  • robots.txtに従う

6. スプラッシュ

https://github.com/scrapinghub/splash

GitHub スター: 4.1K

プログラミング言語: Python

Splashは、JavaScriptレンダリングをサポートするHTTP APIサービスです。TwistedとQt5を使用してPython 3で実装された、HTTP APIを備えた軽量ブラウザです。

スピード、軽量、ステートレスな特性により、使いやすく宣伝しやすいです。

7. スプリンター

https://github.com/cobrateam/splinter

GitHub スター: 2.7K

プログラミング言語: Python

Splinter は、Web アプリケーションの自動化に使用できる Python ベースの Web アプリケーション テスト ツールであり、シンプルで一貫性のある API を提供します。

URLへの移動、フォームへの入力、ページ要素の操作といったブラウザアクションを自動化できます。Splinterは、Selenium WebDriver、Google Chrome、Firefoxなど、様々なWebドライバーをサポートしています。

ブラウザを制御するための非常にユーザーフレンドリーな API を提供し、自動テスト プロセスの開発を簡素化し、Web アプリケーションの開発者やテスターに​​とって貴重なツールになります。

主な機能は次のとおりです。

  • 簡単に習得可能: API は直感的ですぐに習得できるように設計されています。
  • より高速なコーディング: ツールと競合することなく、ブラウザとの迅速かつ信頼性の高い自動対話を実現します。
  • 強力: 実際のユースケースに合わせて設計されており、一般的な自動化の不具合を防止します。
  • 柔軟性: 下位レベルのツールへのアクセスが隠されることはありません。
  • 強力: 複数の自動化ドライバー (Selenium、Django、Flask、ZopeTestBrowser) をサポートします。

8. サーバーレスクローム

https://github.com/adieuadieu/serverless-chrome

GitHub スター: 2.9K

開発言語: JavaScript

これはサーバーレスChromeです。このプロジェクトの主な目標は、サーバーレス関数の呼び出し時にヘッドレスChromeを使用するためのフレームワークを提供することです。Serverless-chromeは、Chromeバイナリのビルドとバンドル、そしてサーバーレス関数の実行時にChromeが確実に実行されるようにする役割を担っています。さらに、このプロジェクトは、ページのスクリーンショットの取得、PDFへの印刷、ページスクレイピングといった一般的なパターンに対応したサービスも提供しています。

9. フェルム

https://github.com/rubycdp/ferrum

GitHub スター: 1.7K

プログラミング言語: Ruby

Ferrumは、Chromeの自動化を実装するためのRubyライブラリです。Seleniumのようなドライバを必要とせずにブラウザを制御する方法を提供します。Ferrumは、Webページの閲覧、要素の操作、スクリーンショットのキャプチャなどのタスクを処理できます。

ウェブスクレイピング、自動テスト、ユーザーインタラクションのシミュレーションに非常に役立ちます。Ferrumはヘッドレスモードと非ヘッドレスモードの両方での実行をサポートしており、幅広い自動化ニーズに対応できます。

10. サーフィン

https://github.com/headzoo/surf

GitHub スター: 1.5K

SurfはGo言語のライブラリです。SurfはWebコンテンツを抽出するためのGo言語ソリューションであるだけでなく、プログラムで制御可能な仮想Webブラウザも実装しています。

Surf は、Cookie 管理、履歴、ブックマーク、ユーザー エージェント、フォーム送信、jQuery スタイルの CSS セレクタを使用した DOM 選択とトラバーサル、イメージ スクレイピング、スタイルシートなどの機能を備え、Web ブラウザーのように機能するように設計されています。インストール:

 go get gopkg.in/headzoo/surf.v1

デモ:

 package main import ( "gopkg.in/headzoo/surf.v1" "fmt" ) func main() { bow := surf.NewBrowser() err := bow.Open("http://golang.org") if err != nil { panic(err) } // Outputs: "The Go Programming Language" fmt.Println(bow.Title()) }