6 ポイント 投稿者 xguru 2024-08-08 | 1件のコメント | WhatsAppで共有
  • Puppeteer バージョン 23 から Firefox を正式にサポートし、Chrome と Firefox で自動化およびエンドツーエンドテストを簡単に実行できるようになった
    • const browser = await puppeteer.launch({browser: "firefox"});
  • Chrome と同様に、Puppeteer は Firefox の最新安定版をダウンロードして実行できる
  • Firefox サポートは、Firefox 専用の自動化プロトコルではなく、現在 Gecko と Chromium に実装されているクロスブラウザープロトコルである WebDriver BiDi を基盤としている
    • クロスブラウザープロトコルを使うことで、今後さらに多くのブラウザーを容易にサポートできる

技術的背景

  • 最近まで、ブラウザー自動化を望む人には 2 つの主要な選択肢があった
    • W3C WebDriver API を使う
    • ブラウザーごとの専用 API を使う(Chrome DevTools Protocol、Firefox Remote Debugging Protocol など)
  • どちらの選択肢にも大きなトレードオフがある
    • 従来の WebDriver API は HTTP ベースで、ブラウザーにコマンドを送り、応答を待つモデルを持つ
    • これはページを読み込み、要素が表示されているかを確認するような自動化シナリオにはうまく機能するが、ブラウザーからイベントを受け取ったり、複数のコマンドを同時に実行したりするような高度なユースケースには適していない
    • ブラウザーごとの API は通常、ブラウザー内の開発者ツールの複雑なユースケースを支えるよう設計されているため、WebDriver よりはるかに進んだ機能セットを提供する
  • そのため、ブラウザー自動化クライアントは、単一のプロトコルを使って複数のブラウザーをサポートしつつ機能セットを限定するか、より豊富な機能セットを提供する代わりに、サポート対象ブラウザーごとに個別実装を行うかを選ばなければならなかった
  • これは、優れたクロスブラウザー自動化を実現するためのコストと複雑さを増大させていた
  • LSP(Language Server Protocol)が開発される前の状況と似ていた
  • WebDriver BiDi は、これまでブラウザー固有のプロトコルに限定されていた自動化機能セットを標準化されたプロトコルへと持ち込み、あらゆるブラウザーと自動化ツールで利用できるようにする

Firefox の実験的な CDP(Chrome DevTools Protocol)サポートの削除

  • 初期のクロスブラウザーテスト改善の取り組みの一環として、テスト用途を支えるのに必要ないくつかのコマンドとイベントに限定した CDP の部分実装を提供していた
  • しかし、これがクロスブラウザー自動化の進むべき方向ではないことが明らかになり、この取り組みは中止された
  • その結果、保守されないままとなり、サイト分離のような現代的な Firefox 機能とも互換性がない
  • そのため、2024 年末にサポートが削除される予定

今後の計画

  • 依然としてサポートされていない API がいくつかある
    • CDP 専用 API
    • 追加の標準化作業が必要な API
    • 標準はあるが、まだ実装されていない API
  • ユーザーのフィードバックを通じて優先順位を決める予定

1件のコメント

 
xguru 2024-08-09

Hacker Newsの意見

  • PuppeteerチームがGoogleを離れてMicrosoftに移り、Playwrightの開発を継続したことは、Googleにとって大きな打撃だった

    • Googleは、ブラウザ自動化ツールがAIエージェント戦略にどれほど重要かを理解していなかった
    • GoogleはPuppeteerを諦めてMS/Playwrightに依存するか、Puppeteerのための新たな道を見つける必要があった
    • WebDriver BiDiは、Chrome DevTools Protocol(CDP)の利点を標準的な形で発展させたもの
  • WebDriver BiDiプロトコルはブラウザを生成するためのプロトコルではないが、ほぼ90%はその役割を果たせそう

    • GeckoはServo以降かなり進化しており、最近はかなり高性能
    • Chromiumベースのブラウザを作るほうが、Geckoベースのブラウザを作るよりはるかに簡単
    • APIを使って、ナビゲーション、リクエストのインターセプト、コンソールの読み取り、JSの実行などができる
    • ブラウザのクロームを取り除いて、カスタムブラウザを作れたらよいと思う
  • Playwrightは、すべての最新レンダリングエンジン(Chromium, WebKit, Firefox)をサポートしている

  • アクセシビリティツリーについて気になる

    • Playwrightでアクセシビリティツリーが削除された理由は、エンジンごとの内部データ構造のダンプだったため
    • アクセシビリティツリーは、ページ上のあらゆる意味的要素を要約したもので、スナップショットテストやBDDテストに非常に有用
    • アクセシビリティツリーが主要ブラウザエンジンで標準化されることを望む
    • Web開発の観点では、CSSやDOMのような他のレイヤーからもアクセスできるとよい