
皆さんも、インターネット上で欲しい情報を見つけたり、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でブラウザの動きを確認するのもおすすめです!
