疑念は探究の動機であり、探究の唯一の目的は信念の確定である。

数学・論理学・哲学・語学のことを書きたいと思います。どんなことでも何かコメントいただけるとうれしいです。特に、勉学のことで間違いなどあったらご指摘いただけると幸いです。 よろしくお願いします。くりぃむのラジオを聴くこととパワポケ2と日向坂46が人生の唯一の楽しみです。

選択ボックス(select)の操作方法について

概要
PythonSeleniumを使って選択ボックスを操作する方法をまとめる。

選択ボックスとは次のもの。
f:id:yoheiwatanabe0606:20220331180223p:plain

選択ボックスをクリックすると選択肢が表示されて、クリックするとそのページに変わる。そのような操作を自動でおこないたい。
f:id:yoheiwatanabe0606:20220331180226p:plain


ソースコード
完全なもの

import os
import time
import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import NoSuchElementException

# initialize
## which geckodriver
DRIVER_PATH = '/usr/local/bin/geckodriver'

## no headless
driver = webdriver.Firefox(executable_path=DRIVER_PATH, service_log_path=os.path.devnull)

# go to the yahoo page
url = 'https://news.yahoo.co.jp/topics/top-picks'
driver.get(url)

time.sleep(3)

# click the select button
## find the element and create an object
css_selector = '.newsFeedFilter_select > select:nth-child(1)'
select_element = driver.find_element(By.CSS_SELECTOR, css_selector)
select_object = Select(select_element)

## click
date = '20220330'
try:
    select_object.select_by_value(date)
except NoSuchElementException as e:
    print(e)
    driver.quit()
    sys.exit()

time.sleep(3)

# go back to the top page
css_selector = '#msthdLogo > img:nth-child(1)'
driver.find_element(By.CSS_SELECTOR, css_selector).click()

time.sleep(3)
driver.quit()


別解1(インデックスパターン)

...
(中略)

#### case II: index
select_object.select_by_index(2) # 0番目基準(Zero-based numbering) 3月30日(水)

...
(中略)

別解2(テキストパターン)

...
(中略)

#### case III: text
select_object.select_by_visible_text('3月30日(水)')

...
(中略)

実行結果
f:id:yoheiwatanabe0606:20220331180231g:plain

前提知識および注意事項

前提知識

  • Seleniumをインストールして、自分の環境で一通り動かすことができること。

注意事項

今回はFirefoxを使用しているが、もちろんChromeでも同様にできる。

選択肢のタグを調べる方法

f:id:yoheiwatanabe0606:20220331180139p:plainf:id:yoheiwatanabe0606:20220331180146p:plainf:id:yoheiwatanabe0606:20220331180154p:plainf:id:yoheiwatanabe0606:20220331180203p:plainf:id:yoheiwatanabe0606:20220331180214p:plain