//button[@data-qtip='Next Page']/@id[1]
Это один из самых часто задаваемых вопросов в XPath .
Как правило, вышеприведенное выражение не выбирает (только) один узел, как ожидалось.
Причина?
В спецификации W3C XPath сокращение //
определено таким образом, что этот псевдооператор имеет более низкий приоритет, чем оператор XPath []
.
Таким образом, любое выражение типа:
//SomeNode[1]
выбирает все SomeNode
узлы, каждый из которых является первым SomeNode
дочерним узлом своего родителя. В общем случае таких узлов может быть несколько.
Когда мы хотим выбрать первый узел SomeNode
в документе, мы должны переопределить приоритет оператора по умолчанию, используя скобки :
(//SomeNode)[1]
В этом конкретном случае используйте :
(//button[@data-qtip='Next Page']/@id)[1]