前提
<環境>
mx-Linux21.1[Xfce]
IDLE3.9.2
python3.9.2
selenium4.6
GoogleChrome 107.0.5304.87 / 64 ビット
<周辺状況>
chromeの「検証」機能で当該メニューを確認したところ
下記のことが判明しました
#--- element ---
<div class=" css-1hwfws3">
<div class=" css-1uccc91-singleValue">Daily</div>
<input id="react-select-5293-input" readonly="" tabindex="0" aria- autocomplete="list" class="css-62g3xt-dummyInput" value="">
</div>
#--- XPath ---
//*[@id="history-timeframe-selector"]/div/div[1]
#--- full XPath ---
/html/body/div[1]/div/div/div/div[2]/main/div/div[5]/div/div/div[2]/div[1]/div[2]/div/div[1]
#--- js path ---
document.querySelector("#history-timeframe-selector > div > div.css-1hwfws3")
#--- selector ---
#history-timeframe-selector > div > div.css-1hwfws3
実現したいこと
<希望処理>
下記URLのページ内にあるプルダウンメニュー['Daily','Weekly','Monthy']の中から
任意の一つを選択しダウンロードのボタンをクリックしたい
※ ダウンロードボタンをクリックしてCSVファイルをダウンロードはできますが、
その前段のメニュー選択の方法がわかりません
ご指導のほど、よろしくお願いいたします。
url = 'https://www.investing.com/indices/usdollar-historical-data'
発生している問題・エラーメッセージ
<⑤のエラー> Traceback (most recent call last): File "/home/sample_selenium.py", line 55, in <module> driver.find_elements(By.XPATH,'//*[@id="history-timeframe-selector"]/div/div[1]')[2] IndexError: list index out of range <full XPathのエラー> ※長文のため途中省略 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:{"method":"xpath","selector": "/html/body/div[1]/div/div/div/div[2]/main/div/div[5]/div/div/div[2]/div[1]/div[2]/div/div[1]"} (Session info: chrome=107.0.5304.87) '''
<sample_selenium.py> import time 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 driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(2) wait = WebDriverWait(driver,20) driver.get('https://www.investing.com/indices/usdollar-historical-data') #この段階でログインIDとPWを(現段階では)手動で入力しています time.sleep(60) ''' ↓このエリアで色々試行錯誤しました 下記記載の①から⑤を個々に試しました ''' driver.implicitly_wait(2) download = driver.find_element(By.CLASS_NAME,"download-data_text__Myrn3") download.click() time.sleep(2) driver.quit()
試したこと
#指定した要素が表示されるまで待機する
①wait.until(EC.visibility_of_element_located((By.XPATH,'//*[@id="history-timeframe-selector"]/div/div[1]'))).click()
#要素がクリック出来る状態になるまで待機することが出来ます。
②wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="history-timeframe-selector"]/div/div[1]'))).click()
#XPath指定した要素を返す
③driver.find_element(By.XPATH,'//*[@id="history-timeframe-selector"]/div/div[1]').click()
#要素のリスト(配列)を返す
④driver.find_elements(By.XPATH,'//[@id="history-timeframe-selector"]/div/div[1]')
⑤driver.find_elements(By.XPATH,'//[@id="history-timeframe-selector"]/div/div[1]')[2]
※ 上記①から⑤までにおいてXPathの部分をfull XPathに変更したり
また、By.XPATHをBy.CLASS_NAMEにして" css-1uccc91-singleValue"を代入したりしました
結果は①から④ではエラーにはならず、'Daily'のcsvがダウンロードされます
また、'//[@id="history-timeframe-selector"]/div/div[1]'から
'//[@id="history-timeframe-selector"]/div/div[2]'に変更しても
'Daily'のcsvがダウンロードされます
⑤やfull XPathなどはTimeOutやその他のエラーになりました
補足情報(FW/ツールのバージョンなど)

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。