質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

解決済

seleniumでweb上のjavascriptで作成されたメニューを選択したい

lotoemon
lotoemon

総合スコア14

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

2回答

0グッド

0クリップ

286閲覧

投稿2022/11/11 05:48

前提

<環境>
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/ツールのバージョンなど)

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

2

ベストアンサー

JavaScriptをオフにしてそのページを表示するとプルダウンできないことからして、JavaScriptでやっているので、
該当の処理をしているJavaScriptコードを探してそれと同じ処理を実行します。
driver.execute_script(~~)

投稿2022/11/11 16:28

otn

総合スコア80401

spoofy_dragon, lotoemon😄を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

ご連絡ありがとうございます
早速、調べてみます

投稿2022/11/13 09:38

lotoemon

総合スコア14

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。