455 votes

Est-il possible d’obtenir un élément par Xpath en Javascript?

Je cherche quelque chose comme:

 getElementByXpath(//html[1]/body[1]/div[1]).innerHTML
 

Je dois obtenir le innerHTML des éléments en utilisant JS (pour l'utiliser dans sélénium webdriver / Java, car webdriver ne le trouve pas lui-même), mais comment?

Je pourrais utiliser l'attribut Id, mais tous les éléments n'ont pas l'attribut Id.

[FIXÉ]

J'utilise jsoup pour le faire en Java. Cela fonctionne pour mes besoins. Merci pour les réponses. :)

736voto

yckart Points 7517

Vous pouvez utiliser document.evaluate:

Évalue une expression XPath chaîne de caractères et renvoie un résultat de la type spécifié si possible.

Il est w3-normalisés et tout documentend: https://developer.mozilla.org/en-US/docs/Web/API/Document.evaluate

function getElementByXpath (path) {
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

console.log( getElementByXpath("//html[1]/body[1]/div[1]").innerHTML );
<div>foo</div>

https://gist.github.com/yckart/6351935

Il y a aussi une introduction sur le mozilla developer network: https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluate

317voto

Semenyuk Dmitriy Points 321

Dans Chrome Dev Tools, vous pouvez exécuter les opérations suivantes:

 $x("some xpath")
 

31voto

Jay Points 320

Pour quelque chose comme $ x à partir de chrome en ligne de commande api (pour sélectionner plusieurs éléments), essayez:

 var xpath = function(xpathToExecute){
  var result = [];
  var nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
  for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ ){
    result.push( nodesSnapshot.snapshotItem(i) );
  }
  return result;
}
 

Cette présentation de MDN a été utile: https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript

11voto

RobG Points 41170

Vous pouvez utiliser du javascript document.évaluer pour exécuter une expression XPath sur le DOM. Je pense que c'est pris en charge d'une manière ou d'une autre dans les navigateurs revenir à IE 6.

MDN: https://developer.mozilla.org/en/DOM/document.evaluate

MSDN: http://msdn.microsoft.com/en-us/library/ff460472(v=vs. 85).aspx

2voto

Martin Spamer Points 2331

En supposant que votre objectif est de développer et de tester vos requêtes xpath pour l'écran des cartes. Alors soit utiliser Chrome developer tools. Cela vous permet d'exécuter la requête xpath pour montrer les matchs. Ou dans Firefox >9 vous pouvez faire la même chose avec le Développeur Web Outils de la console. Dans la version antérieure d'utiliser x-path-finder ou Firebug.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X