【Python Selenium】selectタグ(セレクトボックス):option値の選択・取得・解除
2021.06.30 /
本記事ではPythonのSeleniumによる、selectタグのoption値を選択、または選択されているoption値の取得、選択の解除方法について解説していきます。
Seleniumによるブラウザ操作の自動化ツールは、個人またはビジネスで最近はよく使われているツールです。
ブラウザ操作でフォームを扱う場合には、inputタグやselectタグの操作ができる必要があります。
本記事ではselectタグにフォーカスを当てて、詳しく解説しています。
inputタグの操作方法については以下の記事で解説しております。
【Python】Selenium: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値(セレクトボックス内の選択肢)を選択する流れは次のようになります。
- Selectモジュールをインポートする
- find_element_by_*メソッドでselectタグを検索する
- Selectオブジェクトを生成する
- 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_*メソッドについては以下記事で詳しく解説しています。
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によるブラウザ操作に関する記事をたくさんアップしています。
ぜひ参考にしていただき、よりよい自動化ツールを作成してください。