Webアプリケーションの品質を保つうえで、ブラウザ上の操作を自動で再現できる仕組みは欠かせません。Seleniumは、その代表格として2004年の登場以来20年以上にわたり利用されてきたオープンソースのブラウザ自動化フレームワークです。

ここではSeleniumの基本的な仕組みから、3つのコンポーネント(WebDriver・IDE・Grid)の役割、対応言語・ブラウザ、導入手順、そして近年注目されるPlaywrightやCypressとの比較まで、体系的に整理します。

Seleniumの基本 ── 何ができるツールなのか

Seleniumは、Webブラウザの操作をプログラムで制御するためのフレームワークです。ユーザーが手動で行うクリック・入力・画面遷移などの操作を、スクリプトとして記述し自動実行できます。

主な用途は以下の3つです。

用途具体例
テスト自動化ログインフォームの入力確認、画面遷移テスト、回帰テスト
WebスクレイピングJavaScriptで動的に描画されるページからのデータ取得
業務プロセスの自動化管理画面への定型入力、帳票ダウンロードの定期実行

Seleniumはオープンソース(Apache License 2.0)で提供されており、利用料金は無料です。商用利用にも制限がなく、個人の学習からエンタープライズの大規模テスト基盤まで幅広く使われています。

栄養素の「セレン(Selenium)」との違い

検索キーワード「Selenium とは」にはサプリメント・栄養素としての「セレン」を調べる意図も含まれます。化学元素としてのセレン(元素記号: Se、原子番号34)は必須微量ミネラルの一種で、抗酸化作用や甲状腺機能に関与する栄養素です。本記事で解説するSeleniumはソフトウェアツールの方を指します。

Seleniumの歩み ── ThoughtWorksから世界標準へ

Seleniumの歴史を知ることで、現在のツール構成が生まれた理由が理解できます。

出来事
2004年Jason HugginsがThoughtWorks社(シカゴ)で「JavaScriptTestRunner」を開発。社内アプリのテスト自動化が目的
2004年Paul Hammantの提案によりオープンソース化。名称が「Selenium」に変更
2006年日本の笠谷真也氏がFirefoxプラグイン版「Selenium IDE」を開発。操作の録画・再生が可能に
2007年Simon Stewart(ThoughtWorks)がWebDriverを発表。ブラウザごとのネイティブドライバーで直接制御するアーキテクチャを提唱
2011年Selenium 2リリース。Selenium RCとWebDriverが統合され、Selenium WebDriverが誕生
2018年W3CがWebDriverプロトコルをWeb標準(W3C Recommendation)として正式勧告
2021年Selenium 4リリース。W3C WebDriverプロトコルへ完全移行し、JSON Wire Protocolを廃止
2026年1月最新の安定版 Selenium 4.40.0 をリリース(出典: Selenium公式

なお、2026年5月6〜8日にはスペイン・バレンシアで「SeleniumConf 2026」の開催が予定されています(出典: SeleniumConf)。

3つのコンポーネント ── WebDriver・IDE・Grid

Seleniumは単一のツールではなく、用途の異なる3つのコンポーネントで構成されています。

Selenium WebDriver ── 自動化の中核エンジン

Selenium WebDriverは、プログラムからブラウザを直接操作するためのAPIです。各ブラウザ専用のドライバー(ChromeDriver、GeckoDriverなど)を介して、W3C WebDriverプロトコルに準拠した命令をブラウザに送信します。

動作の仕組み:

テストコード → WebDriver API → ブラウザドライバー → ブラウザ本体
   (Python等)    (W3Cプロトコル)    (ChromeDriver等)    (Chrome等)

Selenium 4以降はW3C WebDriverプロトコルに完全準拠しています。旧来のJSON Wire Protocolは廃止され、テストコードとブラウザの通信がW3C標準に統一されたことで、ブラウザ間の挙動差が大幅に減少しました。

Selenium 4で追加された主な機能

  • 相対ロケーター(Relative Locators): 「ボタンAの右にあるテキスト」のように、要素の位置関係で対象を指定
  • Chrome DevTools Protocol(CDP)対応: コンソールログの取得、ネットワークリクエストの監視、位置情報のエミュレーションが可能
  • WebDriver BiDi: ブラウザとの双方向リアルタイム通信。イベント駆動型のテストシナリオに対応
  • Selenium Manager: ブラウザドライバーの自動ダウンロード・バージョン管理機能。手動でのドライバー管理が不要に

Selenium IDE ── コード不要の録画・再生ツール

Selenium IDEは、ChromeやFirefoxの拡張機能として動作する録画・再生型のテストツールです。ブラウザ上の操作を記録し、テストケースとして保存・再実行できます。

プログラミングの知識がなくてもテストを作成できるため、QA担当者や非エンジニアにも利用しやすい点が特徴です。ただし、複雑な条件分岐や大量のテストケースの管理には向いていません。

Selenium IDEで録画したテストは、Python・Java・JavaScript・C#のWebDriverスクリプトとしてエクスポートできます。プロトタイピングに使い、のちにWebDriverコードへ移行する運用が一般的です。

Selenium Grid ── 並列・分散実行基盤

Selenium Gridは、テストを複数のマシンやブラウザに分散して並列実行するための仕組みです。Hub(またはRouter)がテストのリクエストを受け取り、登録されたNode上の各ブラウザに振り分けます。

Selenium 4ではGridのアーキテクチャが刷新され、以下の構成要素に分離されました。

構成要素役割
Routerテストリクエストの受付・振り分け
Distributor利用可能なNodeへのセッション割り当て
Session Map実行中セッションの管理
Node実際にブラウザを起動しテストを実行

DockerやKubernetesとの統合も容易で、CI/CDパイプラインに組み込んで数十〜数百のブラウザで同時テストを実行する構成が構築できます。

対応言語と対応ブラウザ

公式サポート言語(5言語)

Seleniumは以下の5つのプログラミング言語に対して公式のクライアントライブラリを提供しています。

言語パッケージマネージャーインストールコマンド
PythonPyPIpip install selenium
JavaMavenpom.xmlに依存関係を追加
JavaScriptnpmnpm install selenium-webdriver
C#NuGetdotnet add package Selenium.WebDriver
RubyRubyGemsgem install selenium-webdriver

このうち最も利用者が多いのはPythonで、検索ボリュームでも「Selenium Python」は月間1,000回以上検索されています。学習コストの低さとデータ分析・スクレイピングとの相性の良さが人気の理由です。

対応ブラウザ

ブラウザドライバー名備考
Google ChromeChromeDriverSelenium Managerで自動管理可能
Microsoft EdgeEdgeDriverChromiumベースのため、ChromeDriverとAPI互換
Mozilla FirefoxGeckoDriverGeckoエンジン専用ドライバー
Apple SafariSafariDrivermacOS標準搭載、追加インストール不要
Internet ExplorerIEDriverレガシー対応。Selenium 4でも利用可能だが非推奨

Python × Selenium WebDriver ── 導入から実行まで

最も利用者の多いPythonを例に、Selenium WebDriverの導入から基本操作までの手順を示します。

Step 1: Seleniumのインストール

pip install selenium

Selenium 4.6以降はSelenium Managerが同梱されているため、ブラウザドライバーの個別ダウンロードは原則不要です。Seleniumが使用するブラウザのバージョンを自動検出し、対応するドライバーをダウンロード・キャッシュします。

Step 2: ブラウザを起動してページを開く

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")
print(driver.title)
driver.quit()

Step 3: 要素の取得と操作

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")

# 検索ボックスに入力してEnter
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium WebDriver")
search_box.send_keys(Keys.RETURN)

# 検索結果の最初のリンクテキストを取得
results = driver.find_elements(By.CSS_SELECTOR, "h3")
for result in results[:5]:
    print(result.text)

driver.quit()

Step 4: 明示的な待機(Explicit Wait)

動的なWebページでは、要素の読み込みを待つ処理が不可欠です。

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/dynamic-page")

# 最大10秒間、指定した要素が表示されるまで待機
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "dynamic-content"))
)
print(element.text)
driver.quit()

time.sleep()による固定待機はテストの実行時間を不必要に延ばし、不安定なテストの原因になります。必ずWebDriverWaitを使ってください。

Step 5: 相対ロケーター(Selenium 4の新機能)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with

driver = webdriver.Chrome()
driver.get("https://example.com/form")

# 「メールアドレス」ラベルの下にあるinput要素を取得
email_label = driver.find_element(By.ID, "email-label")
email_input = driver.find_element(locate_with(By.TAG_NAME, "input").below(email_label))
email_input.send_keys("user@example.com")

driver.quit()

スクレイピングでの活用と注意点

SeleniumはWebスクレイピングにも広く使われています。JavaScriptで動的にレンダリングされるSPA(Single Page Application)のデータ取得では、HTMLパーサー単体(Beautiful Soupなど)では対応できない場面があり、実際にブラウザを動かすSeleniumが有効です。

スクレイピング時の法的・技術的な留意事項

観点内容
robots.txtクロール前に対象サイトのrobots.txtを確認し、禁止パスへのアクセスを避ける
利用規約対象サイトの利用規約でスクレイピングが禁止されていないか確認する
アクセス頻度短時間に大量リクエストを送るとサーバーへ負荷をかけ、アクセス遮断やIPブロックの対象になり得る
個人情報取得データに個人情報が含まれる場合、個人情報保護法への対応が必要
検出リスクSeleniumによるアクセスは通常のブラウザと異なるフィンガープリントを持つため、Bot検出システムに検知される場合がある

大量のページを高速に取得したい場合は、Scrapyなどの専用クローラーフレームワークとの組み合わせや、RequestsとBeautiful Soupによる軽量な方法も検討してください。Seleniumはブラウザを起動するぶんリソース消費が大きいため、JavaScript描画が不要なページにはオーバースペックです。

Seleniumを選ぶメリット

メリット詳細
無料・オープンソースApache License 2.0。商用利用も含め費用がかからない
多言語対応Python・Java・JavaScript・C#・Rubyの5言語を公式サポート
クロスブラウザChrome・Edge・Firefox・Safari・IEに対応
クロスプラットフォームWindows・macOS・Linuxで動作
豊富なエコシステムSeleniumHQ公式のほか、Appium(モバイル)、Selenide(Java向けラッパー)など周辺ツールが充実
W3C標準準拠WebDriverプロトコルがW3C勧告。ブラウザベンダーが公式にサポート
大規模な開発者コミュニティStack Overflowでの質問数、GitHubのスター数ともにテスト自動化ツールで最多級

導入前に把握すべき制約

Seleniumは万能ではありません。導入前に以下の制約を理解しておくことで、適切なツール選定ができます。

制約具体的な影響
プログラミングスキルが必要WebDriverの利用にはコーディング能力が前提(IDE除く)
Webブラウザ専用デスクトップアプリやモバイルネイティブアプリの操作には対応していない(モバイルはAppiumで補完)
テスト管理機能がないテストケースの管理・レポート生成は別途ツール(TestNG、pytest、Allure等)が必要
UIの変更に弱いロケーター(XPath・CSS Selector)が対象画面のDOM構造に依存するため、UI変更でテストが壊れやすい
実行速度ブラウザを実際に起動するため、ヘッドレスHTTPテストに比べて実行速度は遅い
保守コストテストスクリプトの保守が属人化しやすく、チーム運用には設計上の工夫が必要

SeleniumとRPAの使い分け

Seleniumと混同されやすいのがRPA(Robotic Process Automation)ツールです。どちらもPC操作を自動化するものですが、対象範囲と導入形態が異なります。

比較項目SeleniumRPA(UiPath・Power Automate等)
対象範囲Webブラウザのみブラウザ+デスクトップアプリ+Excel等
費用無料(オープンソース)有料ライセンスが多い
構築難易度プログラミング必須ノーコード/ローコードで構築可能
柔軟性コードで自由にカスタマイズ可能ツール側の制約に依存
主な利用者エンジニア・開発チーム業務部門・非エンジニア
向いているシナリオテスト自動化・開発ワークフロー統合定型業務の自動化・部門横断の業務効率化

Webブラウザ上のテスト自動化や開発パイプラインへの組み込みにはSeleniumが適しています。一方、ブラウザ以外のアプリケーションを含む業務全体を自動化したい場合はRPAが選択肢に入ります。

Playwright・Cypressとの比較

Selenium以外にも、近年はPlaywright(Microsoft)やCypress(Cypress.io)といったブラウザテストフレームワークが台頭しています。

比較項目SeleniumPlaywrightCypress
開発元SeleniumHQ(コミュニティ)MicrosoftCypress.io
初回リリース2004年2020年2017年
対応言語Python, Java, JS, C#, RubyPython, Java, JS/TS, C#JavaScript/TypeScript のみ
対応ブラウザChrome, Edge, Firefox, Safari, IEChromium, Firefox, WebKitChrome, Edge, Firefox, Electron
モバイルエミュレーション限定的(Appiumで補完)組み込みで対応非対応
並列実行Selenium Grid標準で並列対応有料プラン(Cypress Cloud)
待機処理明示的にWebDriverWaitを記述自動待機(Auto-Wait)自動リトライ機構
セットアップSelenium Manager で簡易化npx playwright install で完了npm install cypress で完了
コミュニティ規模最大(20年以上の蓄積)急成長中(GitHubスター74,000超)フロントエンド開発者に人気

選定の目安:

  • Selenium: 複数言語での開発チームがある、レガシーブラウザ対応が必要、既存のSeleniumテスト資産がある
  • Playwright: 新規プロジェクトでモダンなテスト基盤を構築したい、自動待機や並列実行を標準機能で使いたい
  • Cypress: フロントエンド中心のSPA開発でJavaScript/TypeScriptに統一されている環境

よくある課題と対処法

テストが不安定になる(Flaky Test)

DOM要素の読み込みタイミングに起因するケースが大半です。time.sleep()ではなくWebDriverWaitによる明示的待機を使い、要素の存在・可視性を条件にしてください。加えて、ページオブジェクトモデル(POM)でロケーターを一元管理することで、UI変更時の修正箇所を局所化できます。

ブラウザドライバーのバージョン不一致

Selenium 4.6以降に同梱されるSelenium Managerが、インストール済みのブラウザに対応するドライバーを自動取得します。手動管理が必要な環境では、webdriver-manager(Python)やWebDriverManager(Java)といったサードパーティライブラリが利用できます。

CI/CDでの実行

ヘッドレスモードを有効にすることで、GUIのないCI/CD環境(GitHub Actions、Jenkins、GitLab CIなど)でも実行できます。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)

Docker公式イメージ(selenium/standalone-chrome等)を使えば、環境構築の手間をさらに削減できます。

まとめ ── Seleniumが向いているケースと次のステップ

Seleniumは、無料で使えるクロスブラウザ・多言語対応のテスト自動化フレームワークとして、20年以上の実績を持つツールです。W3C WebDriverプロトコルへの完全移行やSelenium Managerの導入により、セットアップの手軽さも向上しています。

一方で、プログラミングスキルが前提であること、UIの変更にテストが影響を受けやすいこと、テスト管理やレポート機能が組み込まれていないことは考慮が必要です。

まずはSelenium IDEで操作を録画し、テスト自動化の効果を体感したうえで、WebDriverによるコードベースのテストへステップアップする流れがスムーズです。新規プロジェクトで環境を選ばない場合はPlaywrightも検討し、プロジェクトの言語・ブラウザ要件・チーム体制に応じて最適なツールを選択してください。