#python-3.x #selenium #xpath
#python-3.x #селен #xpath
Вопрос:
Я очень новичок в этом мире python и selenium. Пытаюсь автоматизировать некоторые скучные вещи с помощью python, используя selenium webdriver. У меня возникли проблемы с указанным ниже xpath. Кажется "="
, это все портит.
Кто-нибудь может помочь?
L = driver.find_element_by_xpath("//*[@id="ext-comp-1016"]/div[1]/table/tbody/tr/td[2]/div[1]").click()
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="ext-comp-1016"]/div[1]/table/tbody/tr/td[2]/div[1]"}
(Session info: chrome=87.0.4280.66)
Комментарии:
1. Вы используете строку в двойных кавычках внутри строки в двойных кавычках. Попробуйте заменить
"ext-comp-1016"
на'ext-comp-1016'
2. Я сделал это, но все равно получаю ту же ошибку: (
3. Можете ли вы добавить HTML-код, в котором вы пытаетесь найти этот элемент?
Ответ №1:
- Проверьте, правильно ли работает xpath на странице DOM.
- Если xpath верен, я предлагаю использовать неявный метод ожидания. Вероятно, запущенный скрипт работает быстрее, чем загрузка страницы DOM.
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC L = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.Xpath,"/div[1]/table/tbody/tr/td[2]/div[1]"))).click()
Комментарии:
1. Спасибо, xpath корректно работает на странице DOM. Сейчас получаю тайм-аут. вызвать исключение TimeoutException(сообщение, экран, трассировка стека) selenium.common.exceptions. Исключение TimeoutException: сообщение:
2. Может быть, поместить код в блок «try except» и использовать блок except для перехвата экрана. Вы увидите, отображается ли ожидаемый webelement. Я предполагаю, что вы можете оказаться на другом сайте, чем ожидаете. Не могли бы вы показать мне еще какой-нибудь код, чтобы просмотреть его?
Ответ №2:
Есть 2 проблемы-
- Вы написали правильный синтаксис XPath, но при его использовании вы сохранили его в двойных кавычках, и двойные кавычки также присутствуют в xpath, что вызывает проблему. Поэтому используйте этот XPath внутри одинарной кавычки.
- Этот XPath очень хрупкий, так как у него есть индексы, поэтому он может изменяться при перезагрузке веб-страницы.
Решение-
- Напишите относительный XPath, используя атрибут и текстовое значение. Когда вы пишете любой xpath, проверьте, что Xpath снова после обновления страницы.
- Попробуйте подождать некоторое время, прежде чем искать этот элемент, просто чтобы убедиться, что этот элемент загружен на страницу.