Поиск текста в элементе с помощью selenium python

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