我在Python中构建相对复杂的xpath表达式,以便将它们传递给selenium.但是,它很容易出错,所以我正在寻找一个允许我构建表达式而不会弄乱字符串的库.例如,而不是写作
locator='//ul[@class="comment-contents"][contains(., "West")]/li[contains(., "reply")]
我可以这样写:
import xpathbuilder as xpb
locator = xpb.root("ul")
.filter(attr="class",value="comment-contents")
.filter(xpb.contains(".", "West")
.subclause("li")
.filter(xpb.contains (".", "reply"))
这可能不是可读的,但不容易出错.有这样的事吗?
解决方法:
虽然这不是你想要的……你可以使用css选择器
...
import lxml.cssselect
csssel = 'div[class="main"]'
selobj = lxml.cssselect.CSSSelector(csssel)
elements = selobj(documenttree)
生成的XPath表达式在selobj.path中
>>> selobj.path
u"descendant-or-self::div[@class = 'main']"