我尝试索引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)))
会起作用,因为使用firefox的Xpath检查程序做类似的工作:
(//a[@id='someID'])[2]
返回第二个结果。
为什么行为会有所不同以及如何用硒做这样的事情 感谢
答案 0 :(得分:2)
您可以尝试xpath /html/descendant::a[@id="someID"]
您可以将/html
替换为您的链接的祖先,例如id('content')
。然后,您应该可以使用[1]
,[2]
等
来自http://www.w3.org/TR/xpath#path-abbrev的XPath TR:
注意:位置路径
//para[1]
与位置路径/descendant::para[1]
的含义不同。后者选择第一个后代para元素;前者选择所有后代的para元素,这些元素是他们父母的第一个孩子。
答案 1 :(得分: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)))
答案 2 :(得分: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)))
这将在Selenium中生成有效的XPath,如//a[@id='someID'][2]