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では、ざっくり次のような流れでブラウザを操作します。
- ブラウザを起動する
- 新しいタブ(ページ)を開く
- URLにアクセスしてページを表示する
- ページ内の要素を取得する
- 入力やクリックなどの操作を行う
この流れを、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上のフォーム入力の自動化
など、実務に近いブラウザ自動化へと、少しずつステップアップしていくことができます。
