Seleniumは、ChromeやEdgeなどのブラウザを自動的に操作するライブラリです。
利用用途として、WebサイトやWebアプリケーションの単体テスト、Webスクレイピングによるデータ収集に使われます。
ここでは、Seleniumのインストールから使い方まで解説します。
- SIer/Web系企業での実務経験があるフリーランスエンジニア
- プログラミングスクールでの講師実績あり
- HR領域によるエンジニア特化の採用代行を業務委託で兼務
【無料配布】Python基礎学習教材のプレゼント実施中!
本記事をお読み頂いているPython初学者向けに、メルマガ登録にてPython基礎学習教材の無料配布を実施しています。
以下に無料配布するPython資料をご紹介します。
- Python入門ガイド
- Python基礎知識ガイド
- tkinter基礎知識ガイド
- 【tkinter製】デスクトップアプリフォルダ
Python学習に役立つ基礎知識ガイドを始め、アプリ開発時の基礎学習教材を用意しています。
各資料データに関しては不定期の更新になりますが、メルマガ登録者へ優先的にお知らせします。
記事ではお伝えできない内容を多分に含むため、メルマガ登録者限定にさせて頂きました。
ご興味がある人は以下からメルマガ登録を実施頂けますと幸いです。
\ メールアドレスのみで10秒登録! /
Seleniumとは

Seleniumは、ブラウザを自動的に操作するライブラリであるため、自動化テストの実施やWebスクレイピングに利用されます。
また、SeleniumはWebサイト・Webアプリに対してブラウザ操作するため、静的ページで構成されたサイトだけでなく動的ページにも対応できます。
特に、SNS等のWebサイト・Webアプリも操作できるので、ログイン機能などが実装されるページにおいても対応できる利点があります。
SeleniumによるWebスクレイピングの流れ
Seleniumによるスクレイピングの流れは、以下の3ステップを踏みます。
スクレイピング時の準備プロセス
API・クローラー/Webスクレイピング等で収集・リクエストし、データを収集します。
解析から対象になるデータを特定要素(classやxpathなど)から抽出します。
抽出・加工・整形したデータを保存し、目的に沿った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も同様に以下のリンクからダウンロードを実施してください。
- https://sites.google.com/a/chromium.org/chromedriver/downloads
- https://developer.microsoft.com/ja-jp/microsoft-edge/tools/webdriver/?form=MA13LH
webdriverのパス指定について、Selenium3と4で異なるため、注意が必要です。
Chrome用とEdge用にて、それぞれSelenium3,4を記載します。
# Selenium 3
from selenium import webdriver
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(executable_path="./path/to/driver", options=options)
以下は、改めてSelenium3におけるGoogle Chromeの具体的な手順を示します。
- Chromeのバージョンに一致するWebDriverをダウンロードします。
- ダウンロードリンク: Google Chrome WebDriver
- ダウンロードした
chromedriver.exe
のパスを指定します。
これで、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の具体的な手順を示します。
- Edgeのバージョンに一致するWebDriverをダウンロードします。
- ダウンロードリンク: Google Chrome WebDriver
- ダウンロードした
chromedriver.exe
のパスを指定します。
これで、Google Chromeブラウザを使用したSelenium4のテストを実行できます。
# Selenium 3
from selenium import webdriver
options = webdriver.EdgeOptions()
driver = webdriver.Edge(executable_path="./path/to/msedgedriver", options=options)
以下は、改めてSelenium3におけるMicrosoft Edgeの具体的な手順を示します。
- Edgeのバージョンに一致するWebDriverをダウンロードします。
- ダウンロードリンク: Microsoft Edge WebDriver
- ダウンロードした
msedgedriver.exe
のパスを指定します。
これで、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の具体的な手順を示します。
- Edgeのバージョンに一致するWebDriverをダウンロードします。
- ダウンロードリンク: Microsoft Edge WebDriver
- ダウンロードした
msedgedriver.exe
のパスを指定します。
これで、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ファイルへの記述方法が異なります。
# 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()))
# 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するメソッド |
本記事では、ブラウザ操作に利用するため、上記メソッドを重点的に解説します。
.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セレクタ要素のデータ抽出 |
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セレクタ要素のデータ抽出 |
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]) |
Selenium4 | メソッド |
---|---|
タブの作成/切り替え | driver.switch_to.new_window(“tab”) |
ウィンドウの作成/切り替え | driver.switch_to.new_window(“window”) |
どちらもタブ・ウィンドウ作成後、前のタブ・ウィンドウに戻したい場合はハンドルの切り替えで調整しましょう。
仮に作成後のタブ・ウィンドウの作業が終了し、 ブラウザーで最後に開いたウィンドウまたはタブではない場合、以前使用していたタブ・ウィンドウに切り替える必要があります。
ウィンドウを閉じた後に、別のウィンドウハンドルに切り替えを忘れると、現在閉じられたページでWebDriverが実行されたままになり、No Such Window Exception
といったエラーが発生します。
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を取得 |
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: str | DOM上の属性値を取得(非標準属性含む) |
get_property(name) | name: str | JavaScriptのプロパティを取得 |
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: str | CSSプロパティの値を取得 |
tag_name(プロパティ) | なし | 要素のタグ名を取得 |
text(プロパティ) | なし | 要素内のテキストを取得 |
rect(プロパティ) | なし | 要素の位置とサイズ情報を取得 |
location(プロパティ) | なし | 要素の座標を取得 |
size(プロパティ) | なし | 要素のサイズ(幅と高さ)を取得 |
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.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: Any | Chromeの実験的オプションを追加 |
add_extension(path) | path: str | Chrome拡張機能(.crx)の追加 |
add_encoded_extension(encoded) | encoded: bytes | base64でエンコードされた拡張機能の追加 |
set_headless(headless=True) | headless: bool | ヘッドレスモードを有効化(非推奨、add_argument推奨) |
set_capability(name, value) | name: str, value: Any | Desired Capabilitiesを個別に設定 |
to_capabilities() | なし | 現在のオプション設定をcapabilities辞書として返す |
set_binary(path) | path: str | Chromeの実行ファイルのパスを指定 |
accept_insecure_certs(属性) | True/False | セルフ署名証明書などの許可 |
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=None | Serviceオブジェクトを初期化 |
tart() | なし | ドライバーサービスを起動 |
top() | なし | ドライバーサービスを停止 |
is_connectable() | なし | サービスが接続可能か確認 |
assert_process_still_running() | なし | プロセスがまだ生きているかを確認(例外を投げる) |
command_line_args() | なし | 実行時の引数をリストで取得 |
send_remote_shutdown_command() | なし | リモートでシャットダウン要求を送信(内部使用) |
また、初期化引数の詳細については以下になります。
引数名 | 型 | 説明 |
---|---|---|
executable_path | str | ドライバーのパス(例:chromedriver) |
port | int | 使用するポート(0指定で自動割り当て) |
service_args | list | 起動時に渡す追加引数 |
env | dict | 環境変数の指定 |
log_path | str | ログファイルのパス指定 |
__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クラスは以下になります。
ブラウザ | インポート名 |
---|---|
Chrome | from selenium.webdriver.chrome.service import Service |
Firefox | from selenium.webdriver.firefox.service import Service |
Edge | from 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() | なし | すべての操作を一括実行 |
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(プロパティ) | なし | 複数選択が可能かどうかを返す |
初期化
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(プロパティ) | なし | アラートに表示されているメッセージを取得 |
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の使い方を徹底解説!」を一読ください。

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

プログラミングスキルを社内やプライベートで活用している人が増えています。
- 一部業務プロセスの効率化/自動化
- 分析システム構築による担当業務改善
- 社内公開によるチーム/プロジェクトの業務時間短縮
Pythonは特にデータ収集や分析に特化したライブラリが豊富なため、業務プロセスの一元管理やDX化に貢献しています。
また、プログラミングに触れてエンジニアへのキャリアチェンジを実現したい人の人材規模も年々高まっています。
一度、あなたのキャリアプランを振り返ってみてください。
- 収入アップが見込めている
- キャリアアップが見込めている
- 働き方を明確に決めれている
上記の項目をYESと答えられる人は、特に言うことはありません。
現在、エンジニアへのキャリアチェンジでお悩みの方は、「【Python特化】厳選したおすすめプログラミングスクール」を一読ください。
