◤Python無料教材配布◢ JobCodeメールマガジン実施中!

【Python】Seleniumとは?インストールから使い方まで徹底解説!

‎python-selenium3-and-selenium4

Seleniumは、ChromeやEdgeなどのブラウザを自動的に操作するライブラリです。

利用用途として、WebサイトやWebアプリケーションの単体テスト、Webスクレイピングによるデータ収集に使われます。

ここでは、Seleniumのインストールから使い方まで解説します。

筆者の経歴
  • SIer/Web系企業での実務経験があるフリーランスエンジニア
  • プログラミングスクールでの講師実績あり
  • HR領域によるエンジニア特化の採用代行を業務委託で兼務
【無料配布】Python基礎学習教材のプレゼント実施中!

本記事をお読み頂いているPython初学者向けに、メルマガ登録にてPython基礎学習教材の無料配布を実施しています。
以下に無料配布するPython資料をご紹介します。

無料配布するPython各資料
  • Python入門ガイド
  • Python基礎知識ガイド
  • tkinter基礎知識ガイド
  • 【tkinter製】デスクトップアプリフォルダ

Python学習に役立つ基礎知識ガイドを始め、アプリ開発時の基礎学習教材を用意しています。

各資料データに関しては不定期の更新になりますが、メルマガ登録者へ優先的にお知らせします。

記事ではお伝えできない内容を多分に含むため、メルマガ登録者限定にさせて頂きました。

ご興味がある人は以下からメルマガ登録を実施頂けますと幸いです。

\ メールアドレスのみで10秒登録! /

目次

Seleniumとは

Seleniumは、ブラウザを自動的に操作するライブラリであるため、自動化テストの実施やWebスクレイピングに利用されます。

また、SeleniumはWebサイト・Webアプリに対してブラウザ操作するため、静的ページで構成されたサイトだけでなく動的ページにも対応できます。

特に、SNS等のWebサイト・Webアプリも操作できるので、ログイン機能などが実装されるページにおいても対応できる利点があります。

SeleniumによるWebスクレイピングの流れ

Seleniumによるスクレイピングの流れは、以下の3ステップを踏みます。

スクレイピング時の準備プロセス
STEP
データ収集

API・クローラー/Webスクレイピング等で収集・リクエストし、データを収集します。

STEP
データ抽出

解析から対象になるデータを特定要素(classやxpathなど)から抽出します。

STEP
データ保存・出力

抽出・加工・整形したデータを保存し、目的に沿ったCSVやExcelファイルに出力します。

Webスクレイピングは大きく3ステップに分けられますが、Seleniumはデータ収集とデータ抽出に利用されます。

また、データ収集に対する考え方を詳しく知りたい人は「代表的なデータ収集方法とデータ活用の目的や種類」を一読ください。

Seleniumのインストール

Seleniumは、Pythonの標準ライブラリとしてインストールされていないため、別途インストールする必要があります。

Seleniumはバージョン3とバージョン4の書き方がネット上で混同されているケースが多いです。

そのため、Seleniumのバージョン確認を実施していただけると幸いです。

ここでは、バージョン3とバージョン4の書き方を並行して記載していきます。

pip show selenium

上記コマンドをMacであればターミナル、Windowsであればコマンドプロンプトで実施すれば、Seleniumのバージョンを確認できます。

pip install selenium==3.141.0

上記のpipコマンドでは、バージョン3を指定していますが任意のバージョンを指定し実施してください。

Webdriverとは

Webdriverは、各driver(ChromeDriverやFireFoxDriver・Microsoft Edge webdriverなど)を通じてブラウザと通信します。

また、Webdriverは各driverを通じてブラウザにコマンドを渡し、同ルートを介して情報を受け取ります。

webdriver(ChromeDriver)のインストール

seleniumでは、webdriverとセットで利用する必要があります。

本記事では、最も利用されるChromeDriverによるwebdriverになります。

まだお使いのPCにChromeブラウザがインストールされていない場合、以下のリンクからChromeのダウンロードとインストールを実施してください。

あるいはMicrosoft Edge Chromiumがインストールされていない場合、以下のリンクからダウンロードとインストールを実施してください。

また、ChromeDriverも同様に以下のリンクからダウンロードを実施してください。

webdriverのパス指定について、Selenium3と4で異なるため、注意が必要です。

Chrome用とEdge用にて、それぞれSelenium3,4を記載します。

Google Chrome
# Selenium 3
from selenium import webdriver

options = webdriver.ChromeOptions()
driver = webdriver.Chrome(executable_path="./path/to/driver", options=options)

以下は、改めてSelenium3におけるGoogle Chromeの具体的な手順を示します。

STEP
Google Chrome WebDriverのダウンロード
  • Chromeのバージョンに一致するWebDriverをダウンロードします。
  • ダウンロードリンク: Google Chrome WebDriver
STEP
WebDriverのパスを設定
  • ダウンロードしたchromedriver.exeのパスを指定します。

webdriver.ChromeOptions(): Chrome用のオプションを設定するためのオブジェクトを作成します。
webdriver.Chrome(...): Chrome用のWebDriverを初期化します。
executable_path="./path/to/chromedriver": Chrome WebDriverの実行ファイルへのパスを指定します。

これで、Google Chromeブラウザを使用したSelenium3のテストを実行できます。

# Selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

options = webdriver.ChromeOptions()
service = Service(executable_path="./path/to/driver")
driver = webdriver.Chrome(service=service, options=options)

以下は、改めてSelenium4におけるGoogle Chromeの具体的な手順を示します。

STEP
Google Chrome WebDriverのダウンロード
  • Edgeのバージョンに一致するWebDriverをダウンロードします。
  • ダウンロードリンク: Google Chrome WebDriver
STEP
WebDriverのパスを設定
  • ダウンロードしたchromedriver.exeのパスを指定します。

webdriver.ChromeOptions(): Chrome用のオプションを設定するためのオブジェクトを作成します。
Service(executable_path="./path/to/chromedriver"): Chrome WebDriverの実行ファイルへのパスを指定し、サービスを初期化します。
webdriver.Chrome(service=service, options=options): Chrome用のWebDriverを初期化します。

これで、Google Chromeブラウザを使用したSelenium4のテストを実行できます。

Microsoft Edge
# Selenium 3
from selenium import webdriver

options = webdriver.EdgeOptions()
driver = webdriver.Edge(executable_path="./path/to/msedgedriver", options=options)

以下は、改めてSelenium3におけるMicrosoft Edgeの具体的な手順を示します。

STEP
Microsoft Edge WebDriverのダウンロード
  • Edgeのバージョンに一致するWebDriverをダウンロードします。
  • ダウンロードリンク: Microsoft Edge WebDriver
STEP
WebDriverのパスを設定
  • ダウンロードしたmsedgedriver.exeのパスを指定します。

webdriver.EdgeOptions(): Edge用のオプションを設定するためのオブジェクトを作成します。
webdriver.Edge(...): Edge用のWebDriverを初期化します。
executable_path="./path/to/msedgedriver": Edge WebDriverの実行ファイルへのパスを指定します。

これで、Microsoft Edgeブラウザを使用したSelenium3のテストを実行できます。

# Selenium 4
from selenium import webdriver
from selenium.webdriver.edge.service import Service

options = webdriver.EdgeOptions()
service = Service(executable_path="./path/to/msedgedriver")
driver = webdriver.Edge(service=service, options=options)

以下は、改めてSelenium4におけるMicrosoft Edgeの具体的な手順を示します。

STEP
Microsoft Edge WebDriverのダウンロード
  • Edgeのバージョンに一致するWebDriverをダウンロードします。
  • ダウンロードリンク: Microsoft Edge WebDriver
STEP
WebDriverのパスを設定
  • ダウンロードしたmsedgedriver.exeのパスを指定します。

webdriver.EdgeOptions(): Edge用のオプションを設定するためのオブジェクトを作成します。
Service(executable_path="./path/to/msedgedriver"): Edge WebDriverの実行ファイルへのパスを指定し、サービスを初期化します。
webdriver.Edge(service=service, options=options): Edge用のWebDriverを初期化します。

これで、Microsoft Edgeブラウザを使用したSelenium4のテストを実行できます。

端的に言えばSelenium3では、直接executable_pathを指定します。

一方で、Selenium4ではServiceオブジェクトを経由してexecutable_pathに渡します。

webdriver-managerのインストール

Seleniumを利用するにあたり、webdriver(ChromeDriver/EdgeDriverなど)をインストールする必要があります。

また、Chrome等のブラウザは定期的にアップデートされ、古いバージョンのwebdriverが使用できなくなるケースがあります。

そのため、webdriverを自動更新するライブラリであるwebdriver-managerのインストールをおすすめします。

pip install webdriver-manager

上記コマンド実施後、Successfullyが表示されればインストール完了です。

また、Selenium3とSelenium4によってPythonファイルへの記述方法が異なります。

Google Chrome
# Selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
# Selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
Microsoft Edge
# Selenium 3
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager

driver = webdriver.Edge(executable_path=EdgeChromiumDriverManager().install())
# Selenium 4
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager

driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))

上記コードを記述することで、ブラウザバージョンのアップデートの度に、webdriver更新時の手間が省けます。

Seleniumのメソッドの使い方

代表的なSeleniumのメソッドは以下の4つです。

メソッド名説明
.get()対象URLを指定しアクセス/データ取得するメソッド
.find_element_by_〇〇(“”)Selenium3にて利用されるfind系メソッド
.find_element(By.〇〇, “xx”)Selenium4にて利用されるfind系メソッド
.send_keys()対象にデータ送信するメソッド
.click()対象をEnterするメソッド
Seleniumの代表的なメソッド

本記事では、ブラウザ操作に利用するため、上記メソッドを重点的に解説します。

.get()メソッドの使い方

Seleniumでは、webdriverを利用しブラウザを起動する必要があります。

#Googleにアクセス
target_url = "https://www.google.co.jp"
driver.get(target_url)

上記コードを記述することで、Chromeブラウザが起動します。

.find系メソッドの使い方

Chromeブラウザを起動後、.find系メソッドで要素を取得する必要があります。

要素参照先説明
.find_element_by_name(“xx”)name要素のデータ抽出
.find_element_by_id(“xx”)id要素のデータ抽出
.find_element_by_class_name(“xx”)class要素のデータ抽出
.find_element_by_xpath(“xx”)xpath要素のデータ抽出
.find_element_by_css_selector(“xx”)cssセレクタ要素のデータ抽出
Selenium3 – .find_element_by_〇〇

Selenium4の場合、Byオブジェクトを使用するため、以下のモジュールをインポートしておきましょう。

from selenium.webdriver.common.by import By
要素参照先説明
.find_element(By.NAME,”xx”)name要素のデータ抽出
.find_element(By.ID,”xx”)id要素のデータ抽出
.find_elements(By.CLASS_NAME,”xx”)class要素のデータ抽出
.find_element(By.XPATH,”xx”)xpath要素のデータ抽出
.find_element(By.CSS_SELECTOR,”xx”)cssセレクタ要素のデータ抽出
Selenium4 – .find_element(By.〇〇)

Selenium3と4で異なる記述になります。

また、単一データの場合は上記の場合で取得できますが、複数データを取得する場合はelement(s)のように、”s”を付与してください。

本記事では、Chromeの初期画面にて検索ボックス(textarea)を抽出しますが、以下のパターンで抽出できるか確認しました。

# Selenium3
# nameの場合
print(driver.find_element_by_name("q"))
# idの場合
print(driver.find_element_by_id("APjFqb"))
# classの場合
print(driver.find_element_by_class_name("gLFyf"))
# xpathの場合
print(driver.find_element_by_xpath("/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/textarea"))
# cssセレクタの場合
print(driver.find_element_by_css_selector("#APjFqb"))
# Selenium4
# nameの場合
print(driver.find_element(By.NAME, "q"))
# idの場合
print(driver.find_element(By.ID, "APjFqb"))
# classの場合
print(driver.find_element(By.CLASS_NAME, "gLFyf"))
# xpathの場合
print(driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/textarea"))
# cssセレクタの場合
print(driver.find_element(By.CSS_SELECTOR, "#APjFqb"))

これで無事WebElementを取得できました。

.send_keys()メソッドの使い方

ここでは、上述したChromeの初期画面にて検索ボックス(textarea)を抽出し、文字列データを送信します。

パターンは一つに絞りますが、それぞれ要素取得できるパターンで変更してもらえたらと思います。

# Selenium3
driver.find_element_by_name("q").send_keys("Python Selenium")
# Selenium4
driver.find_element(By.NAME, "q").send_keys("Python Selenium")

ブラウザを確認すると、文字列データが検索ボックス(textarea)に入力されていることがわかると思います。

.click()メソッドの使い方

ここでは、上述したChromeの初期画面にて検索ボックス(textarea)に文字列データを送信後、クリック/Enterキーの処理を加えます。

また、Pythonファイルの処理がブラウザ操作より速いため、ブラウザの表示速度に合わせ、timeモジュールにて時間調整します。

import time

Pythonの標準ライブラリであるtimeモジュールをインポートしておきましょう。

# Selenium3
driver.find_element_by_name("q").send_keys("Python Selenium")
time.sleep(1) #処理調整
# form(クリック用)
search_button = driver.find_element_by_xpath("/html/body/div[1]/div[3]/form")
search_button.click()
# Selenium4
driver.find_element(By.NAME, "q").send_keys("Python Selenium")
time.sleep(1) #処理調整
# form(クリック用)
search_button = driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/form")
search_button.click()

これで、Chromeブラウザにて検索結果が表示されているかと思います。

上記の方法を利用することで、ログインID&パスワードなどによるBasic認証を突破するスクレイピングプログラムが作成可能になります。

Selenium3,4におけるタブ・ウィンドウの切り替え方法

Selenium3とSelenium4では、それぞれタブ・ウィンドウの切り替え方法が異なります。

Selenium4は新しいドライバーオブジェクトを作成せず、同じセッションで新しいタブやウィンドウを作成し、フォーカスできます。

そのため、Selenium4は新しいタブあるいは新しいウィンドウを作成し自動的に切り替えるAPIである.new_windowが用意されています。

一方でSelenium3は、URLを新しいタブあるい新しいウィンドウを作成後、ハンドルの切り替えswitch_to.window()を実行する必要があります。

Selenium3メソッド
タブの作成driver.execute_script(“window.open()”)
タブの切り替えdriver.switch_to.window(driver.window_handles[1])
Selenium3 – タブ/ウィンドウ作成と切り替え
Selenium4メソッド
タブの作成/切り替えdriver.switch_to.new_window(“tab”)
ウィンドウの作成/切り替えdriver.switch_to.new_window(“window”)
Selenium4 – タブ/ウィンドウ作成と切り替え

どちらもタブ・ウィンドウ作成後、前のタブ・ウィンドウに戻したい場合はハンドルの切り替えで調整しましょう。

仮に作成後のタブ・ウィンドウの作業が終了し、 ブラウザーで最後に開いたウィンドウまたはタブではない場合、以前使用していたタブ・ウィンドウに切り替える必要があります。

ウィンドウを閉じた後に、別のウィンドウハンドルに切り替えを忘れると、現在閉じられたページでWebDriverが実行されたままになり、No Such Window Exceptionといったエラーが発生します。

Seleniumの実行を継続するには、有効なウィンドウハンドルに切り替える必要があるため注意しましょう。

例えば、対象サイトの検索結果一覧ページを表示しながら、別タブで詳細ページを表示してスクレイピングを実行するといったケースで役立ちます。

Seleniumライブラリのクラス/メソッド一覧

Seleniumライブラリには多くのクラスとメソッド/引数が存在します。

ここでは、改めて各クラスにおけるメソッドと引数をまとめます。

Seleniumにおける主なクラス
  • WebDriver
  • WebElement
  • By
  • Options
  • Service
  • ActionChains
  • Select
  • Alert

Seleniumにおける各クラスのメソッドと引数を確認していきましょう。

WebDriver

WebDriverクラスは、Seleniumでブラウザを操作する中心的なインターフェースです。

ブラウザ起動、Webページへのアクセス、ページ内の要素を検索/操作などの機能を提供します。

このクラスは、ChromeやFirefox/Edgeなど各種ブラウザに対応しており、操作の一貫性を保ちつつ自動化が可能です。

Seleniumを使った自動化スクリプトは、主にWebDriverのメソッドを通じて動作します。

スクロールできます
メソッド名引数説明
get(url)url (str)指定URLにブラウザを遷移させる
close()なし現在のウィンドウを閉じる
quit()なしブラウザ全体を終了する
find_element(by, value)by (By)、value (str)単一要素を取得
find_elements(by, value)by (By)、value (str)一致するすべての要素を取得
execute_script(script, *args)script (str)、args (任意)JavaScriptを実行
get_screenshot_as_file(path)path (str)スクリーンショットをファイル保存
get_cookies()なし現在の全クッキーを取得
add_cookie(cookie_dict)cookie_dict (dict)クッキーを追加
delete_all_cookies()なしすべてのクッキーを削除
back()なしブラウザで1ページ戻る
forward()  なしブラウザで1ページ進む
refresh()なしページをリロードする
maximize_window()なしウィンドウを最大化する
minimize_window()なしウィンドウを最小化する
set_window_size(w, h)w (int), h (int)ウィンドウサイズを設定
set_window_position(x, y)x (int), y (int)ウィンドウ位置を設定
switch_to.frame(frame)frame (index/id/element)指定フレームに切り替える
switch_to.default_content()なしフレーム外に戻る
switch_to.window(handle)handle (str)ウィンドウを切り替える
get_window_handles()なし開いているすべてのウィンドウハンドルを取得
get_window_handle()なし現在のウィンドウハンドルを取得
title(プロパティ)なし現在のページタイトルを取得
current_url(プロパティ)なし現在のURLを取得
WebDriverクラスの主要メソッド一覧
get(url)
driver.get("https://www.example.com")
close()
driver.close()  # 現在のタブを閉じる
quit()
driver.quit()  # すべてのタブとブラウザプロセスを終了
find_element()
from selenium.webdriver.common.by import By
element = driver.find_element(By.ID, "username")
find_elements()
elements = driver.find_elements(By.CLASS_NAME, "item")
execute_script()
driver.execute_script("alert('Hello from Selenium!')")
get_screenshot_as_file()
driver.get_screenshot_as_file("screenshot.png")
get_cookies()
cookies = driver.get_cookies()
add_cookie()
driver.add_cookie({"name": "mycookie", "value": "abc123"})
delete_all_cookies()
driver.delete_all_cookies()
back() / forward()
driver.back()
driver.forward()
refresh()
driver.refresh()
maximize_window() / minimize_window()
driver.maximize_window()
driver.minimize_window()
set_window_size() / set_window_position()
driver.set_window_size(1024, 768)
driver.set_window_position(100, 200)
switch_to.frame() / switch_to.default_content()
driver.switch_to.frame("iframe1")  # フレームに入る
driver.switch_to.default_content()  # フレームから出る
switch_to.window()
handles = driver.get_window_handles()
driver.switch_to.window(handles[1])  # 2つ目のタブへ
title / current_url
print(driver.title)
print(driver.current_url)

WebElement

WebElementクラスは、Seleniumで取得したページ上のHTML要素を表すオブジェクトです。

テキストの取得/クリック/入力/属性の取得など、ブラウザ上の要素に対する直接操作を提供します。

WebElementのインスタンスは、find_element()やfind_elements()にて取得されます。

ユーザーの代わりにボタンを押したり、フォームに入力したりといった自動化の核心的役割を担います。

スクロールできます
メソッド名 / プロパティ引数説明
click()なし要素をクリックする
submit()なしフォームを送信する
send_keys(*value)value: str要素にキー入力する
clear()なし入力フィールドをクリアする
get_attribute(name)name: str属性の値を取得する
get_dom_attribute(name)name: strDOM上の属性値を取得(非標準属性含む)
get_property(name)name: strJavaScriptのプロパティを取得
is_displayed()なし要素が表示されているかを確認
is_enabled()なし要素が有効かを確認
is_selected()なし選択状態かを確認(ラジオボタン等)
screenshot(filename)filename: str要素のスクリーンショットを保存
find_element(by, value)by, value子要素を1つ取得
find_elements(by, value)by, value子要素をすべて取得
value_of_css_property(name)name: strCSSプロパティの値を取得
tag_name(プロパティ)なし要素のタグ名を取得
text(プロパティ)なし要素内のテキストを取得
rect(プロパティ)なし要素の位置とサイズ情報を取得
location(プロパティ)なし要素の座標を取得
size(プロパティ)なし要素のサイズ(幅と高さ)を取得
WebElementクラスの主要メソッド一覧
click()
element = driver.find_element(By.ID, "submit-btn")
element.click()
submit()
form = driver.find_element(By.ID, "login-form")
form.submit()
send_keys()
input_box = driver.find_element(By.NAME, "username")
input_box.send_keys("admin123")
clear()
input_box.clear()
get_attribute()
href = element.get_attribute("href")
get_dom_attribute()
custom_attr = element.get_dom_attribute("data-custom-id")
get_property()
value = element.get_property("value")
is_displayed()
if element.is_displayed():
    print("表示されています")
is_enabled()
if element.is_enabled():
    print("操作可能です")
is_selected()
checkbox = driver.find_element(By.ID, "agree")
print(checkbox.is_selected())
screenshot()
element.screenshot("element.png")
find_element()(子要素)
table = driver.find_element(By.ID, "user-table")
row = table.find_element(By.TAG_NAME, "tr")
find_elements()(複数子要素)
rows = table.find_elements(By.TAG_NAME, "tr")
value_of_css_property()
color = element.value_of_css_property("color")
tag_name(プロパティ)
print(element.tag_name)  # 例: 'input'
text(プロパティ)
print(element.text)
rect
print(element.rect)  # {'height': 20, 'width': 100, 'x': 10, 'y': 50}
location
print(element.location)  # {'x': 10, 'y': 50}
size
print(element.size)  # {'width': 100, 'height': 20}

By

Byクラスは、SeleniumでHTML要素を検索する際に使用する定数を提供します。

find_element()やfind_elements()メソッドと組み合わせて使用し、ID/クラス名/CSSセレクタ/XPathなど多様な方法で要素を特定できます。

可読性・保守性を高めるために、By.IDやBy.CSS_SELECTORのように使うことが推奨されます。

スクロールできます
定数名利用できる引数の形式説明
By.ID“id値”HTMLのid属性による検索
By.NAME“name値”HTMLのname属性による検索
By.CLASS_NAME“class値”要素のクラス名による検索
By.TAG_NAME“タグ名”HTMLタグ名(例:div, a)による検索
By.LINK_TEXT“リンク文字列”<a>タグのリンク文字列と完全一致で検索
By.PARTIAL_LINK_TEXT“部分文字列”<a>タグのリンク文字列の一部と一致するものを検索
By.CSS_SELECTOR“セレクタ文字列”CSSセレクタによる検索(柔軟・高速)
By.XPATH“XPath文字列”XPathによる構造的な検索
Byクラスの定数一覧
By.ID
from selenium.webdriver.common.by import By
element = driver.find_element(By.ID, "login-button")
By.NAME
element = driver.find_element(By.NAME, "username")
By.CLASS_NAME
element = driver.find_element(By.CLASS_NAME, "alert")
By.TAG_NAME
element = driver.find_element(By.TAG_NAME, "footer")
By.LINK_TEXT
element = driver.find_element(By.LINK_TEXT, "お問い合わせ")
By.PARTIAL_LINK_TEXT
element = driver.find_element(By.PARTIAL_LINK_TEXT, "問い")
By.CSS_SELECTOR
element = driver.find_element(By.CSS_SELECTOR, "div.alert > span.message")
By.XPATH
element = driver.find_element(By.XPATH, "//div[@class='alert']/span")
よくある使い方の例(まとめ)
# 例: ログインボタンをIDで取得してクリック
driver.find_element(By.ID, "login-btn").click()
# 例: フォーム入力
driver.find_element(By.NAME, "email").send_keys("user@example.com")
# 例: 複数要素取得
items = driver.find_elements(By.CLASS_NAME, "product-item")
# 例: CSSセレクタによる階層検索
driver.find_element(By.CSS_SELECTOR, "#main > ul > li:nth-child(2)")

Options

Optionsクラスは、ブラウザドライバー(ChromeやFirefoxなど)の起動時に使用するオプション設定を構成するクラスです。

ユーザーの指定により、ヘッドレスモード/拡張機能の追加/起動引数の設定/プロファイルの指定などが可能になります。

webdriver.Chrome(options=…) のようにOptionsオブジェクトを渡して使います。

ブラウザごとにChromeOptions,FirefoxOptions,EdgeOptionsなどが用意されています。

以下は、ChromeOptionsを基点に主要メソッド一覧を記載します。

スクロールできます
メソッド名引数説明
add_argument(argument)argument: strコマンドライン引数を追加(例:–headless)
add_experimental_option(name, value)name: str, value: AnyChromeの実験的オプションを追加
add_extension(path)path: strChrome拡張機能(.crx)の追加
add_encoded_extension(encoded)encoded: bytesbase64でエンコードされた拡張機能の追加
set_headless(headless=True)headless: boolヘッドレスモードを有効化(非推奨、add_argument推奨)
set_capability(name, value)name: str, value: AnyDesired Capabilitiesを個別に設定
to_capabilities()なし現在のオプション設定をcapabilities辞書として返す
set_binary(path)path: strChromeの実行ファイルのパスを指定
accept_insecure_certs(属性)True/Falseセルフ署名証明書などの許可
Optionsクラスの主要メソッド一覧
add_argument()
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")
options.add_argument("--window-size=1280,800")
add_experimental_option()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
add_extension()
options.add_extension("/path/to/extension.crx")
add_encoded_extension()
with open("my_ext.crx", "rb") as f:
    encoded = f.read()
options.add_encoded_extension(encoded)
set_headless()
options.set_headless(True)  # ⚠️ 非推奨、--headless を add_argument で使うべき
set_capability()
options.set_capability("goog:loggingPrefs", {"performance": "ALL"})
to_capabilities()
caps = options.to_capabilities()
print(caps)
set_binary()
options.set_binary("/usr/bin/google-chrome-stable")
accept_insecure_certs
options.accept_insecure_certs = True
起動時にOptionsを使う例
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")
options.add_argument("--disable-gpu")

driver = webdriver.Chrome(options=options)

Service

Serviceクラスは、Seleniumで使用するブラウザドライバー自体の起動・停止を制御するクラスです。

従来はexecutable_pathを直接webdriver.Chrome()に渡していましたが、Selenium4以降はServiceクラスの使用が推奨されています。

ドライバーのログ出力/ポート番号/環境変数などの高度な制御も可能になります。

Chrome,Firefox,Edgeなど各ブラウザごとに専用のサブクラス(例:ChromeService)があります。

スクロールできます
メソッド名 / プロパティ引数説明
__init__()executable_path=None, port=0, service_args=None, env=None, log_path=NoneServiceオブジェクトを初期化
tart()なしドライバーサービスを起動
top()なしドライバーサービスを停止
is_connectable()なしサービスが接続可能か確認
assert_process_still_running()なしプロセスがまだ生きているかを確認(例外を投げる)
command_line_args()なし実行時の引数をリストで取得
send_remote_shutdown_command()なしリモートでシャットダウン要求を送信(内部使用)
Serviceクラスの主要メソッド/プロパティ一覧

また、初期化引数の詳細については以下になります。

スクロールできます
引数名説明
executable_pathstrドライバーのパス(例:chromedriver)
portint使用するポート(0指定で自動割り当て)
service_argslist起動時に渡す追加引数
envdict環境変数の指定
log_pathstrログファイルのパス指定
初期化引数
__init__()(Service の作成)
from selenium.webdriver.chrome.service import Service as ChromeService

service = ChromeService(executable_path="/path/to/chromedriver", log_path="chrome.log")
start()
service.start()
print(f"Service started at {service.service_url}")
stop()
service.stop()
is_connectable()
if service.is_connectable():
    print("サービスに接続可能です")
assert_process_still_running()
try:
    service.assert_process_still_running()
except Exception as e:
    print("ドライバープロセスが停止しています", e)
command_line_args()
args = service.command_line_args()
print("実行時引数:", args)
send_remote_shutdown_command()(内部用途)
# 通常使用しません(例: テストや拡張時)
service.send_remote_shutdown_command()
WebDriverへの組み込み例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

service = ChromeService(executable_path="/path/to/chromedriver")
driver = webdriver.Chrome(service=service)

driver.get("https://example.com")
driver.quit()

その他のブラウザ向けServiceクラスは以下になります。

スクロールできます
ブラウザインポート名
Chromefrom selenium.webdriver.chrome.service import Service
Firefoxfrom selenium.webdriver.firefox.service import Service
Edgefrom selenium.webdriver.edge.service import Service

各クラスは同じインターフェースを持っています。

ActionChains

ActionChainsクラスは、Seleniumで複雑なユーザー操作(マウスの移動/ドラッグ&ドロップ/右クリック/キーボード操作など)をシミュレートするクラスです。

複数の操作をチェーン形式で順に記述し、perform()を呼び出すことで実行できます。

特に、ホバー操作/クリック&ホールド/キーボードショートカットの再現に便利です。

スクロールできます
メソッド名引数説明
click(on_element=None)on_element: WebElement(任意)要素上または現在の位置で左クリック
click_and_hold(on_element=None)on_element: WebElement(任意)要素をクリックしたまま保持
context_click(on_element=None)on_element: WebElement(任意)要素上または現在の位置で右クリック
double_click(on_element=None)on_element: WebElement(任意)要素上でダブルクリック
drag_and_drop(source, target)source, target: WebElement要素を別の要素へドラッグ&ドロップ
drag_and_drop_by_offset(source, xoffset, yoffset)source: WebElement, xoffset: int, yoffset: int指定ピクセル分ドラッグ
move_by_offset(xoffset, yoffset)xoffset, yoffset: int現在の位置から指定オフセットへ移動
move_to_element(to_element)to_element: WebElement要素の中央にマウスを移動(ホバー)
move_to_element_with_offset(to_element, xoffset, yoffset)to_element: WebElement, xoffset: int, yoffset: int要素の一部(オフセット)に移動
key_down(value, element=None)value: str, element: WebElement(任意)キーを押下
key_up(value, element=None)value: str, element: WebElement(任意)キーを放す
send_keys(*keys_to_send)*keys_to_send: strキー入力を送信
pause(seconds)seconds: float指定秒数の待機を挿入
release(on_element=None)on_element: WebElement(任意)押されたマウスボタンを放す
perform()なしすべての操作を一括実行
ActionChainsクラスの主要メソッド一覧
click()
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(driver)
actions.click().perform()
click_and_hold()
element = driver.find_element(By.ID, "drag-item")
actions.click_and_hold(element).pause(1).release().perform()
context_click()
element = driver.find_element(By.ID, "menu")
actions.context_click(element).perform()
double_click()
element = driver.find_element(By.ID, "button")
actions.double_click(element).perform()
drag_and_drop()
source = driver.find_element(By.ID, "item")
target = driver.find_element(By.ID, "dropzone")
actions.drag_and_drop(source, target).perform()
drag_and_drop_by_offset()
element = driver.find_element(By.ID, "item")
actions.drag_and_drop_by_offset(element, 100, 0).perform()
move_by_offset()
actions.move_by_offset(50, 100).click().perform()
move_to_element()
element = driver.find_element(By.ID, "hover-item")
actions.move_to_element(element).perform()
move_to_element_with_offset()
actions.move_to_element_with_offset(element, 10, 10).click().perform()
key_down() / key_up()
from selenium.webdriver.common.keys import Keys
input_box = driver.find_element(By.ID, "input")
actions.key_down(Keys.SHIFT).send_keys("hello").key_up(Keys.SHIFT).perform()
send_keys()
actions.send_keys("Hello Selenium!").perform()
pause()
actions.pause(2).click(element).perform()
release()
actions.click_and_hold(element).pause(1).release().perform()
perform()
actions.move_to_element(element).click().perform()
よくあるチェーン例(実践)
#ドラッグ&ドロップ
actions.click_and_hold(source).move_to_element(target).release().perform()
#ホバーして表示されたメニューをクリック
actions.move_to_element(menu).click(sub_item).perform()

Select

Selectクラスは、HTMLの<select>タグを操作する専用ユーティリティです。

select,deselect,get_optionsなど、ドロップダウンメニューの操作を直感的に行えます。

複数選択が可能な<select multiple>要素にも対応しており、is_multipleプロパティで確認できます。

単純なclick()より堅牢で、選択肢の値や表示テキストに基づいて操作できます。

スクロールできます
メソッド名・プロパティ引数説明
__init__(webelement)<select>要素(WebElement)Selectオブジェクトの初期化
select_by_value(value)value: str<option value=”…”> の値で選択
select_by_index(index)index: intインデックス番号(0始まり)で選択
select_by_visible_text(text)text: str表示テキストで選択
deselect_all()なし全選択を解除(multipleのみ)
deselect_by_value(value)value: str指定のvalueを解除
deselect_by_index(index)index: int指定インデックスを解除
deselect_by_visible_text(text)text: str表示テキストで解除
all_selected_options(プロパティ)なし選択中の <option> 要素リストを取得
first_selected_option(プロパティ)なし最初に選択されている <option> を取得
options(プロパティ)なしすべての <option> 要素を取得
is_multiple(プロパティ)なし複数選択が可能かどうかを返す
Selectクラスのメソッド一覧
初期化
from selenium.webdriver.support.ui import Select

select_element = driver.find_element(By.ID, "dropdown")
select = Select(select_element)
select_by_value()
select.select_by_value("python")
select_by_index()
select.select_by_index(2)
select_by_visible_text()
select.select_by_visible_text("Java")
deselect_all()
if select.is_multiple:
    select.deselect_all()
deselect_by_value()
select.deselect_by_value("java")
deselect_by_index()
select.deselect_by_index(0)
deselect_by_visible_text()
select.deselect_by_visible_text("Python")
all_selected_options
for option in select.all_selected_options:
    print(option.text)
first_selected_option
print(select.first_selected_option.text)
options
for option in select.options:
    print(option.get_attribute("value"))
is_multiple
if select.is_multiple:
    print("複数選択が可能なドロップダウンです")
複数選択ボックスの操作
# 複数選択可なselect要素
select = Select(driver.find_element(By.ID, "multi-select"))

select.select_by_visible_text("Option 1")
select.select_by_visible_text("Option 3")

select.deselect_by_visible_text("Option 1")

Alert

Alertクラスは、ブラウザ上で表示されるJavaScriptアラート/確認ダイアログ/プロンプト入力などの操作に使用するクラスです。

Seleniumでは、これらのポップアップは通常のDOMでは取得できないため、driver.switch_to.alertを使ってAlertオブジェクトに切り替え操作します。

ボタンのクリック(OK/キャンセル)や、テキスト入力/アラートのメッセージ取得などが可能です。

主にalert(),confirm(),prompt()に対応した自動テストに役立ちます。

スクロールできます
メソッド名引数説明
accept()なしアラートを受け入れる(OKを押す)
dismiss()なしアラートをキャンセル(Cancelを押す)
send_keys(text)text: strプロンプトに文字列を入力
text(プロパティ)なしアラートに表示されているメッセージを取得
Alertクラスのメソッド一覧
accept()
from selenium.webdriver.common.alert import Alert

alert = driver.switch_to.alert
alert.accept()
dismiss()
alert = driver.switch_to.alert
alert.dismiss()
send_keys()
alert = driver.switch_to.alert
alert.send_keys("Test input")
alert.accept()
text(プロパティ)
alert = driver.switch_to.alert
print("アラートメッセージ:", alert.text)
実践例:確認ダイアログの操作
# 確認ダイアログを開くような操作
driver.find_element(By.ID, "delete-btn").click()
# アラートへ切り替え
alert = driver.switch_to.alert
# メッセージ取得
print("確認メッセージ:", alert.text)
# OKをクリック(confirmを受け入れる)
alert.accept()
実践例:プロンプトへの入力
driver.find_element(By.ID, "prompt-btn").click()

alert = driver.switch_to.alert
alert.send_keys("Selenium User")
alert.accept()
注意点と補足

アラートが出る前にdriver.switch_to.alertを呼ぶとNoAlertPresentExceptionが発生します。

アラートを扱う前にWebDriverWaitで待機するのが推奨されます。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 10).until(EC.alert_is_present())
alert = driver.switch_to.alert
alert.accept()

SeleniumのWebDriverWaitの使い方

Seleniumを利用してブラウザ操作する場合、ブラウザに対する待機時間もうまく処理する必要があります。

また、Seleniumにおけるエラーの原因は、指定した要素が見つからないことがほとんどです。

人間の操作より遥かに速い操作でプログラムが処理するため、指定要素の存在有無でエラーを引き起こします。

ここでは以下に3つの待機処理を紹介します。

主な待機処理
  • .implicitly_wait()による暗黙的な待機処理
  • WebDriverWait.until()による明示的な待機処理
  • time.sleep()の待機処理

また、Seleniumで待機処理を実施する場合に以下のWebDriverWaitモジュールをインポートしておきます。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

SeleniumによるWebDriverWaitの使い方(各待機処理の方法)を知りたい人は、「【ブラウザを完全制御】SeleniumにおけるWebDriverの使い方を徹底解説!」を一読ください。

関連記事は、ブラウザを制御し自動化するseleniumのwebdriverの使い方を解説してます。
特に、ブラウザ制御の待機処理を詳細に記載してます。

本格的にエンジニアへのキャリアチェンジを考えてる人へ

プログラミングスキルを社内やプライベートで活用している人が増えています。

▼プログラミングスキルの活用事例
  • 一部業務プロセスの効率化/自動化
  • 分析システム構築による担当業務改善
  • 社内公開によるチーム/プロジェクトの業務時間短縮

Pythonは特にデータ収集や分析に特化したライブラリが豊富なため、業務プロセスの一元管理やDX化に貢献しています。

また、プログラミングに触れてエンジニアへのキャリアチェンジを実現したい人の人材規模も年々高まっています。

一度、あなたのキャリアプランを振り返ってみてください。

▼現在の状況を考える質問
  • 収入アップが見込めている
  • キャリアアップが見込めている
  • 働き方を明確に決めれている

上記の項目をYESと答えられる人は、特に言うことはありません。

現在、エンジニアへのキャリアチェンジでお悩みの方は、「【Python特化】厳選したおすすめプログラミングスクール」を一読ください。

本格的にエンジニアへのキャリアチェンジを考えてる人へ、Python特化の厳選したプログラミングスクールを解説してます。
また、スクールのメリットや金額など学習プラン設計についても言及してます。

この記事を書いた人

sugiのアバター sugi SUGI

【経歴】玉川大学工学部卒業→新卒SIer企業入社→2年半後に独立→プログラミングスクール運営/受託案件→フリーランスエンジニア&SEOコンサル→Python特化のコンテンツサイトJob Code運営中

目次