- Python でブラウザを自動で操作したい!
- Selenium と Playwright どちらを使えばいい?
- インストールから動かすまでの手順を知りたい!
このような疑問にお答えします。
Python のブラウザ自動化といえば Selenium と Playwright の2択です。どちらもブラウザを Python から操作できますが、セットアップのしやすさや API の書き心地に違いがあります。
本記事では両方のインストール方法・基本操作コードを解説し、最後に「どちらを選ぶべきか」の判断軸も紹介します。
ブラウザ自動化でできること
ブラウザ自動化とは、Python のコードでブラウザの操作(クリック・入力・スクロール・スクリーンショット取得など)を自動で行う技術です。
- Web スクレイピング
JavaScript で動的に生成されるページのデータも取得できる - フォームの自動入力・送信
ログイン・検索・申し込みフォームなどを自動で操作 - E2E テスト
ブラウザ上でのユーザー操作をテストとして実行・検証 - スクリーンショット取得
ページの見た目をキャプチャして確認・比較
requests + BeautifulSoup の組み合わせでは取得できない「JavaScript 描画後のコンテンツ」にアクセスできる点が最大のメリットです。
Selenium と Playwright の比較
まず2つのライブラリの特徴を整理します。
| Selenium | Playwright | |
|---|---|---|
| 開発元 | Selenium プロジェクト | Microsoft |
| 初リリース | 2004年 | 2020年 |
| 対応ブラウザ | Chrome / Firefox / Edge / Safari | Chromium / Firefox / WebKit |
| セットアップ | やや手間(4.x からは改善) | 1コマンドで完結 |
| 待機処理 | 明示的な待機が必要になることが多い | 自動待機機能が充実 |
| 実行速度 | 標準 | 速い |
| 日本語情報量 | 多い(歴史が長い) | 増加中 |
どちらを選ぶかは「情報量の多い Selenium か、現代的な API の Playwright か」という選択です。詳しくは記事の最後で解説します。
Selenium の使い方
インストール
pip でインストールします。
pip install seleniumuv を使っている場合はこちらです。
uv add seleniumSelenium 4.6 以降は Chrome のドライバー(ChromeDriver)を別途インストールする必要がなくなりました。webdriver.Chrome() を呼ぶだけで自動的に適切なドライバーが取得されます。
ページを開いてタイトルを取得する
まずは最もシンプルな例として、ページを開いてタイトルを表示してみます。
from selenium import webdriver
# Chrome を起動
driver = webdriver.Chrome()
# ページを開く
driver.get("https://example.com")
# タイトルを取得して表示
print(driver.title) # Example Domain
# ブラウザを閉じる
driver.quit()実行すると Chrome が起動してページが表示されます。driver.quit() を忘れるとブラウザが開いたままになるので注意してください。
要素を取得してクリックする
ページ上の要素(ボタン・リンクなど)を取得してクリックするには find_element() を使います。
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
# CSS セレクタで要素を取得してクリック
link = driver.find_element(By.CSS_SELECTOR, "a")
link.click()
print(driver.current_url)
driver.quit()By.CSS_SELECTOR 以外にも、By.ID / By.CLASS_NAME / By.XPATH などで要素を指定できます。
テキストを入力してフォームを送信する
検索フォームやログインフォームへの入力は send_keys() で行います。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://www.google.com")
# 検索ボックスを取得してキーワードを入力
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Python 自動化")
# Enter キーを送信
search_box.send_keys(Keys.RETURN)
# ページタイトルを表示
print(driver.title)
driver.quit()要素の待機(WebDriverWait)
JavaScript で動的にコンテンツが読み込まれるページでは、要素が存在するまで待機する処理が必要です。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com")
# 最大10秒待って要素が表示されるまで待機
wait = WebDriverWait(driver, 10)
element = wait.until(
EC.presence_of_element_located((By.ID, "result"))
)
print(element.text)
driver.quit()time.sleep() で固定秒数を待つ方法もありますが、無駄な待機が発生します。WebDriverWait を使って「要素が現れたら即座に次の処理へ」進む書き方が推奨です。
Playwright の使い方
インストール
Playwright のインストールは2ステップです。
pip install playwright
playwright installplaywright install を実行すると Chromium・Firefox・WebKit の3ブラウザが一括でダウンロードされます。uv の場合は uv add playwright のあとに同じく playwright install を実行します。
ページを開いてタイトルを取得する
Playwright には同期 API(sync_playwright)と非同期 API(async_playwright)があります。入門としては同期 API が書きやすいのでこちらを使います。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
# ページを開く
page.goto("https://example.com")
# タイトルを取得して表示
print(page.title()) # Example Domain
browser.close()with ブロックを使うことでブラウザの後片付けが確実に行われます。Selenium と比べてコードがすっきりしているのが特徴です。
要素を取得してクリックする
Playwright では page.locator() で要素を指定します。Selenium の find_element() に相当する操作です。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com")
# CSS セレクタで要素を取得してクリック
page.locator("a").click()
print(page.url)
browser.close()テキストを入力してフォームを送信する
Playwright ではテキスト入力に page.fill()、クリックに page.click() を使います。待機処理は自動で行われるので、Selenium のような明示的な WebDriverWait は不要です。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://www.google.com")
# 検索ボックスにテキストを入力
page.fill("textarea[name='q']", "Python 自動化")
# ボタンをクリック
page.keyboard.press("Enter")
# 検索結果が表示されるまで自動待機
page.wait_for_load_state("networkidle")
print(page.title())
browser.close()スクリーンショットを取得する
Playwright ではスクリーンショット取得が1行で書けます。ページ全体を画像として保存したいときに便利です。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com")
# ページ全体のスクリーンショットを保存
page.screenshot(path="screenshot.png", full_page=True)
browser.close()Selenium と Playwright どちらを選ぶべきか
用途と状況によって使い分けるのが現実的です。
- Selenium を選ぶ場合
日本語情報が多く、既存の業務スクリプトとの互換性が必要なとき。ネット上のサンプルコードが Selenium ベースのものが多いため、初心者が躓いたときに情報を探しやすい - Playwright を選ぶ場合
新規プロジェクトで書き心地と速度を重視するとき。自動待機・スクリーンショット・マルチブラウザテストなど、モダンな機能が最初から揃っている
僕自身は業務自動化スクリプトで Selenium を長く使ってきましたが、最近の新規スクリプトは Playwright で書くことが増えました。待機処理を自分で書かなくていい点が特にラクです。
「とりあえず動かしてみたい」という入門段階では、どちらを選んでも本記事のコードを試せます。まず動かしてみて、書き心地の合う方を選ぶのが一番です。
まとめ
本記事では Python のブラウザ自動化ライブラリ Selenium と Playwright の基本操作を解説しました。
- Selenium:4.6 以降は ChromeDriver 不要・
webdriver.Chrome()で即起動できる - Playwright:
pip install playwright+playwright installの2ステップで完結・自動待機が便利 - どちらも「ページを開く→要素を取得→クリック・入力」の流れは同じ
- 新規プロジェクトなら Playwright・既存コードとの互換重視なら Selenium を選ぶとよい
ブラウザ自動化を覚えると、日常の繰り返し作業を大幅に削減できます。本記事のコードをそのまま実行してみるところから始めてみてください。

コメント