Селен находит неправильный элемент, элемент, который даже не существует - PullRequest
1 голос
/ 19 апреля 2020

Я проверяю строку поиска YouTube в firefox и получаю:

<input id="search" autocapitalize="none" autocomplete="off" autocorrect="off" name="search_query" tabindex="0" type="text" spellcheck="false" placeholder="Search" aria-label="Search" aria-haspopup="false" role="combobox" aria-autocomplete="list" dir="ltr" style="outline: currentcolor none medium;" class="ytd-searchbox">

У меня есть следующий код:

driver = webdriver.Firefox()
driver.get("http://www.youtube.com")
elem = driver.find_element_by_id("search")
elem.send_keys("asdfasdf")
elem.send_keys(Keys.RETURN)

и получаю следующую ошибку (используя firefox Gecko Webdriver):

    raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.ElementNotInteractableException: Message: Element <g id="search"> is not reachable by keyboard

Почему? Когда я проверяю исходный код, нет элемента g с id = "search", так что же происходит?

1 Ответ

0 голосов
/ 19 апреля 2020

ElementNotInteractableException происходит, когда элемент найден, но вы не можете взаимодействовать с ним.

Причин этому так много:

  • element не виден / не отображается
  • элемент находится за экраном
  • элемент находится за другим элементом или скрыт

Для решения вашей проблемы вам нужно использовать actionchain, см. ниже решение:

Попробуйте следующий код:

url = 'http://www.youtube.com'
driver.get(url)
driver.maximize_window()
wait = WebDriverWait(driver, 20)

element = wait.until(EC.presence_of_element_located((By.XPATH, "//form[@id='search-form']//div[@id='container']//div[@id='search-input']//input")))

actionChains = ActionChains(driver)
actionChains.move_to_element(element).click().perform()
actionChains.move_to_element(element).send_keys("Bollywood",Keys.RETURN).perform()

Примечание: , пожалуйста, добавьте ниже импорта в ваше решение

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...