【Python Selenium】selectタグ(セレクトボックス):option値の選択・取得・解除

時計 2021.06.30 / 時計

【Python Selenium】selectタグ(セレクトボックス):option値の選択・取得・解除

本記事ではPythonのSeleniumによる、selectタグのoption値を選択、または選択されているoption値の取得、選択の解除方法について解説していきます。

Seleniumによるブラウザ操作の自動化ツールは、個人またはビジネスで最近はよく使われているツールです。

ブラウザ操作でフォームを扱う場合には、inputタグやselectタグの操作ができる必要があります。

本記事ではselectタグにフォーカスを当てて、詳しく解説しています。
inputタグの操作方法については以下の記事で解説しております。

本記事を通して以下の知識を学べます。

学べる知識
  • Webサイトのセレクトボックスについて
  • フォームのセレクトボックスから値を選択する方法
  • フォームのセレクトボックスの選択している値を取得する方法
  • フォームのセレクトボックスの選択を解除する方法

selectタグによるセレクトボックスとは

selectタグとはHTML要素の一つで、Webサイト上にフォームのセレクトボックス(プルダウンメニュー)を表示するためのタグです。

selectタグ内にはoptionタグによる選択肢が一つ以上入ります。

selectタグで作成するセレクトボックスの例を以下に記します。

<select size="1" name="selectbox" id="office54">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
</select>

ここからは上記の例を元に、Seleniumによるoption値の選択や取得について解説していきます。

selectタグ内のoption値を選択する

Seleniumによるブラウザ操作で、selectタグ内のoption値(セレクトボックス内の選択肢)を選択する流れは次のようになります。

  1. Selectモジュールをインポートする
  2. find_element_by_*メソッドでselectタグを検索する
  3. Selectオブジェクトを生成する
  4. select_by_*メソッドでセレクトボックス内の選択肢を選択する

1.Selectモジュールをインポートする

selectタグを操作するにはSelectモジュールを使用します。

Selectモジュールはselenium.webdriver.support.uiからインポートします。

from selenium.webdriver.support.ui import Select

2.find_element_by_*メソッドでselectタグを検索する

次にターゲットのselectタグをfind_element_by_*メソッドを使って検索します。

find_element_by_*メソッドはWebDriverオブジェクトに対して使用し、検索したい要素を引数に渡します。

ここではCSS Selectorを引数に渡して検索を行う、find_element_by_css_selector()メソッドを使います。

WebElement = driver.find_element_by_css_selector("#office54")

find_element_by_*メソッドについては以下記事で詳しく解説しています。

Selenium:find_element_by_*メソッドによるHTML要素の検索

3.Selectオブジェクトを生成する

selectタグを操作できるようにSelectオブジェクトを生成します。

インポートしたSelectの引数には、上記find_element_by_*メソッドで取得したWebElementオブジェクトを指定します。

WebElement = driver.find_element_by_css_selector("#office54")
select = Select(WebElement)

4.select_by_*メソッドでセレクトボックス内の選択肢を選択する

上記方法で生成したSelectオブジェクトに対してselect_by_*メソッドを使うことで、セレクトボックス内の選択肢を選択することができます。

select_by_*メソッドは以下のように3種類あり、選択肢の指定方法でメソッドが異なります。

メソッド 説明
select_by_index() インデックス値で指定
select_by_value() value属性の値で指定
select_by_visible_text() optionタグで挟まれたテキストで指定

select_by_index()

セレクトボックスの選択肢をインデックス指定で選択する場合は、select_by_index()メソッドを使います。

WebElement = driver.find_element_by_css_selector("#office54")
select = Select(WebElement)

select.select_by_index(1)
# 2番目のoptionタグ(選択肢)が選ばれる

インデックス指定で注意すべき点は、インデックスが0から始まる点です。

選択肢の数が決まっておらず、最後の選択肢を選択したい場合は次のようにします。

WebElement = driver.find_element_by_css_selector("#office54")
select = Select(WebElement)

select.select_by_index(len(select.options)-1)

select.optionsでは、selectタグ内のすべての選択肢(option)が返ってきます。
それに対してlen()を使うことで選択肢の数を求めて、最終選択肢を指定するようにしています。

select_by_value()

セレクトボックスの選択肢をoptionタグのvalue属性で選択する場合は、select_by_value()メソッドを使います。

WebElement = driver.find_element_by_css_selector("#office54")
select = Select(WebElement)

select.select_by_value("1")
# 1番目のoptionタグが選ばれる

select_by_visible_text()

セレクトボックスの選択肢をoptionタグで囲まれているテキストで選択する場合は、select_by_visible_text()メソッドを使います。

WebElement = driver.find_element_by_css_selector("#office54")
select = Select(WebElement)

select.select_by_visible_text("One ")

selectタグ内の選択されているoption値を取得する

セレクトボックスで選択されているoptionタグを取得するには、Selectオブジェクトに対して以下のメソッドを使用します。

メソッド 説明
first_selected_option DOM上で最初に見つかった選択状態のoptionタグ
all_selected_options すべての選択状態のoptionタグ

first_selected_option

セレクトボックスで選択されているoptionタグを取得するためにfirst_selected_optionが使用できます。

これはSelectオブジェクトに対して使用し、最初に見つかったoptionタグ(WebElementオブジェクト)を返します。

first_selected_option = select_object.first_selected_option

上記結果からoptionタグのテキストを取得する場合は次のようにtextを使用します。

first_selected_option.text

value属性の値を取得する場合はget_attribute()メソッドを次のように使います。

first_selected_option.get_attribute("value")

all_selected_options

複数選択できるセレクトボックスで、選択されているoptionタグを複数取得するためにall_selected_optionsが使用できます。

これはSelectオブジェクトに対して使用し、選択されたすべてのoptionタグ(WebElementオブジェクト)をリスト型で返します。

all_selected_options = select_object.all_selected_options

selectタグ内の選択を解除する

selectタグ内の選択されている選択肢を解除するメソッドは、以下に示す4種類のメソッドが存在します。

メソッド 説明
deselect_by_index() 引数で指定したインデックスの選択を解除
deselect_by_value() 引数で指定したvalue属性の選択を解除
deselect_by_visible_text() 引数で指定したテキストの選択を解除
deselect_all() すべての選択を解除

まとめ

本記事「【Python Selenium】selectタグ(セレクトボックス):option値の選択・取得・解除」はいかがでしたか。

本サイトOFFICE54では、PythonのSeleniumによるブラウザ操作に関する記事をたくさんアップしています。

ぜひ参考にしていただき、よりよい自動化ツールを作成してください。