pythonスクリプトでSeleniumを使用してWebサイトからのデータのダウンロードを自動化しようとしていますが、次のエラーが発生します。
"WebDriverException: Message: TypeError: rect is undefined".
コードトライアル:
from Selenium import webdriver
from Selenium.webdriver.common import action_chains
driver = webdriver.Firefox()
url="https://www.hlnug.de/?id=9231&view=messwerte&detail=download&station=609"
driver.get(url)
次に、クリックするチェックボックスを定義して、クリックしようとします。
temp=driver.find_element_by_xpath('//input[@value="TEMP"]')
action = action_chains.ActionChains(driver)
action.move_to_element(temp)
action.click()
action.perform()
私はすでに2時間ネットで検索しましたが、成功しませんでした。したがって、どんなアイデアでも大歓迎です!
よろしくお願いします!
そのロケーターに一致する2つの要素があります。最初のものは表示されないので、2番目をクリックしたいと思います。
temp = driver.find_elements_by_xpath('//input[@value="TEMP"]')[1] # get the second element in collection
action = action_chains.ActionChains(driver)
action.move_to_element(temp)
action.click()
action.perform()
このエラーメッセージ...
_WebDriverException: Message: TypeError: rect is undefined
_
...希望するWebElementがclient rectsと対話しないときに定義されていない可能性があることを意味します。
_TypeError: rect is undefined, when using Selenium Actions and element is not displayed.
_ のように、主な問題は、やり取りしようとしている目的の要素です[つまり、 invoke click()
]はpresent内 HTML DOM ですがnot visible ie- 非表示。
最も可能性の高い理由と解決策は次のとおりです。
次のように、要素がクリック可能になるようにWebDriverWaitを誘導します。
_temp = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@value="TEMP"]")))
action = action_chains.ActionChains(driver)
action.move_to_element(temp)
action.click()
action.perform()
_
次のように、 execute_script()
メソッドを使用して、要素をスクロールして表示します。
_temp = driver.find_element_by_xpath("//input[@value="TEMP"]")
driver.execute_script("arguments[0].scrollIntoView();", temp);
action = action_chains.ActionChains(driver)
action.move_to_element(temp)
action.click()
action.perform()
_