#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 withtime.sleep()
. Если вы сможете найти элемент, обновите вопрос наблюдениями.3. Привет @DebanjanB я не могу найти элемент с помощью обоих решений. Спасибо за вашу помощь!
4. Проверьте, находится ли элемент в пределах
<iframe>
Ответ №2:
Попробуйте использовать WebDriverWait, только установите более длительное ожидание, например:
element = WebDriverWait(driver, 60).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "input[placeholder='From']")))