- 家
- /
- Selenium vs Puppeteer
Selenium vs Puppeteer
SeleniumとPuppeteerは、異なる問題を解決します。一方はクロスブラウザのW3C WebDriver標準であり、もう一方は高速なChrome特化の自動化ライブラリです。このガイドでは、プロトコル、対応言語、ブラウザカバレッジ、速度、ユースケースの各観点で両者を徹底的に比較し、コードサンプルと5分で実践できる結論を交えてお届けします。
- ブラウザとデバイス
- 6100+
- クラウド並列処理
- 100×
- 稼働時間SLA
- 99.99%
世界で最も革新的な企業のいくつかから信頼されています
どちらを選ぶべきでしょうか?
Chrome、Firefox、Safari、Edge、Internet Explorerにわたる本物のクロスブラウザテスト、複数の言語、またはAppium経由での実際のモバイルデバイスを、W3C標準プロトコル上で必要とする場合。
高速なエンドツーエンドテスト、スクレイピング、PDF生成、パフォーマンストレースのためにNode.jsからChromeまたはChromiumを自動化し、Safari、Internet Explorer、その他の言語を必要としない場合。
高速なChrome専用チェックにはPuppeteerを、幅広いクロスブラウザカバレッジにはSeleniumを使いたい場合。TestingBotは両方を同じグリッド上で、並列に、1つのダッシュボードで実行します。
SeleniumとPuppeteerとは何ですか?
2つのブラウザ自動化ツール、それぞれ異なる目標。一方はクロスブラウザ制御を標準化し、もう一方はChromeを高速に操作します。
Selenium
2004年リリース · オープンソース · Apache 2.0
Seleniumは、元祖ブラウザ自動化フレームワークであり、W3C WebDriver標準の基盤となっています。Selenium WebDriverは、ベンダー提供のドライバ(chromedriver、geckodriver、safaridriver、edgedriver)を介して、同一のワイヤプロトコルを使用してあらゆるブラウザを外部から操作します。
20年にわたるエコシステムの成熟により、主要なすべての言語に対応したバインディング、IDEとの高度な統合、成熟したPage Objectパターン、そして同じプロトコル上に構築されたAppiumを介した実際のモバイルデバイステストが実現しました。
- Java / Python / C# / Ruby / JavaScript / Kotlin
- W3C WebDriver標準、すべてのブラウザで動作します
- Chrome、Firefox、Safari、Edge、IE 11 · Appium経由での実際のモバイル
Puppeteer
リリース日:2017年 · Google · Apache 2.0
Puppeteerは、Google Chromeチームが開発したNode.jsライブラリで、Chrome DevToolsプロトコルを介してChrome、Chromium、Edgeを制御します。高速なエンドツーエンドテスト、Webスクレイピング、PDF生成、パフォーマンストレースを支えています。
WebDriverではなくDevToolsプロトコルを直接やり取りするため、Puppeteerは高速であり、ネットワーク、コンソール、トレースへの一流のアクセスを備えています。同じ設計が、ChromiumベースのブラウザとJavaScriptエコシステムへの依存ももたらします。
- JavaScriptとTypeScript(Node.js)
- Chrome DevToolsプロトコル、ネットワークとトレースへのアクセス
- Chrome、Chromium、Edge · Firefoxは実験的、Safari/IEは非対応
Selenium vs Puppeteer:並べて比較
CI での選択、移行、または両方の実行において重要なあらゆる側面において。
| 項目 |
|
|
|---|---|---|
| First release | 2004 | 2017 |
| Maintained by | Open-source community + W3C | Google (Chrome team) |
| Protocol | W3C WebDriver | Chrome DevTools Protocol |
| Languages | Java, Python, C#, Ruby, JS, Kotlin | JavaScript / TypeScript |
| Browsers | Chrome, Firefox, Safari, Edge, IE 11 | Chrome, Chromium, Edge |
| Firefox / Safari | Both supported | Firefox experimental, no Safari |
| Mobile testing | Real iOS + Android via Appium | None |
| Speed | Mature, predictable | Faster on Chrome (direct CDP) |
| Network interception | BiDi (Selenium 4) or proxy | First-class (CDP) |
| Scraping / PDF / tracing | Possible | First-class |
| Test runner | Bring your own (JUnit, pytest) | Bring your own (Jest, Mocha) |
| Standard | W3C WebDriver standard | Chrome-specific protocol |
| Parallel execution | Selenium Grid | Worker-based (Jest, Mocha) |
| Ecosystem maturity | 20 years of integrations | Strong since 2017 |
| Free for open source on TestingBot | ✓ | ✓ |
機能に関する注記は、2026年時点のSelenium 4.xおよびPuppeteer 23.xを反映しています。両方ともTestingBotのクラウド上で動作し、SeleniumはWebDriverハブ経由で、PuppeteerはbrowserWSEndpoint接続経由で実行されます。
ログインし、結果を検証する
明示的な待機(Selenium)を使用したログインフローと、DevToolsプロトコルのセッション(Puppeteer)を使用したログインフローを比較します。どちらも同じTestingBotグリッド上で実行されます。
# Driver points at TestingBot remote URL 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 def test_login_redirects_to_dashboard(driver): driver.get('https://app.example.com/login') driver.find_element(By.NAME, 'username').send_keys('jane@example.com') driver.find_element(By.NAME, 'password').send_keys('••••••••') driver.find_element(By.CSS_SELECTOR, 'button[type=submit]').click() # explicit wait WebDriverWait(driver, 10).until(EC.url_contains('/dashboard')) welcome = driver.find_element(By.TAG_NAME, 'h1') assert 'Welcome, Jane' in welcome.text
// connect to TestingBot over the DevTools protocol import puppeteer from 'puppeteer-core'; const caps = { key: 'KEY', secret: 'SECRET', browserName: 'chrome', browserVersion: 'latest' }; const browser = await puppeteer.connect({ browserWSEndpoint: `wss://cloud.testingbot.com/puppeteer?capabilities=${encodeURIComponent(JSON.stringify(caps))}`, }); const page = await browser.newPage(); await page.goto('https://app.example.com/login'); await page.type('#username', 'jane@example.com'); await page.type('#password', '••••••••'); await page.click('button[type=submit]'); await page.waitForSelector('h1');
SeleniumのテストはWebDriverハブに接続し、PuppeteerのスクリプトはbrowserWSEndpoint経由で接続します。どちらも同じTestingBotダッシュボードに表示されます。
どちらを選ぶかは
Seleniumを選択する場合
- Chromiumだけでなく、Safari、Internet Explorer 11、Edgeを含む真のクロスブラウザカバレッジが必要な場合。
- チームがJava、C#、Ruby、またはPythonで開発を行っており、完全なクライアントライブラリの互換性を求めている場合。
- 実際のiOSおよびAndroidデバイスをテストする場合。Appiumは、同じWebDriverプロトコルを再利用します。
- Chrome固有のものではなく、ベンダー中立のW3C標準プロトコルを求めている場合。
- 書き直したくない成熟したPage ObjectライブラリやBDDフレームワーク(Cucumber、SpecFlow)をお持ちの場合。
Puppeteerを選ぶとき
- Chrome、Chromium、またはEdgeのみを自動化すればよく、可能な限り高速な実行を求めている場合。
- チームがNode.js優先で、JavaScriptまたはTypeScriptのAPIを求めている場合。
- テストと並行して、Webスクレイピング、PDF生成、スクリーンショット、パフォーマンストレースを行う場合。
- ネットワーク、コンソール、CDPイベントへのDevToolsプロトコルの直接アクセスを求めている場合。
- Safari、Internet Explorer、実際のモバイルデバイス、またはJavaScript以外の言語を必要としない場合。
どちらかを選ぶのはやめて、両方を同じグリッドで実行しよう
SeleniumをWebDriverハブに指定し、PuppeteerをそのbrowserWSEndpoint経由で接続します。テストは同じ6100+ブラウザとデバイス、同じダッシュボード、同じ並列スロット、同じEUデータ所在地を共有します。
- 同じ認証、同じプロジェクト、同じ請求
- 両ツールのテスト履歴を並べて表示
- オープンソースであれば無料、両方のツール
command_executor='https://hub.testingbot.com/wd/hub'
)
browserWSEndpoint:
'wss://cloud.testingbot.com/puppeteer'
})
よくある質問
チームがこれらのツールを選択する前、あるいは組み合わせる前に自問する質問。
PuppeteerはSeleniumより速いですか?
通常はそうです、Chromeでは。PuppeteerはChrome DevToolsプロトコルを直接やり取りし、WebDriverプロトコルのHTTPラウンドトリップを回避するため、Chrome専用のスイートはしばしばより高速に実行されます。ただし、この優位性はChromiumベースのブラウザにのみ適用され、テストがネットワークに依存するようになると差は縮まります。Selenium 4のBiDiサポートもその差を縮めています。速度は確かに存在しますが、Seleniumのクロスブラウザの広さに対して決定的な要因になることはめったにありません。
PuppeteerはSeleniumを置き換えられますか?
Chrome中心の作業に限ります。Puppeteerは、Node.jsからChrome、Chromium、Edgeを自動化するのに優れていますが、SafariやInternet Explorerを操作できず、実際のモバイルサポートはなく、JavaScript専用です。クロスブラウザテスト、複数の言語、または実際のデバイスが必要な場合は、Seleniumの方が幅広いツールであり続けます。多くのチームは、高速なChromeチェックにはPuppeteerを、完全なクロスブラウザカバレッジにはSeleniumを使用します。
PuppeteerはChrome以外のブラウザをサポートしていますか?
Puppeteerは、Chrome、Chromium、ChromiumベースのEdgeを操作し、実験的にFirefoxをサポートしています。SafariやInternet Explorerは操作できません。Seleniumは、ベンダー提供のドライバを介して、SafariやInternet Explorer 11を含む主要なすべてのブラウザの実際のバイナリを操作します。Chromiumを超える何かが必要な場合は、この2つのうちSeleniumが選択肢となります。TestingBotは両方をブラウザグリッド全体で実行します。
Puppeteerはモバイルアプリのテストを行うことができますか?
いいえ。PuppeteerはChromiumでモバイルビューポートのエミュレーションを提供していますが、ネイティブのiOSアプリやAndroidアプリを操作することはできません。実際のモバイルテストには、Appium、XCUITest、Espresso、またはMaestroが必要です。Appiumは、Seleniumの基盤となっているWebDriverプロトコルを再利用します。TestingBotは、実際のiOSおよびAndroidデバイス上でこれらのすべてを実行します。
WebスクレイピングにはPuppeteerとSeleniumのどちらが適していますか?
Puppeteerは、DevToolsへの直接アクセスとNode.jsエコシステムのおかげで、スクレイピング、PDF生成、ヘッドレスChrome自動化においてより一般的な選択肢です。Seleniumもスクレイピングは可能ですが、その強みは多数の言語にわたるクロスブラウザのテスト自動化にあります。仕事に合ったツールを選びましょう。Chrome自動化のタスクにはPuppeteerを、標準ベースのクロスブラウザテストにはSeleniumを。
TestingBot上でPuppeteerを並列で実行できますか?
はい。Puppeteerのワーカーベースの並列化(Jest、Mocha、またはカスタムランナー経由)は、TestingBotグリッドに対して機能します。各ワーカーはWebSocketエンドポイント経由で独自のリモートブラウザを開きます。同時実行数はプランによって上限が定められています。SeleniumはWebDriverハブを介して同じ方法で並列化します。
TestingBot上でSeleniumとPuppeteerを実行できますか?
はい、どちらも同じTestingBotクラウド上で動作します。Seleniumはwebdriver.Remoteを介してhttps://hub.testingbot.com/wd/hubに接続します。Puppeteerはpuppeteer.connectで、wss://cloud.testingbot.com/puppeteerのbrowserWSEndpointを使用して接続します。どちらのツールのテストも同じダッシュボードに表示され、並列スロットを共有し、同じEUデータ所在地、ビデオ録画、CI/CD統合のメリットを享受できます。どちらもオープンソースプロジェクトでは無料で利用できます。