我正在使用splinter运行浏览器测试,并且有一个包含大表的页面。我想找到包含<tr>
的所有<td>
元素,其中包含一些格式正确的日期,如下所示:
很容易找到具有特定文字的行,例如:
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,我该如何正确找到元素?
答案 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