#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