Для XPath попробуйте:
//input[@type="hidden" and @name="val" and position() = 1]/@value
Для использования в скрипте GreaseMonkey, сделайте что-то вроде этого:
var result = document.evaluate(
"//input[@type='hidden' and @name='var' and position()=1]/@value",
document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null
);
var hiddenval = result.snapshotItem(0);
if (hiddenval)
alert("Found: " + hiddenval.nodeValue);
else
alert("Not found.");
Строго говоря: использование "position()=1"
в фильтре XPath не является абсолютно необходимым, поскольку в любом случае будет использоваться только первый возвращенный результат (через snapshotItem(0)
). Но зачем создавать больший набор результатов, чем вам действительно нужно.
РЕДАКТИРОВАТЬ: Использование результата XPath типа ORDERED_NODE_SNAPSHOT_TYPE
гарантирует, что вы получите узлы в порядке документов . Это означает, что первый узел результата также будет первым узлом в документе.