Как найти элемент для приведенного ниже html с помощью Selenium и Python

#python #selenium #xpath #css-selectors #webdriverwait

#python #селен #xpath #css-селекторы #вебдрайвервейт #webdriverwait

Вопрос:

Я пытаюсь найти xpath для приведенного ниже HTML-тега. но не удалось найти в selenium.as я новичок, мне нужна некоторая помощь и предложения. получение ошибки:

 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@class='react-autosuggest__input react-autosuggest__input--open']"}
(Session info: chrome=73.0.3683.103)
  

Это элемент HTML.

 <input type="text" autocomplete="off" aria-autocomplete="list" aria-controls="react-autowhatever-1" class="react-autosuggest__input react-autosuggest__input--open" placeholder="From" value="">
  

Я попробовал и сделал этот xpath для приведенного выше HTML. но то же самое вызывает ошибку.

 //*[@class='react-autosuggest__input react-autosuggest__input--open']   
  

я ожидаю, что результат приведенного выше xpath найдет элемент в selenium, но на самом деле я получаю ошибку.

Комментарии:

1. //input[@class=’react-autosuggest__input react-autosuggest__input—открыть] вы пробовали этот способ? ? Пожалуйста, подтвердите, существует ли другой тип ввода или нет с тем же именем класса.

2. Привет @Dhru’soni . я только что попробовал это. но получаю некоторую ошибку. «Сообщение: недопустимый селектор: не удалось найти элемент с выражением xpath //input[@class=’react-autosuggest__input react-autosuggest__input—open’] ‘] из-за следующей ошибки: SyntaxError: не удалось выполнить ‘evaluate’ для ‘Document’: Строка ‘//input[@class=’react-autosuggest__input react-autosuggest__input—open’] ‘]’ не является допустимым выражением XPath. »

Ответ №1:

Элемент, похоже, является элементом React, поэтому, чтобы найти элемент, вам нужно вызвать WebDriverWait, чтобы элемент был интерактивным, и вы можете использовать любое из следующих решений:

  • Используя CSS_SELECTOR :

     element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.react-autosuggest__input.react-autosuggest__input--open[placeholder='From']")))
      
  • Используя XPATH :

     element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='react-autosuggest__input react-autosuggest__input--open' and @placeholder='From']")))
      
  • Примечание: Вы должны добавить следующие импортные файлы :

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

Комментарии:

1. Привет @DebanjanB спасибо за решение. я пробовал использовать оба решения. но получаю ошибку ниже.»Трассировка (последний последний вызов): <module> from_field = WebDriverWait(driver, 20).до тех пор, пока (EC.element_to_be_clickable((By.XPATH, «//input[@class=’реагирует-автоматически вызывает__inputреагируйте-автоматически вводите__input—open’ и @placeholder=’From’]»))) Файл «C:UsersAnurag JangdePycharmProjectsSelenium_pythonvenvlibsite-packagesseleniumwebdriversupportwait.py «, строка 80, в, пока не вызовет исключение TimeoutException(message, screen, stacktrace) selenium.common.exceptions. Исключение TimeoutException: сообщение:»

2.Исключение TimeoutException является результатом сбоя ожидаемых условий. Отлаживайте свой код с помощью find_element_by_* in-conduct with time.sleep() . Если вы сможете найти элемент, обновите вопрос наблюдениями.

3. Привет @DebanjanB я не могу найти элемент с помощью обоих решений. Спасибо за вашу помощь!

4. Проверьте, находится ли элемент в пределах <iframe>

Ответ №2:

Попробуйте использовать WebDriverWait, только установите более длительное ожидание, например:

 element = WebDriverWait(driver, 60).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "input[placeholder='From']")))