NavaMalakar Ответов: 1

Как удалить ошибку "нет такого исключения элемента" из приведенного ниже кода Python


Я пытаюсь запустить следующий код:
из selenium import webdriver
# создайте новый сеанс Firefox
драйвер = webdriver.В Firefox(executable_path=Р'Files\geckodriver.exe C:\Program ')
драйвер.implicitly_wait(30)
водитель.maximize_window()
# перейдите на домашнюю страницу приложения
водитель.get("http://demo.magentocommerce.com/")
# получить текстовое поле поиска
search_field = водитель.find_element_by_name("м")
search_field.понятно()
# введите ключевое слово поиска и отправьте его
search_field.send_keys("телефоны")
search_field.подать()
# получить все якорные элементы, которые имеют отображаемые названия продуктов
# в настоящее время на странице результатов используется метод find_elements_by_xpath
products = driver.find_elements_by_xpath("//h2[@class=‘productname’]/a")
# получить количество найденных якорных элементов
print ("найдено" + str(len(products)) + "продукты:")
# итерация по каждому элементу привязки и печать текста, который является # названием продукта
для продукта в продуктах:
печать (product.text)
# закройте окно браузера

водитель.бросить()

Что я уже пробовал:

Но, получая следующие ошибки:
Обратная трассировка (самый недавний призыв последнего):
Файл "C:/Users/nava.malakar/PycharmProjects/setests/searchproducts.py", строка 12, in <module>
search_field = водитель.find_element_by_name("м")
Файл "C:\Users\nava.malakar\PycharmProjects\setests\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", строка 487, in find_element_by_name
return self.find_element(by=By.NAME, значение=имя)
Файл "C:\Users\nava.malakar\PycharmProjects\setests\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", строка 955, in find_element
"значение": значение})['значение']
Файл "C:\Users\nava.malakar\PycharmProjects\setests\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", строка 312, in execute
self.error_handler.check_response(ответ)
Файл "C:\Users\nava.malakar\PycharmProjects\setests\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", строка 242, in check_response
поднять exception_class(сообщение, экран, stacktrace)
селен.общие.исключения.NoSuchElementException: сообщение: не удается найти элемент: [name="q"]


Процесс завершился с кодом выхода 1


- Обновлен путь geckodriver в переменных окружения, но все равно я получаю все эти ошибки и не могу запустить программу

1 Ответов

Рейтинг:
1

Jochen Arndt

Выполнение происходит на линии

search_field = driver.find_element_by_name("q")
Видеть 4. Установочные элементы — селен привязки Python 2 документации[^]:
Цитата:
4.2. Поиске по имени

Используйте это, когда вы знаете атрибут name элемента. При использовании этой стратегии будет возвращен первый элемент со значением атрибута name, соответствующим местоположению. Если ни один элемент не имеет соответствующего атрибута name, будет вызвано исключение NoSuchElementException.
Таким образом, вы должны поймать execption, если вы не можете быть уверены, что такой элемент существует. Видеть 8. ошибки и исключения — документация Python 3.6.5[^].

Непроверенный пример:
from selenium.common.exceptions import NoSuchElementException
# ...
hasElementQ = True
while True:
    try:
        search_field = driver.find_element_by_name("q")
        break
        except NoSuchElementException:
            # Handle it here or set a variable
            hasElelemntQ = False
# Can check the variable here