実現したいこと
閲覧頂き、ありがとうございます。
visaのサイトから特定日の為替レートを取得するため
開発しています。
Python初心者ですが、皆様のお知恵をお借りしながら
何とか1歩ずつ進めております。
必要項目入力後のボタンクリックで躓いているため
ご協力頂けますと幸いです。
前提
「Calculate Conversion」のボタンをクリックさせると
エラーとなります。
スクレイピングで操作するとエラーになり、
手動だとクリックできます。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ElementNotInteractableException Traceback (most recent call last) Cell In[30], line 6 1 #calculateボタンの要素を取得 3 calculate_btn = browser.find_element( 4 By.XPATH, "//dm-calculator" 5 ).shadow_root.find_element(By.CSS_SELECTOR, "button.vs-btn.vs-btn-primary") ----> 6 calculate_btn.click() File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webelement.py:93, in WebElement.click(self) 91 def click(self) -> None: 92 """Clicks the element.""" ---> 93 self._execute(Command.CLICK_ELEMENT) File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webelement.py:410, in WebElement._execute(self, command, params) 408 params = {} 409 params["id"] = self._id --> 410 return self._parent.execute(command, params) File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py:444, in WebDriver.execute(self, driver_command, params) 442 response = self.command_executor.execute(driver_command, params) 443 if response: --> 444 self.error_handler.check_response(response) 445 response["value"] = self._unwrap_value(response.get("value", None)) 446 return response File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\errorhandler.py:249, in ErrorHandler.check_response(self, response) 247 alert_text = value["alert"].get("text") 248 raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here --> 249 raise exception_class(message, screen, stacktrace) ElementNotInteractableException: Message: element not interactable (Session info: chrome=109.0.5414.120) Stacktrace: Backtrace: (No symbol) [0x00B06643] (No symbol) [0x00A9BE21] (No symbol) [0x0099D960] (No symbol) [0x009D23A7] (No symbol) [0x009C6B13] (No symbol) [0x009EFD7C] (No symbol) [0x009C641F] (No symbol) [0x009F00D4] (No symbol) [0x00A06B09] (No symbol) [0x009EFB76] (No symbol) [0x009C49C1] (No symbol) [0x009C5E5D] GetHandleVerifier [0x00D7A142+2497106] GetHandleVerifier [0x00DA85D3+2686691] GetHandleVerifier [0x00DABB9C+2700460] GetHandleVerifier [0x00BB3B10+635936] (No symbol) [0x00AA4A1F] (No symbol) [0x00AAA418] (No symbol) [0x00AAA505] (No symbol) [0x00AB508B] BaseThreadInitThunk [0x764400F9+25] RtlGetAppContainerNamedObjectPath [0x77AE7BBE+286] RtlGetAppContainerNamedObjectPath [0x77AE7B8E+238]
該当のソースコード
エラー箇所は最下部です↓↓↓
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 59 60#↓↓エラーの該当箇所です↓↓ 61 62#calculateボタンの要素を取得 63 64calculate_btn = browser.find_element( 65 By.XPATH, "//dm-calculator" 66).shadow_root.find_element(By.CSS_SELECTOR, "button.vs-btn.vs-btn-primary") 67calculate_btn.click()
補足情報(FW/ツールのバージョンなど)
Python 3.11.1
selenium 4.7.2
jupyter lab
追記
該当ボタンをpythonでクリックするとエラーになるため、
項目の入力までで処理を止め、手動でボタンをクリックしたところ
サイト上で入力エラーとなりました。
その後、通貨などを指定し直してからボタンをクリックすると
正常に結果が得られます。
これはこのサイトの仕様なのでしょうか?
こういった場合にpythonで操作する方法があれば
教えて頂きたいです。

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/02/04 08:14
2023/02/04 11:17