ElementNotInteractableException: Сообщение: Элемент не может быть прокручен в представлении при попытке щелкнуть элемент, используя Selenium и Python - PullRequest
0 голосов
/ 18 марта 2019

У меня есть этот код:

driver.switch_to.window(window_after)

try:
    myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.NAME, '_eventId_confirmed')))
    print ("Page 2 is ready!")
except TimeoutException:
    print ("Loading took too much time!")

btn = driver.find_element_by_name('_eventId_confirmed')

btn.click()

, как вы можете видеть, я сначала переключаю окно, а затем проверяю элемент, получаю этот элемент (кнопку) и, наконец, пытаюсь нажать на указанную кнопку.Это работает, может быть, 2 из 3 раз, но очень часто это терпит неудачу с этим сообщением об ошибке

selenium.common.exceptions.ElementNotInteractableException: Message: Element <button class="btn" name="_eventId_confirmed"> could not be scrolled into view

Когда визуальный взгляд на поток, когда он выполняется, все выглядит нормально (мое первое предположение было, что переключатель окнане работает должным образом), и браузер оказывается в ожидаемом состоянии, когда я могу вручную нажать эту кнопку.Интересно, что при возникновении этой ошибки нет времени ожидания или подобного, оно происходит мгновенно во время выполнения.

Есть идеи, что здесь происходит?

Ответы [ 3 ]

1 голос
/ 19 марта 2019

Эта проблема обычно возникает, когда элемент, который вы пытаетесь щелкнуть, присутствует на странице, но он не полностью виден, а точка, в которой селен пытается щелкнуть, не видна.
В этом случае вы можете использовать javascript длящелкните по элементу, который непосредственно работает с HTML-структурой страницы.
Вы можете использовать его следующим образом:

element = driver.find_element_by_name("_eventId_confirmed")
driver.execute_script("arguments[0].click();", element)
0 голосов
/ 19 марта 2019

В качестве последнего шага необходимо вызвать click() для нужного элемента, поэтому вместо использования Ожидаемые условия в качестве presence_of_element_located() вам необходимо использовать element_to_be_clickable() следующим образом:

try:
    myElem = WebDriverWait(driver, delay).until(EC.element_to_be_clickable((By.NAME, '_eventId_confirmed')))
0 голосов
/ 18 марта 2019

Вот 2 варианта.

Использование селена location_once_scrolled_into_view метод:

btn.location_once_scrolled_into_view

Использование Javascript:

driver.execute_script("arguments[0].scrollIntoView();",btn)

Пример кода:

url = "/8617931/elementnotinteractableexception-soobschenie-element-prokruchen-predstavlenii-popytke-schelknut-ispolzuya-selenium    noredirect=1#comment97192621_55228932"
driver.get(url)
element = driver.find_element_by_xpath("//a[.='Contact Us']")
element.location_once_scrolled_into_view
time.sleep(1)
driver.find_element_by_xpath("//p[.='active']").location_once_scrolled_into_view
driver.execute_script("arguments[0].scrollIntoView();",element)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...