「Playwright」で始めるモダンなWebスクレイピング&テストの世界

投稿者: | 2026-07-15

皆さんも、インターネット上で欲しい情報を見つけたり、Webサイトの動作を確認したりする機会、ありますよね?そんな時、手作業ではなく「自動化できたら素敵なのに」と思ったことはありませんか?PythonライブラリのPlaywrightは、まさにその願いを叶えてくれる、強力なWebブラウザ自動操作ツールです。

概要

Playwrightは、Microsoftが開発したモダンなWebブラウザ自動化ライブラリで、Pythonを含む複数のプログラミング言語に対応しています。特にWebサイトのテスト、Webスクレイピング、Webアプリケーションの自動操作など、幅広い用途で活用されています。

Playwrightの大きな特徴は以下の通りです。

  • クロスブラウザ対応: Chromium(Google Chrome, Microsoft Edgeなど)、Firefox、WebKit(Safari)といった主要なブラウザを、単一のAPIで操作できます。これにより、異なるブラウザでの動作確認が容易になります。
  • 高速かつ信頼性の高い自動化: 要素の自動待機機能が組み込まれており、ページが完全にロードされるのを待ってから操作を行うため、スクリプトが不安定になりにくいです。
  • ヘッドレス/ヘッドフルモード: ブラウザのGUIを表示させずにバックグラウンドで動作させるヘッドレスモードと、実際にブラウザが起動して動作を確認できるヘッドフルモードの両方に対応しています。
  • 充実した機能: スクリーンショットの取得、PDFの生成、動画録画、ネットワークリクエストの傍受・変更など、Web操作に必要なあらゆる機能がAPIとして提供されています。
  • コードジェネレーター: playwright codegen コマンドを使用すると、ブラウザ上で行った操作を記録し、Pythonコードとして自動生成してくれる機能があり、開発効率を大幅に向上させます。

Playwrightは、Web開発者やデータサイエンティストにとって、本当に頼りになるツールなんです!

メリット

PlaywrightをPythonで利用するメリットは多岐にわたります。

  • 高い安定性: ページ要素のロード完了を自動で待機してくれるため、タイミングに依存するエラーが格段に減り、信頼性の高い自動化スクリプトを作成できます。
  • モダンなWeb技術への対応: SPA(Single Page Application)のようなJavaScriptを多用する動的なWebサイトに対しても、自然なユーザー操作を模倣してアクセスできます。
  • 学習コストの低さ: 直感的で分かりやすいAPI設計のため、Web自動化が初めての方でも比較的短期間で習得できます。特にコードジェネレーターは強力な学習ツールになります。
  • 非同期処理による効率化: async/await を用いた非同期処理に対応しており、複数のブラウザ操作を並行して実行することで、処理速度を大幅に向上させることが可能です。

これでWebサイトのテストやデータ収集も、もっとスマートにこなせそうですね!

サンプルコード

それでは、実際にPlaywrightを使ってWebサイトにアクセスし、検索を行い、スクリーンショットを撮る基本的なスクリプトを見ていきましょう。

まず、Playwrightライブラリと必要なブラウザバイナリをインストールします。

pip install playwright
playwright install

次に、Pythonスクリプトを作成します。

import asyncio
from playwright.async_api import Playwright, async_playwright

async def run(playwright: Playwright):
    # Chromiumブラウザを起動
    browser = await playwright.chromium.launch(headless=True)

    # 新しいページを開く
    page = await browser.new_page()

    # Bingへアクセス
    await page.goto("https://www.bing.com/")
    print(f"現在のページのタイトル: {await page.title()}")

    # 検索ボックスに入力
    await page.fill('textarea[name="q"], input[name="q"]', "Playwright Python")

    # Enterキーで検索
    await page.keyboard.press("Enter")

    # 検索結果の読み込み待ち
    await page.wait_for_load_state("networkidle")

    # スクリーンショット保存
    await page.screenshot(
        path="search_results.png",
        full_page=True
    )

    print("スクリーンショットを保存しました: search_results.png")

    # ブラウザを閉じる
    await browser.close()

async def main():
    async with async_playwright() as playwright:
        await run(playwright)

if __name__ == "__main__":
    asyncio.run(main())

このコードを実行すると、バックグラウンドでChromiumが起動し、Bingで「Playwright Python」を検索後、結果ページのスクリーンショットがsearch_results.pngとして保存されます。ぜひ試してみてくださいね!

みーちゃんのワンポイント

Playwrightを使う際は、非同期処理(async/await)の活用がパフォーマンス向上と安定性の鍵です。また、セレクタはCSSセレクタやXPathだけでなく、テキストやロールに基づいたPlaywright独自の強力なセレクタを積極的に利用することで、より堅牢なスクリプトを作成できますよ。デバッグの際は headless=False にしてGUIでブラウザの動きを確認するのもおすすめです!