Это сообщение об ошибке ...
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
... подразумевает, что элемент, с которым вы пытались взаимодействовать, был невидимым .
Следующая строка кода для идентификации элемента была успешной , поскольку элемент присутствовал в HTML DOM :
element= driver.find_element_by_xpath("//button[@class='butwb']")
Здесь стоит упомянуть, что наличие элемента означает, что элемент присутствует в DOM страницы. Это не гарантирует, что элемент является видимым (то есть отображаемым) или интерактивным (то есть интерактивным) .
Видимость означает, что элемент не только отображается, но и имеет высоту и ширину, превышающие 0.
Следовательно, is_displayed()
метод возвращает false и выполняется блок else{}
, который печатает:
Element not found
Далее при вызове click()
возникает следующее исключение:
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
Возможные причины
Принятая вами стратегия Locator не может идентифицировать элемент, поскольку он отсутствует в браузере Viewport .
Стратегия Locator , которую вы приняли, не уникально идентифицирует нужный элемент в HTML DOM и в настоящее время находит некоторые другие скрытый / невидимый элемент.
Принятая вами стратегия Locator идентифицирует элемент, но невидим из-за наличия атрибута style = "display: none;" .
WebElement может присутствовать в Модальное диалоговое окно и может не отображаться / взаимодействовать немедленно.
* Решения 1088 *
Используйте execute_script()
метод для прокрутки элемента, чтобы просмотреть следующим образом:
elem = driver.find_element_by_xpath("element_xpath")
driver.execute_script("arguments[0].scrollIntoView();", elem);
Здесь вы найдете подробное обсуждение Прокрутка до верхней части страницы в Python с использованием Selenium
Использование принятой вами стратегии Locator не однозначно идентифицирует нужный элемент в HTML DOM и в настоящее время находит некоторые другие скрытые / невидимые Элемент в качестве первого совпадения должен изменить стратегию Locator .
Элемент Incase имеет атрибут style = "display: none;" , удалите атрибут с помощью метода executeScript()
следующим образом:
elem = driver.find_element_by_xpath("element_xpath")
driver.execute_script("arguments[0].removeAttribute('style')", elem)
elem.send_keys("text_to_send");
Если элемент не присутствует / видим / интерактивно в HTML DOM немедленно, вызвать WebDriverWait с Ожидаемые_условия , установленный на правильный метод следующим образом:
Ожидать sence_of_element_located :
element = WebDriverWait(driver, 20).until(expected_conditions.presence_of_element_located((By.XPATH, "element_xpath']")))
В ожидании visibility_of_element_located :
element = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "element_css")
В ожидании element_to_be_clickable :
element = WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, "element_link_text")))