#python #selenium #webdriver
Вопрос:
Я хочу указать, соответствует ли действительности этот текст «Ожидает рассмотрения» или нет. Как мне найти этот элемент? Со всеми родительскими элементами я изо всех сил пытаюсь это понять. Если бы кто-нибудь мог подробнее рассказать о том, как это работает, это было бы удивительно.
Комментарии:
1. Можете ли вы поделиться ссылкой на веб-страницу? Что вы имеете в виду под
I am wanting to state whether this text 'Awaiting Review' is true or not
этим ? Вы пытаетесь найти, есть ли на странице элемент с текстом «Ожидает рассмотрения» или если этот конкретный элемент внутри родительских элементов содержит этот текст?
Ответ №1:
Поскольку вы находитесь в DevTools, вы можете щелкнуть правой кнопкой мыши и выбрать «Копировать XPath». Это даст вам конкретный и уникальный селектор для элемента, поэтому вам не нужно беспокоиться о подсчете родительских дивов на всем пути от корня! Изучение XPath-отличный инструмент, смотрите здесь: https://www.w3schools.com/xml/xpath_syntax.asp
Затем в своем коде Selenium вы можете написать:
awaiting_review = driver.find_element_by_xpath('# paste xpath here').text
if awaiting_review == 'Awaiting Review':
# whatever you want to happen
Комментарии:
1. если элемент не найден xpath, он вызовет исключение
NoSuchElement
Ответ №2:
Чтобы просто проверить, существует ли элемент, содержащий этот текст, на странице, вы можете сделать это:
if driver.find_elements(By.XPATH, "//span[contains(text(), 'Awaiting Review')]"):
print("Element is presented")
else:
print("Eelement not found")
driver.find_elements
возвращает список элементов, соответствующих переданному локатору.
Поэтому, если на span
странице представлен элемент, содержащий Awaiting Review
текст, он вернет его. В противном случае он вернет пустой список.
Непустой список True
рассматривается Python как пустой, в то время как пустой список есть False
.
Комментарии:
1. Есть ли разница между [if self.driver.find_elements_by_xpath] и [if driver.find_elements(By. XPATH] ?
2. @AndrewReiblein вы спрашиваете о
self
том, что было до или(By.XPATH)
послеdriver.find_elements
?3. Нет, только (by_xpath) и (By.XPATH). Спасибо
4. Как сказал Крейсепендей, нет. Я обычно использую
driver.find_elements_by_xpath
🙂
Ответ №3:
Пожалуйста, попробуйте это.
elems = driver.find_elements_by_css_selector("#vacancy-pipeline-header>header>div>span")
if elems:
if elems[0].text == "Awaiting Review":
print('valid!')
else
print('invalid!')
else
print('Element is not exist!')
Если вы знакомы с селектором CSS, это хорошо для вас.
Ответ №4:
Пояснение :- с //span[contains(text(), 'Awaiting Review')]
помощью вы можете найти элемент и можете проверить , size if > 0
используется find_elements
ли, если да, то вы можете утверждать (я просто использую печать), а если нет, код перейдет в другую часть.
Вы можете попробовать использовать приведенный ниже код :
try:
if len(driver.find_elements(By.XPATH, "//span[contains(text(), 'Awaiting Review')]")) > 0 :
print("Awaiting Review is present")
else:
print("Awaiting Review is not present")
except:
print("something went wrong. ")
pass
Обновление 1 :
try:
if len(driver.find_elements(By.CSS_SELECTOR, "div#air-pipeline-board heade.air-pipeline-lane span")) > 0 :
print("Awaiting Review is present")
else:
print("Awaiting Review is not present")
except:
print("something went wrong. ")
pass
Комментарии:
1. Я попробовал это, но в нем говорится: «ожидание обзора отсутствует», поэтому он не находит нужного элемента. @cruisepandey
2. это означает, что он не смог найти его в пользовательском интерфейсе, вы уверены, что он присутствует в пользовательском интерфейсе ?
3. Да, это определенно есть.
4. хорошо, является ли URL-адрес страницы общедоступным ? можете ли вы поделиться ?
5. Я даже дал решение с другим локатором, можете ли вы попробовать этот обновленный код 1 ?