seleniumでプルダウンが選択できない・・・
解決したいこと
不動産ライブラリを活用して、指定した不動産価格(取引価格・成約価格)情報の検索・ダウンロードしたいです。ブラウザ操作で取得できる「最寄り駅」と「最寄り駅からの徒歩(分)」がAPIを利用すると取得ができません。seleniumのブラウザ操作でダウンロードしたいが、プルダウンが選択できません。
ラジオボタンのクリックは成功しているのですが、プルダウンが選択できません。
発生している問題・エラー
エラーが発生しました: Message:
Stacktrace:
GetHandleVerifier [0x00007FF7F077EEB2+31554]
(No symbol) [0x00007FF7F06F7EE9]
(No symbol) [0x00007FF7F05B872A]
(No symbol) [0x00007FF7F0608434]
(No symbol) [0x00007FF7F060853C]
(No symbol) [0x00007FF7F064F6A7]
(No symbol) [0x00007FF7F062D06F]
(No symbol) [0x00007FF7F064C977]
(No symbol) [0x00007FF7F062CDD3]
(No symbol) [0x00007FF7F05FA33B]
(No symbol) [0x00007FF7F05FAED1]
GetHandleVerifier [0x00007FF7F0A88B2D+3217341]
GetHandleVerifier [0x00007FF7F0AD5AF3+3532675]
GetHandleVerifier [0x00007FF7F0ACB0F0+3489152]
GetHandleVerifier [0x00007FF7F082E786+750614]
(No symbol) [0x00007FF7F070376F]
(No symbol) [0x00007FF7F06FEB24]
(No symbol) [0x00007FF7F06FECB2]
(No symbol) [0x00007FF7F06EE17F]
BaseThreadInitThunk [0x00007FFBBCFB7374+20]
RtlUserThreadStart [0x00007FFBBDE1CC91+33]
該当するソースコード
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# ブラウザを起動(Chromeの場合)
driver = webdriver.Chrome()
try:
# ウェブページを開く
driver.get('https://www.reinfolib.mlit.go.jp/realEstatePrices/')
# ラジオボタンをクリック
radio_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, 'spnStation'))
)
radio_button.click()
# オプションを選択するために、JavaScriptで対象のオプションを直接クリックする
option_value = "3600" # 選択したいオプションの値
option_xpath = f"//option[@value='{option_value}']"
option_element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, option_xpath))
)
driver.execute_script("arguments[0].click();", option_element)
print("Selected option:", option_element.text)
print(f"セレクトボックスからオプション '{option_value}' を選択しました。")
# cmbStationsSpのセレクトボックスが表示されるのを待つ
select_station = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'cmbStationsSp'))
)
print(select_station)
# JavaScriptを使用してセレクトボックスを展開する
driver.execute_script("arguments[0].click();", select_station)
# オプションを選択するために、JavaScriptで対象のオプションを直接クリックする
station_option_value = "01730" # 選択したいオプションの値
station_option_xpath = f"//option[@value='{station_option_value}']"
station_option_element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, station_option_xpath))
)
driver.execute_script("arguments[0].click();", station_option_element)
print("Selected option:", station_option_element.text)
print(f"セレクトボックスからオプション '{station_option_value}' を選択しました。")
except Exception as e:
print(f"エラーが発生しました: {e}")
finally:
driver.quit()
自分で試したこと
id指定、クラス指定、select_by_value( )など一通り試したのですが、クリックが行われずエラーになりました。
JavaScriptを使用してセレクトボックスをクリックすると、クリックされているようなのですが、目視確認はできませんでした。
要素がクリック可能かどうかを確認
if select_element.is_displayed() and select_element.is_enabled():
print("cmbRegionsSpの要素はクリック可能です。")
# JavaScriptで要素をクリック
driver.execute_script("arguments[0].click();", select_element)
print("JavaScriptで要素をクリックしました。")
else:
print("cmbRegionsSpの要素はクリック不可能です。")
結果は、cmbRegionsSpの要素が存在します。
cmbRegionsSpの要素はクリック不可能です。
という結果でした。
参考記事:
https://qiita.com/peter_0309/items/40c31cc4e5e1f170d48e
https://qiita.com/tsutsuitou/items/08eb66e7fc8db97bfcb6
https://python.allmaintenance.jp/programing/python/python%E3%81%AEselenium%E3%81%A7%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%83%80%E3%82%A6%E3%83%B3%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/