見出し画像

Playwright(Python向けのブラウザ自動化フレームワーク(マイクロソフト))

Python向けのブラウザ自動化フレームワークとしては、Seleniumが有名ですが、近年はMicrosoftが開発・提供している「Playwright」も注目を集めています。PlaywrightはもともとNode.js向けに開発されたものでしたが、Python・Java・.NETなど複数の言語バインディングが用意されており、近代的なブラウザ自動化・E2Eテストをより快適に行えるようになっています。

以下では、Python版Playwrightについて概要・機能・インストール方法・簡単なサンプルコードなどを紹介します。


1. Playwrightとは?

Playwright は、Microsoft がオープンソースで開発しているクロスブラウザの自動化ライブラリです。単一のAPIで、主要ブラウザ(Chromium系、Firefox、WebKit)を操作できます。ページ遷移やクリック、フォーム入力、スクリーンショット撮影などの操作をスクリプトで行うことができます。

特徴

  1. 複数ブラウザへの対応
    Chromium、Firefox、WebKit(Safariエンジン)を同一のAPIで操作できます。

  2. 高速で安定したテスト
    Seleniumと比べると、より高速かつ軽量に動作すると言われています。

  3. モダンな非同期操作
    Python版では同期的に記述もできますが、内部では効率的に非同期処理が行われています。

  4. 自動的な待機(インテリジェントなwait)
    要素の表示待ちやイベント完了待ちを内蔵しているため、手動で待機を挿入する必要が減ります。

  5. ヘッドレスモード/ヘッドフルモード両対応
    GUIのない環境でも実行でき、通常のブラウザウィンドウを表示させるモードでもテストできます。

  6. ビデオ・トレースの録画機能
    テスト時の操作を録画し、テストのデバッグやリグレッションテストに活用できます。


2. インストール

Python環境にPlaywrightを導入する手順は以下の通りです。

pip install playwright

その後、ブラウザのバイナリをダウンロードする必要があります。Playwrightでは便利なplaywright installコマンドが用意されており、これを実行すると各ブラウザエンジンが自動でダウンロードされます。

playwright install

これでPlaywrightをPythonで利用するための準備は完了です。

3. 基本的な使い方

3.1 最小限のサンプルコード

Playwrightでブラウザを起動し、ウェブサイトにアクセスしてタイトルを取得する簡単な例を示します。

from playwright.sync_api import sync_playwright

def main():
    # Playwrightの同期モードで起動
    with sync_playwright() as p:
        # Chromium, Firefox, WebKitを選択できる
        browser = p.chromium.launch(headless=True)  # headless=Falseにするとブラウザが目視できる
        page = browser.new_page()
        
        # 指定のURLにアクセス
        page.goto("https://www.google.com")
        
        # タイトルを取得
        print("Title:", page.title())
        
        # ブラウザを閉じる
        browser.close()

if __name__ == "__main__":
    main()

実行すると、Googleのページタイトル(通常は「Google」)が表示されます。

3.2 ヘッドレスモードとヘッドフルモード

  • headless=True で起動すると、ブラウザの画面を表示せずにバックグラウンドで操作します。

  • headless=False にするとブラウザが立ち上がり、目視で操作を確認しながら実行できます。

3.3 要素の操作

PlaywrightにはSeleniumと同じような感覚で要素を操作するAPIが用意されています。例えば、要素をクリックしたり、テキストを入力したりといった操作が可能です。

# 入力フォームへ文字を入力して、ボタンをクリックする例
page.fill('input[name="q"]', 'Playwright Python')  # テキストを入力
page.click('input[type="submit"]')                 # 検索ボタンなどをクリック

セレクタには、CSSセレクタやPlaywright独自のセレクタなどが利用できます。

3.4 スクリーンショットの取得

page.screenshot(path="example.png")

指定したパスへページ全体のスクリーンショットが保存されます。要素指定でのスクリーンショット取得にも対応しています。


4. より高度な機能

4.1 レスポンシブデザイン・デバイステスト

モバイルデバイス向けのテストや、画面サイズをエミュレートしたテストも可能です。

iphone_12 = p.devices["iPhone 12"]
page = browser.new_page(**iphone_12)
page.goto("https://example.com")

例ではiPhone 12のデバイス設定を読み込み、モバイル版表示のテストが行えます。

4.2 並列テスト

Playwrightはスレッドセーフであり、Pythonでマルチスレッドやマルチプロセスを使うことで並列テストが容易に行えます。公式ドキュメントではpytest-playwrightプラグインを利用した並列実行の例も紹介されています。

4.3 トレース録画とデバッグ

テスト時の操作やブラウザの状態を記録し、あとで再生・分析することができます。Playwrightのshow-trace機能で可視化可能です。

# 例)pytestを使う場合
pytest --tracing on

テスト結果からトレースを確認すると、要素の状態やネットワークリクエストなどのデバッグが容易になります。


5. Seleniumとの比較

  • 高速性・安定性
    一般的にPlaywrightはSeleniumよりも高速かつ安定しているといわれています。

  • モダンなブラウザ操作
    SeleniumはWebDriverプロトコルに準拠して各ブラウザを操作しますが、Playwrightはブラウザエンジンにより直接的にアクセスしています。そのため待機やDOM操作などがスムーズになるケースが多いです。

  • サポートしているブラウザ
    Seleniumはより幅広いブラウザ(IE含む)でテストできますが、Playwrightはモダンブラウザ(Chromium、Firefox、WebKit)に特化しています。

  • エコシステム
    Seleniumは歴史が長く、ブラウザ自動化のデファクトスタンダードとして広範なコミュニティとサポートがある一方、Playwrightは比較的新しく成長途上です。しかしMicrosoftのサポートにより急速に発展しています。


6. まとめ

Python版Playwrightは、モダンで強力なブラウザ自動化ツールとして注目を集めています。複数ブラウザを共通のAPIで操作できるため、E2Eテストを効率的に行ったり、スクレイピングを安定して実行したりする際に役立ちます。

  • メリット

    • 高速かつ安定した動作

    • 主要ブラウザに対する共通API

    • 自動待機やトレース機能などデバッグに役立つ機能が豊富

  • 注意点

    • モダンブラウザに特化している(IEなどの旧ブラウザを必要とする場合はSeleniumが主流)

    • 新しいプロジェクトのため、ドキュメントやサードパーティの情報量はSeleniumほどは多くない

テスト自動化やウェブサイトの操作自動化を考えている場合、Playwrightは非常に有力な選択肢です。公式ドキュメントやGitHubリポジトリを参照しながら、必要な機能を試してみてください。

いいなと思ったら応援しよう!