Playwrightで自動化:ブラウザ操作をPythonでコントロール

Uncategorized
---
title: "Playwrightで自動化:ブラウザ操作をPythonでコントロール"
slug: "playwright-python-browser-automation"
meta_title: "Playwright×Pythonで始めるブラウザ自動化【実践ガイド】"
meta_description: "Playwrightを使ったPythonでのブラウザ自動化を実際に試した記録。インストール手順からログイン自動化、CI/CD連携、副業案件での活用まで解説します。"
focus_keyphrase: "Playwright Python 自動化"
categories: ["AI・機械学習"]
tags: ["Playwright", "Python", "自動化", "副業", "OSS"]
status: "publish"
---

毎朝同じサイトにログインして同じ数値をコピペしてる人、実はその作業もう要らないかもしれません。先週、業務でとある管理画面の数値を毎日エクセルに転記する作業に付き合っていたら、あまりの単調さに耐えられずPlaywrightでスクリプトを書いてしまいました。結果、5分かかってた作業が3秒で終わるように。

この記事では、実際に手を動かして検証したPlaywright×Pythonのブラウザ自動化について、インストールから実践的なコード、副業での使い道まで一気に紹介します。「自動化系のツールって結局どれ使えばいいの」と迷っている人向けに、実際に動かした感触をそのまま書いていきます。

Playwrightって結局何ができるの?

Playwrightは、Microsoftが開発しているブラウザ自動操作ライブラリです。一言で言うと「ブラウザをコードで操って、クリック・入力・スクショ・データ取得を全部自動でやらせるやつ」です。GitHub上のスター数は6万を超えていて、Seleniumから乗り換えるエンジニアが年々増えている印象です。

Selenium・Puppeteerとの違い

一番の違いは「待機処理」です。Seleniumだと要素が表示されるまでtime.sleep()や明示的waitを自分で書く必要がありましたが、Playwrightは要素の出現を自動で待ってくれるオートウェイト機能が標準搭載されています。これだけで書くコード量が体感3割くらい減ります。

Puppeteerと比べると、Playwrightは最初からPython・Java・.NET・Node.jsのマルチ言語対応です。Puppeteerは基本Node.js専用なので、Pythonで自動化したい人には最初からPlaywright一択と言っていいと思います。

対応ブラウザとサポート言語

Chromium・Firefox・WebKit(Safari相当)の3種類のエンジンに対応しています。1つのコードでブラウザを切り替えられるので、「Chromeでは動くけどSafariで崩れる」みたいな検証もそのままできるのが地味に便利です。

環境構築〜5分で動かす

理論は置いといて、実際に動かしてみます。インストールは2行だけです。

pip install playwright
playwright install

2行目のplaywright installでChromium・Firefox・WebKitのバイナリが自動ダウンロードされます。ここで数百MBほど落ちてくるので、Wi-Fi環境でやることをおすすめします。

初回起動でハマりやすい点

Ubuntu環境やDockerコンテナ上で動かす場合、依存ライブラリ不足でエラーが出ることがあります。その場合は以下を実行すれば解決します。

playwright install-deps

これを忘れて「browserType.launch: Executable doesn’t exist」的なエラーで1時間溶かした人を何人か見てきました(私も最初やりました)。

動作確認スクリプト

インストールできたか確認するには、以下のコードをtest.pyとして保存して実行するだけです。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("https://example.com")
    print(page.title())
    browser.close()

headless=Falseにしておくと実際にブラウザが立ち上がるのが見えるので、初回はこれで動作を目で確認するのがおすすめです。

実際にコードを書いて動かしてみた

ここからが本題です。実際に「ログイン→データ取得→スクショ」まで一連の流れを書いてみました。

ログイン自動化のサンプル

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://example.com/login")
    page.fill("#username", "your_id")
    page.fill("#password", "your_password")
    page.click("button[type=submit]")
    page.wait_for_url("https://example.com/dashboard")
    print("ログイン成功:", page.title())
    browser.close()

wait_for_urlで遷移完了を待つのがポイントです。これがないと、ページ遷移中に次の処理が走ってエラーになることがあります。

スクリーンショット・PDF出力

page.screenshot(path="dashboard.png", full_page=True)
page.pdf(path="report.pdf")

full_page=Trueを付けるとスクロールが必要な長いページも1枚でキャプチャできます。監視レポートを毎日自動でPDF化するみたいな用途に地味に使えます。

要素待機とセレクタ戦略

セレクタはCSSセレクタだけでなく、page.get_by_text("送信")page.get_by_role("button", name="送信")のような人間が読みやすい書き方も使えます。個人的にはid/classがコロコロ変わるサイトではget_by_roleの方が壊れにくくて気に入っています。

活用事例(こんな人におすすめ)

ケース1: 毎日同じサイトを巡回して数値を確認しているAさん
競合サイトの価格や在庫状況を毎朝目視で確認していたAさん。Playwrightでログイン〜該当ページのデータ取得までを自動化し、結果をSlack通知するようにしたところ、朝の作業が完全になくなりました。

ケース2: QAエンジニアのBさん
リリース前の回帰テストを手動でポチポチやっていたBさん。Playwrightのテストランナー機能でE2Eテストを書き、GitHub Actionsに組み込んだところ、リリース前チェックが自動化されてレビュー時間が半分になったそうです。

ケース3: 副業でスクレイピング案件を受けたいCさん
クラウドソーシングで「特定サイトから情報を定期取得してほしい」という案件を見つけたCさん。Playwrightならログインが必要なサイトやJS描画のSPAサイトでも問題なく対応できるので、案件の幅が広がったと話していました。

ケース4: 在宅ワークで請求書発行作業をしているDさん
特定の業務システムから毎月同じ手順でCSVをダウンロードしていたDさん。Playwrightでダウンロード処理をスクリプト化し、cronで毎月1日に自動実行するようにしたところ、月末の作業が完全に不要になりました。

副業・業務で使う場面

副業でPlaywrightが刺さるのは、主に「スクレイピング案件」「テスト自動化案件」「監視・通知ツールの構築」の3つです。特にログインが必要なサイトやSPA(React/Vue製)のサイトはSeleniumだと苦戦しがちですが、Playwrightなら比較的スムーズに対応できます。

24時間動かし続けたいスクリプトがある場合、自宅PCで動かし続けるのは現実的ではありません。私はConoHa VPS(※アフィリエイトリンク)にHeadlessブラウザ環境を構築して、cronで定期実行させています。月900円台のプランでも十分動くので、副業の初期投資としては現実的な範囲です。

もう少し安定運用したい・法人向けのサイトも扱う予定があるならXserverVPS(※アフィリエイトリンク)も選択肢に入ります。どちらもSSH接続できるので、Playwrightのinstall-depsさえ通せば問題なく動きます。

案件を探すところから始めたい人は、ココナラ(※アフィリエイトリンク)で「Webスクレイピング代行」「業務自動化スクリプト作成」みたいな出品をしている人を見ると、相場感がつかみやすいのでおすすめです。

よくある失敗・注意点

実際に触ってみて、やりがちなミスを3つ挙げておきます。

  1. headlessモードで検証せずに本番投入する
    headless=Falseで目視確認しただけで満足し、headless=Trueに切り替えたら動かなくなるパターンが多いです。ヘッドレス特有のレンダリング差異があるので、必ずheadlessモードでも最終確認をしてください。

  2. 利用規約・robots.txtを確認せずにスクレイピングする
    ログインが必要なサイトやスクレイピング禁止のサイトも存在します。副業案件として請け負う場合は特に、対象サイトの利用規約を確認してから着手するのが鉄則です。

  3. 待機処理をtime.sleep()で全部解決しようとする
    Playwrightはオートウェイトが強力なので、wait_for_selectorwait_for_urlを使うべき場面でsleep(5)を挟むと逆に不安定になったり無駄に遅くなったりします。「待つ理由」を明確にした待機処理を書くのが正解です。

CI/CDに組み込む

テスト用途で使うなら、GitHub Actionsとの連携も簡単です。

name: E2E Test
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install playwright pytest-playwright
      - run: playwright install --with-deps
      - run: pytest

playwright install --with-deps一発でCI環境にブラウザと依存ライブラリが揃うので、環境構築のつまずきポイントがほぼありません。

よくある質問

Q. PlaywrightとSeleniumどっちを覚えるべき?
新規で始めるならPlaywright一択です。オートウェイトのおかげでコードがシンプルになりますし、Microsoftが継続的にメンテしているので将来性も安心です。

Q. 無料で使える?
完全に無料のOSSです。ライセンス費用はかかりません。ただしVPSなどのインフラ費用は別途かかります。

Q. JavaScriptで動的に生成されるサイトも取得できる?
できます。ブラウザを実際にレンダリングしてから操作するので、React/Vue製のSPAサイトでも問題なく動きます。

Q. スマホサイトの検証もできる?
p.devices["iPhone 13"]のようにデバイスエミュレーション機能があるので、スマホ表示の検証もそのままできます。

Q. 学習コストはどれくらい?
Python経験があれば、公式ドキュメントのサンプルを写経するだけで半日〜1日で基本操作は身につきます。


正直、最初は「またSelenium系のツールか」くらいに思っていたんですが、実際に触ってみるとオートウェイトの快適さが想像以上でした。副業でスクレイピングやテスト自動化の案件を探している人は、まずローカルで動かしてみて、慣れてきたらVPSに載せて常時稼働させる流れが現実的だと思います。気になったらまずpip install playwrightから試してみてください。

コメント

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