Seleniumは、ChromeやEdgeなどのブラウザを自動的に操作するライブラリです。
利用用途として、WebサイトやWebアプリケーションの単体テスト、Webスクレイピングによるデータ収集に使われます。
また、Seleniumライブラリで制御するのがWebdriverになります。
本記事では、SeleniumにおけるWebdriverの使い方を解説します。
- SIer/Web系企業での実務経験があるフリーランスエンジニア
- プログラミングスクールでの講師実績あり
- HR領域によるエンジニア特化の採用代行を業務委託で兼務
▼【無料配布】Python基礎学習教材のプレゼント実施中!▼
本記事をお読み頂いているPython初学者向けに、メルマガ登録にてPython基礎学習教材の無料配布を実施しています。
以下に無料配布するPython資料をご紹介します。
- Python入門ガイド
- Python基礎知識ガイド
- tkinter基礎知識ガイド
- 【tkinter製】デスクトップアプリフォルダ
Python入門ガイドの概要

Python入門ガイドは、Python初学者向けに市場の動向や今後のプログラミングのヒントをまとめた資料になります。
以下は、Python入門ガイドの目次になります。(大枠のみ記載)
- Pythonとは
- Pythonの動向
- Pythonを学習するメリット
- Pythonからプログラミングを始める
上記の目次から、Pythonの特徴/開発領域/ビジネス市場の動向/仕事幅の増やし方など様々な観点で図解化しています。
Python基礎知識ガイドの概要
Python基礎知識ガイドは、Pythonをこれから始めたい人へコーディング中心にまとめた学習教材になります。
以下は、Python基礎知識ガイドの目次になります。(大枠のみ記載)
- Pythonの実行方法
- Pythonプログラムの基本構造
- 基本データ
- コレクション
- 条件分岐
- ループ
- 関数
- クラス
- モジュールとパッケージ
上記の目次から、コーディングルール/実例コードによる解説/各機能の注意点など初学者が理解しておくべき学習ポイントを集約させました。
tkinter基礎知識ガイドの概要
tkinter基礎知識ガイドは、Pythonによるデスクトップアプリ開発をこれから始めたい人へGUIコーディング中心にまとめた学習教材になります。
以下は、tkinter基礎知識ガイドの目次になります。
- tkinterの特徴
- 基本的な使い方
- 代表的なウィジェット
- レイアウト管理
- イベントとコールバック
- カスタマイズと拡張
- tkinterの構造(オブジェクト指向的設計)
- tkinterを扱う際の注意点
- tkinter製デスクトップアプリケーション例
特にGUIのデザイン性やtkinterによるアプリ開発に利用しやすいよう設計しております。
【tkinter製】デスクトップアプリフォルダ
【tkinter製】デスクトップアプリフォルダは、tkinterによるデスクトップアプリ開発をこれから始めたい人へサンプルアプリをまとめた管理フォルダになります。
以下は、【tkinter製】デスクトップアプリフォルダに格納しているサンプルアプリになります。
- 【tkinter製】デスクトップ用メモアプリ
- 【tkinter製】デスクトップ用ToDoアプリ
- 【tkinter製】デスクトップ用AI(Gemini)機能付きメモアプリ
- Excel業務効率化ツール
- CSVファイル結合ツール
- Webサイト監視ツール
- GoogleMapsデータ収集ツール







また、メルマガ登録の特典も今後増やしていく予定です。
特典1 | Pythonに限らずビジネス/その他技術関連の資料配布 |
---|---|
特典2 | メルマガ登録者限定のPython資料配布 |
各資料データに関しては不定期の更新になりますが、メルマガ登録者へ優先的にお知らせします。
記事ではお伝えできない内容を多分に含むため、メルマガ登録者限定にさせて頂きました。
JobCode メールマガジン登録画面にてメールアドレスのみ入力いただき、読者登録して頂きます。
添付されているドライブURLにアクセスし、各無料配布ファイルを受け取りください。
\ メールアドレスのみで10秒登録! /
Seleniumとは

Seleniumは、ブラウザを自動的に操作するライブラリであるため、自動化テストの実施やWebスクレイピングに利用されます。
また、SeleniumはWebサイト・Webアプリに対してブラウザ操作するため、静的ページで構成されたサイトだけでなく動的ページにも対応できます。
特に、SNS等のWebサイト・Webアプリも操作できるので、ログイン機能などが実装されるページにおいても対応できる利点があります。
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を取得 |
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()
Webdriverとは

Webdriverは、各driver(ChromeDriverやFireFoxDriverなど)を通じてブラウザと通信します。
また、Webdriverは各driverを通じてブラウザにコマンドを渡し、同ルートを介して情報を受け取ります。
Seleniumのインストール
Seleniumは、Pythonの標準ライブラリとしてインストールされていないため、別途インストールする必要があります。
Seleniumはバージョン3とバージョン4の書き方がネット上で混同されているケースが多いです。
そのため、Seleniumのバージョン確認を実施していただけると幸いです。
ここでは、バージョン3とバージョン4の書き方を並行して記載していきます。
pip show selenium
上記コマンドをMacであればターミナル、Windowsであればコマンドプロンプトで実施すれば、Seleniumのバージョンを確認できます。
pip install selenium==3.141.0
上記のpipコマンドでは、バージョン3を指定していますが任意のバージョンを指定し実施してください。
webdriver(ChromeDriver/EdgeDriver)のインストール
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更新時の手間が省けます。
Webdriverの対応ブラウザ
上記では、最も利用されるGoogle ChromeブラウザとMicrosoft Edgeブラウザを示しました。
その他にも、Webdriverから各driverを利用できます。
主なdriverは以下の5つです。
メソッド名 | 説明 |
---|---|
.Chrome() | Google Chromeブラウザ |
.Edge() | Microsoft Edgeブラウザ |
.Firefox() | Mozilla Firefoxブラウザ |
.Ie() | IEブラウザ |
.Safari() | Apple Safariブラウザ |
Seleniumの公式ドキュメントにて5つのブラウザに対して操作が可能です。
.ChromeOptions()の使い方
以下のOptionsモジュールをインポートします。
from selenium.webdriver.chrome.options import Options
代表的なオプションは以下です。
また、.add_argument()メソッドで利用します。
オプション名 | 説明 |
---|---|
options.add_argument(‘–blink-settings=imagesEnabled=false’) | 画像の非表示 |
options.add_argument(‘–disable-blink-features=AutomationControlled’) | navigator.webdriver=false とする設定 |
options.add_argument(‘–disable-browser-side-navigation’) | Timed out receiving message from renderer: の修正 |
options.add_argument(‘–disable-dev-shm-usage’) | ディスクのメモリスペースを使う |
options.add_argument(‘–disable-extensions’) | すべての拡張機能を無効 |
options.add_argument(‘–disable-gpu’) | GPUハードウェアアクセラレーションを無効 |
options.add_argument(‘–headless’) | ヘッドレスモードで起動 |
options.add_argument(‘–ignore-certificate-errors’) | SSL認証を無効 |
options.add_argument(‘–incognito’) | シークレットモードで起動 |
options.add_argument(‘–no-sandbox’) | Chromeの保護機能を無効 |
options.add_argument(‘–start-maximized’) | 初期のウィンドウサイズを最大化 |
options.add_argument(‘–window-size=1920,1080’) | 初期のウィンドウサイズを指定 |
特にリモートでSelenium Serverを稼働させる場合など、ヘッドレスモードを利用することが多いです。
以下に利用しやすいコードブロックを記載しておきます。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--blink-settings=imagesEnabled=false') #画像の非表示
options.add_argument('--disable-blink-features=AutomationControlled') #navigator.webdriver=false とする設定
options.add_argument('--disable-browser-side-navigation') #Timed out receiving message from renderer: の修正
options.add_argument('--disable-dev-shm-usage') #ディスクのメモリスペースを使う
options.add_argument('--disable-extensions') #すべての拡張機能を無効
options.add_argument('--disable-gpu') #GPUハードウェアアクセラレーションを無効
options.add_argument('--headless') #ヘッドレスモードで起動
options.add_argument('--ignore-certificate-errors') #SSL認証を無効
options.add_argument('--incognito') #シークレットモードで起動
options.add_argument('--no-sandbox') #Chromeの保護機能を無効
options.add_argument('--start-maximized') #初期のウィンドウサイズを最大化
options.add_argument('--window-size=1920,1080') #初期のウィンドウサイズを指定
# ------ ChromeDriver の起動 ------
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
driver.get('https://www.xxxx.jp')
SeleniumのWebDriverWaitの使い方
Seleniumを利用してブラウザ操作する場合、ブラウザに対する待機時間もうまく処理する必要があります。
また、Seleniumにおけるエラーの原因は、指定した要素が見つからないことがほとんどです。
人間の操作より遥かに速い操作でプログラムが処理するため、指定要素の存在有無でエラーを引き起こします。
ここでは、Webdriverの待機処理について解説します。
待機処理では、以下の3つを紹介します。
- .implicitly_wait()による暗黙的な待機処理
- WebDriverWait.until()による明示的な待機処理
- time.sleep()の待機処理
暗黙的・明示的といった単語も含めて解説します。
また、Seleniumで待機処理を実施する場合に以下のWebDriverWaitモジュールをインポートしておきます。
.implicitly_wait()による暗黙的な待機処理
暗黙的な待機処理とは、『ブラウザの表示処理を指定時間内で待機する』ことを指します。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
# Chrome Driverを起動する
driver = webdriver.Chrome(executable_path='path/to/driver', chrome_options=options)
driver.implicitly_wait(10) # 秒
# Webページを開く
driver.get('URL')
# Chrome Driverを終了する
driver.quit()
上記のコードのように、暗黙的な待機処理は共通的な待ち時間を設定できます。
ブラウザの表示が完了すれば、残りの時間を無視して次の処理に移ります。
処理コードは、driver起動直後で問題ありません。
WebDriverWait.until()による明示的な待機処理
暗黙的な待機処理では対応できない(特定要素の読み込みが遅いなど)場合に、明示的な待機処理を追加する必要があります。
WebDriverWait.until()メソッドを利用し、HTML要素が特定の状態になるまで待機する設定ができます。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# Chrome Driverを起動する
driver = webdriver.Chrome(executable_path='path/to/driver', chrome_options=options)
# Webページを開く
driver.get('URL')
# 指定した要素が表示されるまで、明示的に10秒待機する
css_selector = 'css_selector'
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, css_selector))
)
# Chrome Driverを終了する
driver.quit()
WebDriverWait.until()メソッドは、『特定要素の状態に対しての待機時間』を設定しています。
また、visibility_of_element_located()メソッドは『特定要素の表示』を設定しています。
他にも待機処理で利用できるメソッドは以下になります。
メソッド名 | 説明 |
---|---|
alert_is_present | Alertが表示されるまで待機する |
element_to_be_clickable | 要素がクリック出来る状態になるまで待機する |
visibility_of_element_located | 指定した要素が表示されるまで待機する |
invisibility_of_element_located | 指定した要素が非表示になるまで待機する |
text_to_be_present_in_element | 指定したテキストが表示されるまで待機する |
presence_of_element_located | 指定した要素がDOM上に現れるまで待機する |
明示的な待機処理に関しては、WebページのHTMLデータを取得後に実行しましょう。
time.sleep()の待機処理
暗黙的・明示的な待機処理が利用できないケースの場合は、time.sleep()メソッドを利用しましょう。
import time
time.sleep(10) # 秒
time.sleep()メソッドは、強制的に指定時間を待機してしまうため、全体の処理が遅れてしまいます。
ただ、複雑なプログラムになるとブラウザ操作以外に処理するコードが多くなり、selenium以外の処理で時間を要する場合があります。
その際に、Seleniumでは処理できない別処理の待機はtime.sleep()メソッドを利用します。
WebDriverにおけるタブ・ウィンドウの切り替え方法
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によるスクレイピングプログラムを実行する際に、いくつかのエラーあるいは突破しなければならない課題があります。
以下が主なエラーに対する対処内容になります。
- 指定したHTML要素が見つからない時(InvalidSelectorExceptionやNoSuchElementException)
- 特定サイトの無応答時(タイムアウト)
それぞれのエラーに対する対処方法を解説します。
指定したHTML要素が見つからない時(InvalidSelectorExceptionやNoSuchElementException)
上述したように、Seleniumによる大半のエラーの原因は、指定した要素が見つからないことです。
そのため、Timeout時のエラー対処を解説します。
Pythonでは、エラー通知にtry-except文を利用します。
from selenium.common.exceptions import TimeoutException
try:
# 指定した要素が表示されるまで、明示的に10秒待機する
css_selector = 'css_selector'
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, css_selector))
)
except TimeoutException as e:
# 失敗時の処理
あるいは、関数を利用して再処理を実施すると良いです。
# リトライして失敗したらエラーメッセージを通知する。成功したらelementを返す
def getElement(css_selector, wait_second, retries_count):
error = ''
for _ in range(retries_count):
try:
# 失敗しそうな処理
css_selector = 'css_selector'
element = WebDriverWait(driver, wait_second).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, css_selector))
)
except TimeoutException as e:
# エラーメッセージを格納する
error = e
else:
# 失敗しなかった場合は、ループを抜ける
break
else:
# リトライが全部失敗したときの処理
# エラー内容(error)や実行時間、操作中のURL、セレクタ、スクショなどを通知する。
do_something() # 好きな処理
# プログラムを強制終了する
sys.exit(1)
return element
element = getElement('css_selector', {{ 待機時間 }}, {{ リトライする回数 }})
エラーが発生した場合に、任意の回数分をリトライすることで待機処理ではカバーしきれない通信不具合の状況なども対処できます。
特定サイトの無応答時(タイムアウト:timeout)
特定サイトの無応答時のタイムアウトには、Seleniumによる自動制御を事前にアクセス拒否してるケースもあります。
つまり、Webスクレイピングしたいが特定サイト側でnavigator.webdriver=true
なブラウザだとNGなサイトであるわけです。
上記の場合は、navigator.webdriver=False
に設定する必要があります。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
# ------ ChromeDriver の起動 ------
options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
#print(driver.execute_script('return navigator.webdriver'))
Optionsモジュールをインポート後、.add_argument()メソッドにてオプション設定を行います。
options.add_argument('--disable-blink-features=AutomationControlled')
を追加することで、navigator.webdriver=true
からnavigator.webdriver=False
へ変更できます。
変更後にプログラムを実施すると、Seleniumによるスクレイピングを拒否されることなく実行できます。
driver.execute_script('return navigator.webdriver')
driverの起動コードの下に、print文を追加し上記のコードを記述すると、navigator.webdriver
の設定を確認できます。
navigator.webdriverとは
webdriverはnavigatorインターフェイスの読み取り専用プロパティにより、ユーザーエージェントが自動制御されているかどうかを示します。
navigator.webdriverの値がtrueの場合はWebブラウザが自動制御されており、falseの場合は自動制御されていないことを示します。