WebDriverException: Сообщение: TypeError: rect не определено - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь автоматизировать загрузку данных с веб-сайта с помощью сценария Python, используя селен, но я получаю следующую ошибку:

"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 ]

0 голосов
/ 10 мая 2018

Есть два элемента, которые соответствуют этому локатору.Первый не виден, поэтому я предполагаю, что вы хотите нажать на второй.

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()
0 голосов
/ 10 мая 2018

Это сообщение об ошибке ...

WebDriverException: Message: TypeError: rect is undefined

... подразумевает, что желаемому WebElement может не быть задано клиентское количество , когда вы пытались взаимодействовать сit.

Согласно TypeError: rect is undefined, when using Selenium Actions and element is not displayed. главная проблема заключается в том, что желаемый элемент, с которым вы пытаетесь взаимодействовать [т.е. invoke click()], равен присутствует в HTML DOM , но не видно т.е. не отображается .

Причина

Наиболее вероятные причины и решения следующие:

  • Если вы пытаетесь щелкнуть элемент, когда вы пытаетесь щелкнуть по нему, в этот момент требуемый элемент может не взаимодействовать, как некоторые 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()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...