Splinter find_by_xpath: 对元素文本使用正则表达式()
Splinter find_by_xpath: using regex for element text()
我是 运行 一个使用 splinter 的浏览器测试并且有一个很大的页面 table。我想找到所有 <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,我如何才能正确找到元素?
最新的 Firefox 和 Chrome 都不支持 XPath 2.0。以下是相关的未决问题:
你必须在不使用 matches()
的情况下接近它。例如,您可以通过使用 EAFP approach 并使用 datetime.strptime()
来过滤在 Python 中找到的 tr
的列表。示例:
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
我是 运行 一个使用 splinter 的浏览器测试并且有一个很大的页面 table。我想找到所有 <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,我如何才能正确找到元素?
最新的 Firefox 和 Chrome 都不支持 XPath 2.0。以下是相关的未决问题:
你必须在不使用 matches()
的情况下接近它。例如,您可以通过使用 EAFP approach 并使用 datetime.strptime()
来过滤在 Python 中找到的 tr
的列表。示例:
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