在selenium返回的结果上进行索引

3 投票
3 回答
842 浏览
提问于 2025-04-15 17:08

我想要对通过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)))

撰写回答