Исключение элемента

Я пытаюсь выполнить этот код, и он показывает эту ошибку «NoSuchElementException». Так может ли кто-нибудь мне в этом помочь?

Код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver= webdriver.Chrome()

page=driver.get("http://www.awgp.org")
banner_tell=driver.find_element_by_Link_text('Tell Me More')
banner_tell.click()
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
61
3

Ответы 3

Я думаю, все, что вам нужно сделать, это указать текст ссылки в верхнем регистре, но эта ссылка динамическая, поскольку баннер автоматически перемещается к следующему.

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

banner_tell=driver.find_element_by_link_text('TELL ME MORE')
find_element_by_link_text() возвращает только видимые элементы, так что вы все равно не получите ElementNotVisibleException ... Также да, следует использовать 'TELL ME MORE', поскольку именно так текст ссылки отображается на странице (+1)
Andersson 15.03.2018 10:23

@ Андерссон: Спасибо! Ссылки являются динамическими, и их атрибут отображения устанавливается на none при отображении следующего баннера. Таким образом, если баннер будет изменен до того, как по нему щелкнули, возникнет исключение.

Amit Verma 15.03.2018 12:25

Да, но если ссылка не видна, она не будет найдена find_element_by_link_text(), поэтому следует поднять NoSuchElementException вместо ElementNotVisibleException ...

Andersson 15.03.2018 12:34

Спасибо @Amit. «СКАЗАТЬ МНЕ БОЛЬШЕ» работает нормально, поскольку он находит текст на всей странице, на которую я пытался найти ссылку в баннере.

Mansi Mehta 16.03.2018 00:48

попробуйте с xpath

banner_tell= driver.find_element_by_xpath("//*[contains(text(),'TELL ME MORE')]")

Я не могу найти элемент с помощью xpath. banner_tell = driver.find_element_by_xpath ("// input [содержит (@ text, 'СКАЖИТЕ МНЕ БОЛЬШЕ')]")

Mansi Mehta 16.03.2018 00:56

Кажется, вы были почти рядом, но function() должен был быть:

find_element_by_link_text()

Чтобы щелкнуть по кнопке с текстом РАССКАЖИТЕ БОЛЬШЕ, вы должны вызвать WebDriverWait с предложением ожидаемые_условияelement_to_be_clickable следующим образом:

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

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "TELL ME MORE"))).click()

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