web-dev-qa-db-ja.com

WebDriverException:メッセージ:TypeError:rectが未定義です

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時間ネットで検索しましたが、成功しませんでした。したがって、どんなアイデアでも大歓迎です!

よろしくお願いします!

4
Mathador

そのロケーターに一致する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()
2
JeffC

このエラーメッセージ...

_WebDriverException: Message: TypeError: rect is undefined
_

...希望するWebElementclient rectsと対話しないときに定義されていない可能性があることを意味します。

_TypeError: rect is undefined, when using Selenium Actions and element is not displayed._ のように、主な問題は、やり取りしようとしている目的の要素です[つまり、 invoke click()]はpresentHTML DOM ですがnot visible ie- 非表示

理由

最も可能性の高い理由と解決策は次のとおりです。

  • 要素をクリックしようとしているときに先に進むと、目的の要素がその時点で相互作用できない場合がありますJavaScript/Ajax通話がまだアクティブである可能性があります。
  • 要素が ビューポート の範囲外です

解決

  • 次のように、要素がクリック可能になるように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()
    _
2
DebanjanB