リストをクリックしないと進まないページでのスクレイピング

実現したいこと

閲覧頂き、ありがとうございます。
visaのサイトから特定日の為替レートを取得するため
開発しています。

Python初心者ですが、皆様のお知恵をお借りしながら
何とか1歩ずつ進めております。

前提

■対象サイト
https://usa.visa.com/support/consumer/travel-support/exchange-rate-calculator.html

上記サイトにて為替レートの情報を得るには
「Calculate Conversion」のボタンをクリックする前に
「from」「to」の通貨をマウスにてクリックして選択する必要があります。

イメージ説明

ActionChainsで「from」のボタンをクリックし
上記リストを表示させるところまではできるのですが、
その後に表示されるリストをマウスでクリックさせる方法が
見当たらず躓いています。

ここでsend_keys('USD')などで入力してしまうと、
最後の「Calculate Conversion」をクリックした段階で
エラーとなるので、リストからマウスでのクリックで
進める必要があると考えています。

該当のソースコード

Python

1from selenium import webdriver 2!pip install webdriver_manager 3from time import sleep 4from webdriver_manager.chrome import ChromeDriverManager 5 6#ブラウザで対象ページを開く7browser = webdriver.Chrome(ChromeDriverManager().install())8url = ('https://usa.visa.com/support/consumer/travel-support/exchange-rate-calculator.html')9browser.get(url)10sleep(4)11 12 13from selenium.webdriver.common.by import By 14 15 16#Cookie同意ボタンをクリック17elem_ok_btn = browser.find_element(By.XPATH, '//*[@id="CookieReportsBanner"]/div[1]/div[2]/a[1]')18elem_ok_btn.click()19 20#Fromのボックスを取得しUSDを入力21from_coin = browser.find_element(22 By.XPATH, "//dm-calculator"23).shadow_root.find_element(By.ID, "autosuggestinput_from")24from_coin.send_keys('USD')25 26#Toの項目を取得しJPYを入力27to_coin = browser.find_element(28 By.XPATH, "//dm-calculator"29).shadow_root.find_element(By.ID, "autosuggestinput_to")30to_coin.send_keys('JPY')31 32#Amountのボックスを取得し100入力(要素がshadow-rootに含まれるので取得の仕方を工夫)33amount = browser.find_element(34 By.XPATH, "//dm-calculator"35).shadow_root.find_element(By.ID, "input_amount_paid")36amount.send_keys('100')37 38#Editの要素を取得39edit_btn = browser.find_element(40 By.XPATH, "//dm-calculator"41).shadow_root.find_element(By.CSS_SELECTOR, "button.vs-link-cta.vs-calculator-edit-link")42edit_btn.click()43 44#tran_dateを取得45tran_date = browser.find_element(46 By.XPATH, "//dm-calculator"47).shadow_root.find_element(By.ID, "dateinput_date")48 49sleep(4)50tran_date.clear()51sleep(4)52tran_date.send_keys('12/01/2022')53sleep(4)54tran_date.clear()55sleep(4)56tran_date.send_keys('12/01/2022')57 58#Fromのプルダウン選択59from_list = browser.find_element(60 By.XPATH, "//dm-calculator"61).shadow_root.find_element(By.CSS_SELECTOR, "button.vs-btn.vs-btn-dropdown-icon")62from_list.click()63

補足情報(FW/ツールのバージョンなど)

Python 3.11.1 
selenium 4.7.2
jupyter lab

コメントを投稿

0 コメント