Playwright入門考察|Seleniumとの違いと自動待機の優位性
Playwright入門考察|Seleniumとの違いと自動待機の優位性
更新日:2025年6月28日
1. Playwrightの基本概念とSeleniumとの比較
Playwrightは、Microsoft社が2020年に公開したNode.js向けブラウザ自動操作ライブラリである。Chrome、Firefox、Safariの3大ブラウザに対応し、単一のAPIで統一的な操作が可能となっている。
1.1 Playwrightの動作アーキテクチャ
Playwrightの動作フローを以下に示す。JavaScriptコードからPlaywright APIを介してブラウザを操作する構造となっている。
(JavaScript)
API
(Chrome等)
1.2 Seleniumとの機能比較
Playwrightの最大の特徴は「自動待機(Auto-waiting)」機能である。従来のSeleniumでは、ページ読み込み完了前に要素操作を試みるとエラーが発生するため、明示的な待機処理の実装が必要であった。
| 観点 | Selenium | Playwright |
|---|---|---|
| 公開年 | 2004年 | 2020年 |
| 開発元 | ThoughtWorks → OSS | Microsoft |
| 実行速度 | 遅め | 高速 |
| 安定性 | 不安定になりやすい | 安定 |
| 待機処理 | 明示的な実装が必要 | 自動待機機能あり |
| 対応ブラウザ | 多数(IE含む) | Chrome, Firefox, Safari |
| 対応言語 | Java, Python, C#等 | JS, TS, Python, .NET, Java |
Playwrightでは、要素が表示・有効化されるまで自動的に待機するため、テストコードの記述量が大幅に削減される。これにより、フレーキー(不安定)なテストの発生率が低下する。
1.3 browserとpageの関係
Playwrightのオブジェクトモデルでは、browserがブラウザ本体、pageがタブに対応する。1つのbrowserインスタンスから複数のpageを生成可能である。
(タブ)
(タブ)
(タブ)
2. 実践的なコード例と操作一覧
2.1 基本的なセットアップ
Playwrightのインストールは以下のコマンドで行う。初回実行時にChrome、Firefox、Safariのブラウザバイナリが自動的にダウンロードされる。
npm install playwright
最小構成のコード例を以下に示す。非同期処理(async/await)を用いてブラウザ操作を記述する。
const { chromium } = require('playwright');
async function main() {
const browser = await chromium.launch(); // ブラウザ起動
const page = await browser.newPage(); // 新しいタブを開く
await page.goto('https://example.com'); // URLにアクセス
console.log(await page.title()); // タイトルを取得
await browser.close(); // ブラウザを閉じる
}
main();
2.2 セレクタと主要操作
要素の指定にはCSSセレクタまたはテキストセレクタを使用する。Playwrightではtext=構文により、表示テキストでの要素指定が可能である。
| セレクタ種別 | 記法 | 対象要素 |
|---|---|---|
| ID | #submit | id="submit" |
| クラス | .button | class="button" |
| タグ | button | <button>要素 |
| テキスト | text=ログイン | 「ログイン」表示要素 |
| 操作 | メソッド | 説明 |
|---|---|---|
| クリック | page.click(selector) | 要素をクリック |
| 文字入力 | page.fill(selector, text) | 入力欄に文字を入力 |
| テキスト取得 | page.textContent(selector) | 要素のテキストを取得 |
| 待機 | page.waitForSelector(selector) | 要素の出現を待機 |
| スクリーンショット | page.screenshot({ path }) | 画面を画像保存 |
| ページ遷移 | page.goto(url) | 指定URLに移動 |
2.3 ログイン処理のシーケンス
典型的なログイン処理の流れを以下に示す。フォーム入力からページ遷移までの一連の操作を可視化した。
2.4 実行モードの比較
Playwrightには画面表示の有無によって2つの実行モードが存在する。開発・デバッグ時はヘッドフルモード、本番運用時はヘッドレスモードの使用が推奨される。
| モード | 画面 | 用途 | 設定 |
|---|---|---|---|
| ヘッドフル | 表示される | 開発・デバッグ | headless: false |
| ヘッドレス | 表示されない | 本番運用・CI/CD | headless: true(デフォルト) |
// ヘッドフルモード(画面表示あり)
const browser = await chromium.launch({ headless: false });
// ヘッドレスモード(画面表示なし、デフォルト)
const browser = await chromium.launch({ headless: true });
3. エラーハンドリングと運用のポイント
3.1 待機処理の設計指針
待機処理の実装においては、固定時間待機(waitForTimeout)の使用を避け、条件ベースの待機を採用すべきである。固定時間待機は、待機時間が短すぎると要素未出現でエラー、長すぎると実行時間の無駄が発生するためである。
短い→エラー / 長い→無駄
無駄なし・エラーなし
| 方式 | コード例 | 評価 |
|---|---|---|
| 固定時間待機 | await page.waitForTimeout(3000) | 非推奨 |
| セレクタ待機 | await page.waitForSelector('#result') | 推奨 |
| ナビゲーション待機 | await page.waitForNavigation() | 推奨 |
3.2 エラーハンドリングパターン
堅牢な自動化スクリプトには、適切なエラーハンドリングが不可欠である。タイムアウト設定、try-catch構文、エラー時のスクリーンショット保存を組み合わせることで、問題発生時の原因特定が容易になる。
async function login(page, username, password) {
try {
await page.fill('#username', username);
await page.fill('#password', password);
await page.click('#login', { timeout: 5000 });
await page.waitForNavigation();
console.log('ログイン成功');
return true;
} catch (error) {
console.log('ログイン失敗:', error.message);
await page.screenshot({ path: 'error.png' });
return false;
}
}
実践アドバイス
- タイムアウト設定:操作ごとに適切なタイムアウトを設定し、無限待機を防止する
- スクリーンショット:エラー発生時に画面を保存し、デバッグに活用する
- リトライ機構:ネットワーク不安定時に備え、一定回数のリトライを実装する
- ログ出力:処理の進捗をログに出力し、問題箇所の特定を容易にする
3.3 ページ遷移時の待機テクニック
クリック操作とページ遷移が連動する場合、Promise.allを用いて両方のイベントを同時に待機する手法が有効である。
// クリックとページ遷移を同時に待機
await Promise.all([
page.waitForNavigation(),
page.click('#login')
]);
3.4 学習チェックリスト
| 項目 | 確認内容 |
|---|---|
| 基本概念 | Playwrightの役割と特徴を説明できる |
| 比較理解 | Seleniumとの違い(特に自動待機)を説明できる |
| オブジェクトモデル | browserとpageの関係を理解している |
| セレクタ | #id、.class、text=の使い分けができる |
| 実行モード | ヘッドレス/ヘッドフルの用途を説明できる |
| 待機処理 | 固定時間待機が非推奨である理由を説明できる |
| エラー処理 | try-catchでエラーハンドリングを実装できる |
Playwrightは、自動待機機能、高速な実行速度、安定した動作により、Seleniumの課題を解決したモダンなブラウザ自動操作ライブラリである。特にテスト自動化やWebスクレイピングにおいて、開発効率と信頼性の向上に寄与する。
本記事は2025年6月時点の情報に基づいています。Playwrightのバージョンアップにより仕様が変更される可能性があります。最新情報は公式ドキュメント(playwright.dev)をご確認ください。
他の記事を見る(10件)
- AutoCADリバースエンジニアリング完全ガイド2025|中学生から始める実物からの設計図作成
- 人力発電の可能性を徹底調査|自転車からジム、そして全人類発電まで
- 実務経験者のためのプログラミング良書考察|17年の開発経験から見る技術書選び
- AWS Kiro autonomous agent考察|自律型AIコーディングエージェントの実像
- AIベースの自動テストツール考察2025|コード品質保証の次世代アプローチ
- Cursor vs Windsurf 開発効率比較考察|実際の導入シーンでの使い分け
- Playwright入門考察|Seleniumとの違いと自動待機の優位性
- プログラミングの起源・歴史考察|19世紀から現代AIまでの進化を辿る
- E.F.Codd リレーショナルモデル論文考察|1970年の革命的データベース理論
- Chrome DevTools 143 新機能分析|MCP連携とトレース共有の進化
PR:関連サービス



コメント (0)
まだコメントはありません。