Pythonでブラウザ操作を自動化するライブラリといえば、昔から有名なのが「Selenium(セレニウム)」です。
そこに登場したのが「Playwright(プレイライト)」という新しい自動化ツール。
見た目は似ていますが、内部の動きや得意分野には明確な違いがあります。
この記事ではPythonにおける Playwright と Selenium の違いと、それぞれの得意な使いどころを具体例つきでわかりやすく解説します。
PlaywrightとSeleniumの基本的な違い
Seleniumは長年使われてきたブラウザ自動化ツールで、多くのWebアプリのテストや操作に使われています。
PlaywrightはMicrosoftが開発した比較的新しいツールで、Seleniumと同様にブラウザを操作できますが、以下の点で優れています。
- 複数ブラウザに対応(Chromium, Firefox, WebKit)
- ページの読み込みを待たずにすばやく動作
- 1つのブラウザで複数のタブやコンテキストを簡単に制御
- ネットワークの偽装やスクリーンショット機能が強力
それでは、具体的なコードとともに見ていきましょう。
具体例①:Googleで検索してタイトルを取得
まずは両者で同じことをしてみます。
「Googleで検索して、最初の検索結果のタイトルを取得する」という操作です。
Seleniumでやる場合
Seleniumでは、ブラウザドライバを起動して手動で待機を入れながら要素を探します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome() driver.get("https://www.google.com") search_box = driver.find_element(By.NAME, "q") search_box.send_keys("Python playwright") search_box.send_keys(Keys.RETURN) time.sleep(2) # ページ読み込みのための手動待機 results = driver.find_elements(By.CSS_SELECTOR, "h3") print(results[0].text) driver.quit() |
手動の sleep()
が必要で、読み込みタイミングのズレに弱いという弱点があります。
Playwrightでやる場合
Playwrightでは待機が自動で行われるため、コードがスッキリしやすく、高速です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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("input[name='q']", "Python playwright") page.keyboard.press("Enter") page.wait_for_selector("h3") print(page.locator("h3").first.text_content()) browser.close() |
待機を自動でやってくれる点と、locator()
のような強力な要素指定APIが特徴です。
具体例②:モバイルやダークモードの表示をシミュレートしたい
SeleniumではUA(User-Agent)や画面サイズなどを変えるには設定がやや複雑です。
Playwrightなら、簡単にモバイル表示やテーマ切り替えが可能です。
1 2 3 4 5 6 7 8 9 10 11 |
from playwright.sync_api import sync_playwright with sync_playwright() as p: iphone = p.devices["iPhone 12"] browser = p.webkit.launch() context = browser.new_context(**iphone) page = context.new_page() page.goto("https://example.com") page.screenshot(path="mobile_view.png") browser.close() |
これで、iPhone 12 相当のモバイル表示でページを開いてスクリーンショットを保存できます。
こうした端末シミュレーションが非常に得意なのがPlaywrightです。
具体例③:複数ログイン状態での検証をしたい
複数のアカウントやタブで同時にログイン状態を試したいとき、Playwrightはコンテキストの分離が非常に簡単です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() context1 = browser.new_context() context2 = browser.new_context() page1 = context1.new_page() page2 = context2.new_page() page1.goto("https://example.com/login") page2.goto("https://example.com/login") # それぞれ異なるアカウントでログインできる browser.close() |
Seleniumでこれをやろうとすると、複数のブラウザを手動で立ち上げる必要があります。
どちらを使うべきか?用途別おすすめ
目的 | おすすめライブラリ |
---|---|
シンプルな自動化・学習用途 | Selenium |
高速かつ安定した実行が必要なとき | Playwright |
モバイル端末やダークモードのテスト | Playwright |
UIテストの自動化(E2E) | Playwright |
既存のSelenium環境と統合したい | Selenium |
Seleniumは古くからあり、ノウハウや資料が豊富です。一方、Playwrightは新しく高機能で、モダンな開発環境に向いています。
まとめ
- PlaywrightはSeleniumに比べて高速で待機処理が自動、シンプルに書ける
- 複数コンテキストやモバイルシミュレーションなど高度な機能も充実
- Seleniumは長年使われているため、情報は多いが、待機処理や複雑なUI対応は手動対応が多い
- 現代的なUIテストやWeb操作の自動化にはPlaywrightが強力な選択肢
ブラウザ自動化の用途や求めるレベルに応じて、SeleniumとPlaywrightを適切に使い分けましょう。
特にこれから新しく始めるなら、Playwrightは非常におすすめです。