当索引为[1]时,它们都被识别,而索引[2]则无法识别。唯一区分它们的是第一个弹出窗口显示:none,另一个弹出窗口显示:block,但它们在决定这个特定字段时没有玩,因为Xpath,因为这些字段是从某个不同的源获取的,唉,即使这些div具有相同的元素,它们也有一个文档属性,因此,这些div的Xpath不是从这个div开始,而是在文档的一部分之后。我尽我所能地绞尽脑汁,我可以让你模糊地了解下面代码的样子。
感谢任何帮助。请不要忘记/说它是重复的,我找不到解决方案,因为我几乎搜索了硒的一角。
代码如下:
<div name='some-name' style="display:none;">
...
<!document>
<div id='some-id'>
....
<button name='some-name-2'>some-button-name</button>
....
</div>
...
</div>
<div name='some-name' style="display:block;">
...
<!document>
<div is='some-id'>
....
<button name='some-name-2'>some-button-name</button>
....
</div>
...
</div>
所以他们的Xpath看起来像: [ID =&#39;一些-ID&#39;] /...../按钮
给予([id =&#39; some-id&#39;] /...../按钮)[1]获取这两个元素。
给予([id =&#39; some-id&#39;] /...../按钮)[2]不提取任何内容。
我很难解决这个问题。 [编辑]:在这种情况下我有两个iframe,因为我不得不在它们之间切换,所以没有被检测到。谢谢,我修好了。
答案 0 :(得分:0)
您的Xpath读取方式是找到id='some-id'
的元素,然后找到其中的第一个或第二个按钮。如果您更改它以便[1]
和[2]
放在[id='some-id']
之后而不是在路径末尾,您可以选择查找第一个或第二个[id='some-id']
,然后是该元素中的按钮。
答案 1 :(得分:0)
除非这两个元素实际上是一个元素,否则将始终存在选择一个而不是另一个的XPath表达式。实际上,存在无数个这样的表达式。诀窍在于找到一个好的XPath表达式,这取决于页面内容的修复程度,以及变量的多少(如果数据完全修复,那么你甚至不需要读取它,因为你已经了解它的一切。)
我认为您推断下标[1]和[2]不起作用是不正确的。了解您实际使用的表达方式会很有用,因为您在帖子中写了什么:
([id='some-id']/...../button)[1]
根本不是有效的XPath表达式。