Получение частичного значения из XPath - PullRequest
0 голосов
/ 13 июня 2019

У меня есть текущий код HTML:

<div class="group">
    <ul class="smallList">
        <li><strong>Date</strong>
        13.06.2019
        </li>
        <li>...</li>
        <li>...</li>
    </ul>
</div>

и вот мой "неправильный" XPath:

//div[@class='group']/ul/li[1]

и я хотел бы извлечь дату с помощью XPath без текста в теге strong, но я не уверен, как НЕ используется в XPath или его можно использовать здесь?

Имейте в виду, что дата является динамической.

Ответы [ 3 ]

1 голос
/ 13 июня 2019

Используйте substring-after(), чтобы получить значение даты.

substring-after(//div[@class='group']/ul/li[1],'Date')

Выход:

enter image description here

1 голос
/ 13 июня 2019

Самый простой способ получить дату - использовать выражение XPath-1.0

//div[@class='group']/ul/li[1]/text()[normalize-space(.)][1]

Результат включает пробелы.
Если вы хотите избавиться от них, также используйте следующее выражение:

normalize-space(//div[@class='group']/ul/li[1]/text()[normalize-space(.)][1])

К сожалению, это работает только для одного результата в XPath-1.0.
Если у вас есть XPath-2.0, вы можете добавить normalize-space() в конец выражения, что также позволяет обрабатывать несколько результатов:

//div[@class='group']/ul/li[1]/text()[normalize-space(.)][1]/normalize-space()
0 голосов
/ 13 июня 2019

Вот метод python, который будет считывать данные непосредственно из родительского элемента, в вашем случае данные связаны с ul / li.

Python:

def get_text_exclude_children(element):
    return driver.execute_script(
        """
        var parent = arguments[0];
        var child = parent.firstChild;
        var textValue = "";
        while(child) {
            if (child.nodeType === Node.TEXT_NODE)
                    textValue += child.textContent;
                    child = child.nextSibling;
        }
        return textValue;""",
        element).strip()

Вот как это называется в вашем случае.

  ulEle = driver.find_element_by_xpath("//div[@class='group']/ul/li[1]")
  datePart = get_text_exclude_children(ulEle)
  print(datePart)

Пожалуйста, не стесняйтесь переводить на язык, который вы используете, если это не Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...