Splinter find_by_xpath: использование регулярного выражения для элемента text()

Я запускаю тест браузера с помощью splinter и имею страницу с большой таблицей. Я хочу найти все <tr> элементы, которые содержат <td> с какой-то красиво отформатированной датой в их тексте, как показано здесь:

введите описание изображения здесь

Строки с определенным текстом легко найти, например, с помощью:

browser.find_by_xpath('//tr[.//td[contains(text(), "September")]]')

Затем я попробовал что-то вроде предложенных здесь советов, чтобы найти text() с общим шаблоном даты (приветствуется также помощь в упрощении моего регулярного выражения):

exp = '[A-Z][a-z]+\\s[1-9]{1,2},\\s[0-9]{4}'
browser.find_by_xpath('//tr[.//td[matches(text(), "{0}")]]'.format(exp))

Это не работает (и я проверил, что регулярное выражение работает в изоляции). И не делает:

browser.find_by_xpath('//tr[.//td[matches(., "{0}")]]'.format(exp))

Если мой браузер поддерживает XPath 2.0, как я могу правильно найти элементы?

1 ответ

Решение

Оба последних Firefox и Chrome не поддерживают XPath 2.0. Вот соответствующие открытые вопросы:

Вы должны подойти к нему без использования matches(), Например, вы можете отфильтровать список tr вы найдете в Python, используя подход EAFP и используя datetime.strptime(), Образец:

from datetime import datetime

for tr in browser.find_by_tag("tr"):
    sorted_on = tr.find_by_css(".sorted-on")

    try:
        datetime.strptime(sorted_on.text, "%B %d, %Y")
    except ValueError:
        continue
Другие вопросы по тегам