Python

インポート文を追加するだけ!Python+SeleniumでSelect要素を取得・操作するには?

インポート文を追加するだけ!Python+SeleniumでSelect要素を取得・操作するには?
以前、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モジュールをインポートして、それぞれのメソッドを使えば良いです。
実際にやってみて、仕組みを理解できたので、今後は迷わず使えそうです。

-Python
-, , , , , , , , , , , , , , , , , , , ,