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