Splinter find_by_xpath:使用正则表达式来表示元素文本()

时间:2015-10-21 17:22:18

标签: python regex selenium xpath splinter

我正在使用splinter运行浏览器测试,并且有一个包含大表的页面。我想找到包含<tr>的所有<td>元素,其中包含一些格式正确的日期,如下所示:

enter image description here

很容易找到具有特定文字的行,例如:

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

然后我尝试了类似建议here的东西来查找带有常规日期模式的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 个答案:

答案 0 :(得分:2)

最新的Firefox和Chrome都不支持XPath 2.0。以下是相关的未决问题:

您必须在不使用matches()的情况下接近它。例如,您可以通过EAFP approach并使用tr来过滤您在Python中找到的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