基礎から学ぶPython入門 90日コース | Web・API - Day 54:ブラウザ自動化の基礎

Python 90日で身につけるPython
スポンサーリンク
スポンサーリンク

Day 54:ブラウザ自動化の基礎 ― 「人がやっている操作」をPythonに置き換える

Day 54では、ブラウザ自動化の入り口として、 Playwrightなどのツールを使いながら、

  • ページ表示
  • 要素取得
  • 入力
  • ボタン操作

という「人がブラウザで普段やっていること」を、 Pythonで順番に置き換えていく練習をしていきます。

ブラウザ自動化とは:ブラウザを「手ではなくコードで動かす」こと

どんな場面で役立つのか

ブラウザ自動化は、ざっくり言うと、

「人がブラウザでポチポチやっている操作を、Pythonにやってもらう」

ための仕組みです。

例えば:

  • ログインして、毎日同じページからレポートをダウンロードする
  • 検索フォームにキーワードを入れて、結果をチェックする
  • 管理画面で同じ操作を何十回も繰り返す

といった「定型的なブラウザ操作」を自動化することで、

  • 時間の節約
  • 操作ミスの減少
  • 作業の再現性アップ

につながっていきます。

ここでは、代表的なツールのひとつである Playwright を例にして説明していきます。

Playwrightの準備:インストールと基本の考え方

インストール

まずは、Playwrightをインストールします。

bash

pip install playwright
playwright install
  • 1行目:Python用のPlaywrightライブラリをインストール
  • 2行目:ブラウザ(Chromiumなど)をPlaywright用にセットアップ

という意味になります。

Playwrightの基本イメージ

Playwrightでは、ざっくり次のような流れでブラウザを操作します。

  1. ブラウザを起動する
  2. 新しいタブ(ページ)を開く
  3. URLにアクセスしてページを表示する
  4. ページ内の要素を取得する
  5. 入力やクリックなどの操作を行う

この流れを、Pythonのコードで順番に書いていくイメージです。

ページ表示:ブラウザを開いて、URLにアクセスする

最初の一歩:ページを表示するだけのスクリプト

まずは、「ブラウザを開いて、ページを表示する」だけの 最小限のスクリプトを書いてみます。

# day54_playwright_basic_open.py
from playwright.sync_api import sync_playwright  # 同期版のPlaywrightを使います。


def open_page():
    """ブラウザを起動して、指定したURLを表示する基本例です。"""

    # Playwrightのコンテキストを開きます。
    with sync_playwright() as p:
        # Chromiumブラウザを起動します(Chromeに近いブラウザです)。
        browser = p.chromium.launch(headless=False)  # headless=False で画面を表示します。

        # 新しいタブ(ページ)を開きます。
        page = browser.new_page()

        # 指定したURLにアクセスします。
        url = "https://example.com"
        print(f"[OPEN] {url} を表示します。")
        page.goto(url)

        # 少し待ってからブラウザを閉じます(画面を確認するため)。
        page.wait_for_timeout(3000)  # ミリ秒単位なので 3000 = 3秒 です。

        # ブラウザを閉じます。
        browser.close()


if __name__ == "__main__":
    open_page()
Python

ポイント:

  • sync_playwright() のコンテキストの中でブラウザを操作します。
  • p.chromium.launch(headless=False) で、画面付きのブラウザを起動します。
  • page.goto(url) で、指定したURLにアクセスします。

ここまでで、「Pythonからブラウザを開いてページを表示する」感覚がつかめます。

要素取得:ページの中から「特定の場所」を見つける

セレクタで要素を指定する

次に、表示したページの中から、 特定の要素(見出しやボタンなど)を取得する練習をしていきます。

Playwrightでは、CSSセレクタなどを使って要素を指定します。

# day54_playwright_get_element.py
from playwright.sync_api import sync_playwright


def get_element_example():
    """ページ内の要素を取得して、テキストを表示する例です。"""

    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()

        url = "https://example.com"
        print(f"[OPEN] {url} を表示します。")
        page.goto(url)

        # 例として、ページ内の <h1> 要素を取得します。
        # CSSセレクタ "h1" で指定します。
        h1_element = page.locator("h1")

        # 要素が存在するか確認し、テキストを取得します。
        if h1_element.count() > 0:
            text = h1_element.first.text_content()
            print("ページの見出し(<h1>)のテキスト:")
            print(text)
        else:
            print("<h1> 要素が見つかりませんでした。")

        page.wait_for_timeout(3000)
        browser.close()


if __name__ == "__main__":
    get_element_example()
Python

ポイント:

  • page.locator("CSSセレクタ") で要素を指定します。
  • locator.count() で、該当する要素がいくつあるか確認できます。
  • text_content() で、その要素のテキストを取得できます。

入力:フォームに文字を打ち込む

検索ボックスに文字を入れるイメージ

ブラウザ自動化でよくあるのが、 「検索ボックスにキーワードを入力する」といった操作です。

Playwrightでは、fill()type() を使って入力します。

ここでは、練習用に「簡単なフォームページ」を想定したコードを書いてみます。

# day54_playwright_input.py
from playwright.sync_api import sync_playwright


def input_example():
    """テキスト入力欄に文字を入力する例です。"""

    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()

        # 練習用に、Playwrightの公式サイトの検索ボックスを使ってみます。
        url = "https://playwright.dev/"
        print(f"[OPEN] {url} を表示します。")
        page.goto(url)

        # ページの読み込みが完了するまで待ちます。
        page.wait_for_load_state("networkidle")

        # 検索ボックスのセレクタを指定します(サイトごとに異なります)。
        # ここでは例として、CSSセレクタを仮に書いています。
        search_box = page.locator("input[placeholder='Search']")

        # 要素が存在するか確認します。
        if search_box.count() > 0:
            print("検索ボックスが見つかりました。キーワードを入力します。")
            # fill() でテキストを入力します(既存の内容を置き換えます)。
            search_box.first.fill("python")
        else:
            print("検索ボックスが見つかりませんでした。")

        page.wait_for_timeout(3000)
        browser.close()


if __name__ == "__main__":
    input_example()
Python

ポイント:

  • locator("input[placeholder='Search']") のように、属性を使って入力欄を指定できます。
  • fill("文字列") で、テキスト入力欄に文字を入れられます。

※実際のサイトでは、セレクタが違う場合があるので、ブラウザの開発者ツールで確認しながら調整していきます。

ボタン操作:クリックして「次の動き」を起こす

ボタンをクリックしてフォーム送信などを行う

ブラウザ自動化の定番操作が、ボタンのクリックです。

Playwrightでは、click() を使ってボタンを押します。

# day54_playwright_button_click.py
from playwright.sync_api import sync_playwright


def button_click_example():
    """ボタンをクリックする基本例です。"""

    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()

        # 練習用に、httpbinのフォームページを使うイメージで書いてみます。
        url = "https://httpbin.org/forms/post"
        print(f"[OPEN] {url} を表示します。")
        page.goto(url)

        page.wait_for_load_state("networkidle")

        # テキスト入力欄に文字を入れます(name属性で指定する例)。
        text_input = page.locator("input[name='custname']")
        if text_input.count() > 0:
            text_input.first.fill("Python User")
        else:
            print("名前入力欄が見つかりませんでした。")

        # ボタンをクリックします(type='submit' のボタンを指定する例)。
        submit_button = page.locator("button[type='submit'], input[type='submit']")
        if submit_button.count() > 0:
            print("送信ボタンをクリックします。")
            submit_button.first.click()
        else:
            print("送信ボタンが見つかりませんでした。")

        # 結果ページを少し眺めるために待ちます。
        page.wait_for_timeout(3000)
        browser.close()


if __name__ == "__main__":
    button_click_example()
Python

ポイント:

  • locator("button[type='submit'], input[type='submit']") のように、複数の候補をまとめて指定することもできます。
  • click() を呼ぶと、そのボタンが押され、フォーム送信や画面遷移が行われます。

Day 54ミニテンプレート:ページ表示〜要素取得〜入力〜ボタン操作まで一気通し

最後に、Day 54の内容をひとつにまとめた 「ブラウザ自動化の基本フロー」テンプレート を紹介します。

# day54_browser_automation_template.py
from playwright.sync_api import sync_playwright


def run_browser_automation():
    """
    ブラウザ自動化の基本フローをまとめた関数です。
    - ページ表示
    - 要素取得
    - 入力
    - ボタン操作
    """

    with sync_playwright() as p:
        # 1. ブラウザを起動します。
        browser = p.chromium.launch(headless=False)

        # 2. 新しいページ(タブ)を開きます。
        page = browser.new_page()

        # 3. 対象ページを表示します。
        url = "https://httpbin.org/forms/post"
        print(f"[OPEN] {url} を表示します。")
        page.goto(url)

        # ページの読み込み完了を待ちます。
        page.wait_for_load_state("networkidle")

        # 4. 要素取得:フォームの入力欄を探します。
        name_input = page.locator("input[name='custname']")
        if name_input.count() > 0:
            print("名前入力欄が見つかりました。")
            # 5. 入力:名前を入力します。
            name_input.first.fill("Python User")
        else:
            print("名前入力欄が見つかりませんでした。")

        # 6. ボタン操作:送信ボタンを探してクリックします。
        submit_button = page.locator("button[type='submit'], input[type='submit']")
        if submit_button.count() > 0:
            print("送信ボタンが見つかりました。クリックします。")
            submit_button.first.click()
        else:
            print("送信ボタンが見つかりませんでした。")

        # 結果ページを確認するために少し待ちます。
        page.wait_for_timeout(3000)

        # 7. ブラウザを閉じます。
        browser.close()


if __name__ == "__main__":
    run_browser_automation()
Python

このテンプレートは、

  • ページ表示
  • 要素取得(入力欄・ボタン)
  • 入力
  • ボタン操作

という「ブラウザ自動化の基本セット」を一通り体験できる形になっています。

Day 54のまとめ

Day 54では、ブラウザ自動化の基礎として、

  • ブラウザ自動化は「人がブラウザでやっている操作をPythonに置き換える」技術であること
  • Playwrightを使うことで、ブラウザの起動・ページ表示・要素取得・入力・クリックをコードで書けること
  • page.locator("CSSセレクタ") で要素を指定し、text_content()fill()click() などで操作できること
  • ページ表示 → 要素取得 → 入力 → ボタン操作という流れが、ブラウザ自動化の基本パターンであること

を、コード例とともに整理しました。

この土台があると、

  • ログイン処理の自動化
  • 管理画面の定型操作の自動化
  • Web上のフォーム入力の自動化

など、実務に近いブラウザ自動化へと、少しずつステップアップしていくことができます。

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