Задать вопрос
@Leopandro
Разработчик CRM/ERP систем

Как в Java извлечь из элемента только текст?

Есть, например, такой вот текст html:
<div class="outer-div">
  Outer Div Text
  <div class="inside-div">
    Inside Div Text
  </div>
<div>

Если беру InnerText то конечно же берется Outer Div Text Inside Div Text , если InnerHTML то соответственно с тегами, а как взять только Outer Div Text?

textContent - тоже самое. что Locator что ElementHandle
  • Вопрос задан
  • 227 просмотров
Подписаться 1 Простой 5 комментариев
Помогут разобраться в теме Все курсы
  • Академия Эдюсон
    Java-разработчик + ИИ
    8 месяцев
    Далее
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Java-разработчик + ИИ
    9 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@KandiDev
AI подсказывает, вытащить внешний текст можно с помощью запуска JavaScript кода:

В Playwright:

String directText = page.locator(".outer-div").evaluate("""
    element => Array.from(element.childNodes)
        .filter(node => node.nodeType === Node.TEXT_NODE)
        .map(node => node.textContent.trim())
        .filter(Boolean)
        .join(' ')
""").toString();

System.out.println(directText);


В Selenium:

WebElement outerDiv = driver.findElement(By.cssSelector(".outer-div"));

JavascriptExecutor js = (JavascriptExecutor) driver;

String directText = (String) js.executeScript("""
    return Array.from(arguments[0].childNodes)
        .filter(node => node.nodeType === Node.TEXT_NODE)
        .map(node => node.textContent.trim())
        .filter(Boolean)
        .join(' ');
""", outerDiv);

System.out.println(directText);


Это можно красиво оформить в метод:

public static String getDirectText(Locator locator) {
    return (String) locator.evaluate("""
        element => Array.from(element.childNodes)
            .filter(node => node.nodeType === Node.TEXT_NODE)
            .map(node => node.textContent.trim())
            .filter(Boolean)
            .join(' ')
    """);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы