После Selenium IDE на Python - такого элемента нет

Это мой первый опыт работы с Selenium и HTML.

Я попытался использовать IDE, а затем последовал "указанным путем". Мой сценарий, записанный в IDE, говорит

Command | Target
-----------------------------------------------
click   | css=#hamburger-btn
click   | css=div.menu-item.menu-item-selected > span.menu-item-title
click   | css=div.menu-item.menu-item-selected > div.menu-panel-content > div.menu-category-cont > div.menu-category-sub > div.menu-category-sub-item.menu-category-sub-item-selected > span.menu-category-sub-item-title

И я попытался реализовать это так:

browser = webdriver.Chrome()
browser.get(url) #url was defined before
browser.find_element_by_css_selector("#hamburger-btn").click()
browser.find_element_by_css_selector("div.menu-item.menu-item-selected>span.menu-item-title").click()
browser.find_element_by_css_selector('div.menu-item.menu-item-selected>div.menu-panel-content>div.menu-category-cont>div.menu-category-sub>div.menu-category-sub-item.menu-category-sub-item-selected>span.menu-category-sub-item-title').click()

но я получаю сообщение / ошибку "Нет такого элемента"

browser.find_element_by_css_selector('div.menu-item.menu-item-selected>div.menu-panel-content>div.menu-category-cont>div.menu-category-sub>div.menu-category-sub-item.menu-category-sub-item-selected>span.menu-category-sub-item-title').click()
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 597, in find_element_by_css_selector
return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 966, in find_element
'value': value})['value']
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"div.menu-item.menu-item-selected>div.menu-panel-content>div.menu-category-cont>div.menu-category-sub>div.menu-category-sub-item.menu-category-sub-item-selected>span.menu-category-sub-item-title"}

Что я делаю неправильно?

Спасибо

ГБ

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
201
1

Ответы 1

Возможно, элемент, к которому вы пытаетесь добраться, не загрузился должным образом. Попробуйте добавить выражение ожидания, что-нибудь вроде

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.common.by import By

...

browser = webdriver.Chrome()
browser.get(url) #url was defined before
browser.find_element_by_css_selector("#hamburger-btn").click()
browser.find_element_by_css_selector("div.menu-item.menu-item-selected>span.menu-item-title").click()

WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'div.menu-item.menu-item-selected>div.menu-panel-content>div.menu-category-cont>div.menu-category-sub>div.menu-category-sub-item.menu-category-sub-item-selected>span.menu-category-sub-item-title')))

browser.find_element_by_css_selector('div.menu-item.menu-item-selected>div.menu-panel-content>div.menu-category-cont>div.menu-category-sub>div.menu-category-sub-item.menu-category-sub-item-selected>span.menu-category-sub-item-title').click()

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

Я изменил WebDriverWait (драйвер, 20) в WebDriverWait (браузер, 20) и добавил в начале из selenium.webdriver.support import expected_conditions как EC, но получаю следующую ошибку: Файл «C: \ Python27 \ lib \ site-packages \ selenium \ webdriver \ support \ wa‌ it.py ", строка 80, до тех пор, пока не возникнет исключение TimeoutException (сообщение, экран, трассировка стека) selenium.common.exceptions.TimeoutException: Сообщение:

spec3 27.09.2018 21:56

Это означает, что он не нашел элемент до истечения 20-секундного ожидания. Может быть, вы могли бы придумать свой собственный выбор, Я БЫ или XPATH. Является ли страница, с которой вы пытаетесь взаимодействовать, общедоступной, и не могли бы вы предоставить для нее URL-адрес?

Lafa 27.09.2018 22:05

К сожалению, он не является публичным ... Но почему он должен меняться по ID или XPATH? Я не думаю, что это проблема с загрузкой, я вижу кнопку, которую он должен нажимать, когда застревает.

spec3 28.09.2018 09:09

Иногда один тип селектора не работает, поэтому я рекомендовал попробовать другой.

Lafa 28.09.2018 14:48

Извините, я пробовал и другие, но ничего не изменилось ... :(

spec3 28.09.2018 22:00

Другие вопросы по теме