以前、Python+Seleniumで要素の取得・操作方法をまとめた時、Select要素を使う用事がなかったので簡単に書いていたものの、今回扱うことになったので、書き記しておきます。
まずはSelect要素を解析する
今回は、次のようなHTMLを操作すると仮定します。
<select id="test">
<option value="1">りんご</option>
<option value="3">みかん</option>
<option value="5">すいか</option>
</select>
コードの書き方は?(準備編)
Selectモジュールをインポートする
Select要素を取得・操作するには、モジュールのインポートが必須です。
from selenium.webdriver.support.select import Select
Selectオブジェクトを作成する
「Select()」の中に、操作したいSelect要素を指定します。
今回はSelect要素にidが設定されているので、「find_element_by_id()」を使って要素を取得し、それを「Select()」に指定します。
select_element = Select(driver.find_element_by_id('test'))
コードの書き方は?(取得編)
選択中の要素を取得する
Selectオブジェクトに対して、「first_selected_option」を使えば、選択中の1つ目の選択肢が得られます。
戻り値は「WebElement」なので、「.text」や「.get_attribute()」で情報を取得することになります。
複数選択できるリストで、2つ目以降の選択済み選択肢を取得したい場合は「all_selected_options」を使います。
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome('【chromedriver.exe】の保存場所')
driver.get('【Select要素のあるページのURL】')
select_element = Select(driver.find_element_by_id('test'))
# 選択中の最初の要素からテキストを取得する
print(select_element.first_selected_option.text)
# 複数選択している状態で、選ばれている2番目のHTMLを取得する
print(select_element.all_selected_options[1].text)
option要素を取得する
Selectオブジェクトに対して「.options」を使うと、用意されている選択肢全てをリスト形式で取得できます。
戻り値は「WebElement」なので、「.text」や「.get_attribute()」を併用します。
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome('【chromedriver.exe】の保存場所')
driver.get('【Select要素のあるページのURL】')
select_element = Select(driver.find_element_by_id('test'))
# 全選択肢のテキストを取得する
for a in select_element.options:
print(a.text)
コードの書き方は?(操作編)
選択する
Selectオブジェクトに対して「select_by_〇〇」を使うと、選択することができます。
指定方法は3つあります。
- インデックスで指定する「select_by_index()」
- Valueの値で指定する「select_by_value()」
- 選択肢のテキストで指定する「select_by_visible_text()」
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome('【chromedriver.exe】の保存場所')
driver.get('【Select要素のあるページのURL】')
select_element = Select(driver.find_element_by_id('test'))
# インデックスで指定する。インデックスは「0」から始まるので、最初の選択肢は0で指定する。
select_element.select_by_index(0)
# ⇒ 「りんご」が選ばれる。
# 最後の選択肢をインデックスで選ぶ。
select_element.select_by_index(len(select_element.options) - 1)
# ⇒ 「すいか」が選ばれる。
# Valueの値で指定する。
select_element.select_by_Value('3')
# ⇒ 「みかん」が選ばれる。
# 選択肢のテキストで指定する。
select_element._visible_text('すいか')
# ⇒ 「すいか」が選ばれる。
選択をはずす
Selectオブジェクトに対して、「deselect_〇〇」で選択をはずすことができます。
指定方法は4つ。
- インデックスで選択をはずす「deselect_by_index()」
- Valueの値で選択をはずす「deselect_by_value()」
- 選択肢のテキストで選択をはずす「deselect_by_visible_text()」
- すべての選択をはずす「deselect_all()」
ドキュメント
詳細はSelenium公式ドキュメントをご覧ください。
まとめ
Python + SeleniumでSelect要素を扱うには、Selectモジュールをインポートして、それぞれのメソッドを使えば良いです。
実際にやってみて、仕組みを理解できたので、今後は迷わず使えそうです。