在selenium返回的结果上进行索引
我想要对通过xpath返回的结果进行索引。比如说:
xpath = '//a[@id="someID"]'
这可以返回几个结果。我想要得到它们的列表。我原以为这样做:
numOfResults = sel.get_xpath_count(xpath)
l = []
for i in range(1,numOfResults+1):
l.append(sel.get_text('(%s)[%d]'%(xpath, i)))
会有效,因为在火狐的Xpath检查器中做类似的事情是可以的:
(//a[@id='someID'])[2]
这会返回第二个结果。
有没有人知道为什么会有不同的表现,以及如何用selenium做到这一点?谢谢!
3 个回答
0
在Selenium中,通常你不需要额外的括号,所以你的循环看起来会像下面这样:
numOfResults = sel.get_xpath_count(xpath)
l = []
for i in range(1,numOfResults+1):
l.append(sel.get_text('%s[%d]'%(xpath, i)))
这样就会生成一个有效的XPath,比如 //a[@id='someID'][2]
。
2
你可以试试这个 xpath /html/descendant::a[@id="someID"]
。你可以把 /html
换成其他的,比如你链接的上级元素,像 id('content')
。这样你就能用 [1]
、[2]
等来找到每个具体的链接了。
关于 XPath 的一些说明可以在这个链接找到:http://www.w3.org/TR/xpath#path-abbrev:
注意:路径
//para[1]
和路径/descendant::para[1]
的意思是不一样的。后者是选择第一个子元素 para;前者是选择所有的子元素 para 中,第一个是它们父元素的第一个子元素。
1
答案是你需要告诉selenium你正在使用xpath:
numOfResults = sel.get_xpath_count(xpath)
l = []
for i in range(1,numOfResults+1):
l.append(sel.get_text(xpath='(%s)[%d]'%(xpath, i)))