Как исправить этот xpath в selenium python?

#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:

  1. Проверьте, правильно ли работает xpath на странице DOM.
  2. Если 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 проблемы-

  1. Вы написали правильный синтаксис XPath, но при его использовании вы сохранили его в двойных кавычках, и двойные кавычки также присутствуют в xpath, что вызывает проблему. Поэтому используйте этот XPath внутри одинарной кавычки.
  2. Этот XPath очень хрупкий, так как у него есть индексы, поэтому он может изменяться при перезагрузке веб-страницы.

Решение-

  1. Напишите относительный XPath, используя атрибут и текстовое значение. Когда вы пишете любой xpath, проверьте, что Xpath снова после обновления страницы.
  2. Попробуйте подождать некоторое время, прежде чем искать этот элемент, просто чтобы убедиться, что этот элемент загружен на страницу.