Текст из веб-элемента (Selenium Python)

#python #html #selenium #selenium-webdriver #xpath

Вопрос:

Мой случай прост, я просто хочу взять текст из этого html ниже:

 <yt-formatted-string id="text" title="" class="style-scope ytd-channel-name">Rayra Fortunato</yt-formatted-string>
 

Я использую Python Selenium, но я не могу извлечь «Райру Фортунато» из него в виде строки.

Это мой код, который работает неправильно.

 realName = driver.find_element_by_xpath("//yt-formatted-string[contains(text(),'Rayra Fortunato')]")
realName = realName.get_attribute('text')
print(realName)
 

или

 realName = driver.find_element_by_xpath("//yt-formatted-string[contains(text(),'Rayra Fortunato')]")
realName = realName.text
print(realName)
 

Какая-нибудь помощь?

Спасибо!

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

1. Rayra Fortunato ожидается ли выход?’

2. Есть ли какая-нибудь ошибка ?

Ответ №1:

Есть много возможных вариантов, которые вы можете попробовать. Среди них:

 locator = driver.find_element_by_xpath('//yt-formatted-string[@id="text"]')
real_name = locator.text
 

Или

 locator = driver.find_element_by_css_selector("text")
real_name = locator.text
 

Или:

 locator = driver.find_element_by_xpath('//yt-formatted-string[@id="text"]')
real_name = locator.get_attribute("innerHTML")
 

(и тот же метод с css_selector).

Однако это должно сработать для этого небольшого html-кода. Реальный HTML, на который вы смотрите, может быть намного сложнее, и вышеперечисленные решения могут не сработать. Если это правда, проверьте следующее:

  • Локатор не находится внутри iframe
  • Локатор не находится внутри теневого дома
  • Страница полностью загружается до того, как вы попытаетесь получить текст
  • Локаторы уникальны (трудно сказать по вашему вопросу).

Этот список может быть длиннее.

Ответ №2:

Возможно, вам также потребуется явное ожидание, однако, похоже, что ваш локатор верен.

Код :

 wait = WebDriverWait(driver, 10)
print(wait.until(EC.element_to_be_clickable((By.XPATH, "//yt-formatted-string[contains(text(),'Rayra Fortunato')]"))).text)
 

Импорт :

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