Seleniumより軽量なPlaywright(同期版)を使ってブラウザ操作を自動化

低スペックなサーバー上にSelenium&Pythonによるスクレイピングのコードを移植したらTimeoutした。

 

他の道を求めて、AIの神聖なる御神託を仰ぎ奉ったところ、

 

Playwright

 

の啓示を賜った。

 

やだ素敵!

 

Playwrightは、Microsoftによって開発されたオープンソースのWebブラウザの自動化ライブラリ。

もともとはNode.js用に開発されたが、Python版も提供されており、ヘッドレスブラウザの操作やテスト自動化に利用できる。

Googleトレンドをみる限り、ジワジワとPlaywrightはSeleniumの人気に迫りつつあるようだ。

 

スクレイピング目的ではなく「自動テスト」の文脈での人気度を統計的に絞り込むと、既にPlaywrightがCypressを追い越し、Seleniumより人気が高いこと確認できる。

全く知らなかった。使って無ければ恥ずかしいレベル。

ということで、今回のブログは ヤマなし、オチなしでサクッと紹介しておく。

Playwrightの利点としては次のようなものがある。

  • 軽量で高速: ヘッドレスモードでの動作が効率的
  • 簡潔なAPI: コードがシンプルで読みやすい
  • マルチブラウザ対応: Chromium、Firefox、WebKitをサポート

Web UI自動化テストフレームワークの特徴をまとめると、

10年以上の歴史を持つSelenium、最近人気のCypress、そして紹介するPlaywrightがある。

特徴 Playwright Selenium Cypress
サポートされている言語 JavaScript, Java, C#, Python JavaScript, Java, C#, Python, Ruby JavaScript/TypeScript
サポートされているブラウザ Chrome, Edge, Firefox, Safari Chrome, Edge, Firefox, Safari, IE Chrome, Edge, Firefox, Safari
テストフレームワーク 言語ごとのフレームワーク 言語ごとのフレームワーク 言語ごとのフレームワーク
使いやすさ 簡単に使える 設定が複雑で学習曲線がある 簡単に使える
コードの複雑さ シンプル やや複雑 シンプル
DOM操作 シンプル やや複雑 シンプル
コミュニティの成熟度 徐々に成長中 高い成熟度 かなり成熟している
ヘッドレスモードサポート はい はい はい
並列処理サポート サポートあり サポートあり CI/CDツールによる
iframeサポート サポートあり サポートあり プラグインを通じてサポート
ドライバ 必要なし ブラウザ固有のドライバが必要 必要なし
複数タブ操作 サポートあり サポートなし サポートあり
ドラッグ&ドロップ サポートあり サポートあり サポートあり
組み込みレポーティング はい いいえ はい
クロスオリジンサポート サポートあり サポートあり サポートあり
組み込みデバッグ はい いいえ はい
自動待機 はい いいえ はい
組み込みスクリーンショット/ビデオ はい ビデオ録画なし はい

Playwrightは非同期操作が基本だが、同期的に動作するAPIも提供されている。

これにより、非同期処理のオーバーヘッドも回避できる。

必要なパッケージのインストール方法

VENVを利用して仮想環境を使うとすると次のようになる。

ブラウザは

 

Chromium、Firefox、WebKit

 

から選択可能。

ブラウザ名 説明
Chromium 必要なリソースが比較的少なく、軽量な操作が可能
サーバー環境での動作が安定しており、軽量化のためのオプションも豊富
Firefox Chromiumに比べるとヘッドレスモードでのパフォーマンスが若干劣る
一部の操作でリソース消費が多くなる場合がある
WebKit 他のブラウザに比べてリソース消費が多い
Linux環境では、WebKitの依存パッケージが多く重くなる

Playwrightの強みは複数ブラウザを共通のAPIで操作できるため、E2Eテストを効率的に行ったり、スクレイピングを安定して実行したりする際に役立つ事。

だけど、低スペックなサーバーで動かすために、これもAIから御神託を賜りChromiumを選択した。

実装サンプルは次のようになる

これもAIから賜ったコードになる。

print文が多いけど、それを除くと非常にシンプルだと分かる。

おわりに

軽量と言うだけあり非力なサーバーでも動作した。

今のところ全く困ってないので、今後はSeleniumよりPlaywrightを使って実装を紹介していこうと思う。

 

というか、ソフトウェアエンジニアは もう不要じゃない?

10年後、僕は何の仕事をしてるんだろう……。

タイトルとURLをコピーしました