XPath, dans un script Greasemonkey, ne sélectionne pas les noeuds droits sur une page XHTML

Je travaille sur un script Greasemonkey pour weibo.com . Je ne peux pas choisir les éléments en utilisant XPath sur la page XHTML.

Ce code ne parvient pas à saisir les éléments que je veux:

function resolver(prefix) { return prefix === 'x' ? 'http://www.w3.org/1999/xhtml' : null; } var allLinks, thisLink; allLinks = document.evaluate( "//x:a[@href]", document, resolver, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null ); 

Seuls les éléments <a> de la barre latérale sont sélectionnés et le reste reste là. Veuillez vous référer à ceci, weibo.com, page cible .

Est-il possible de choisir tous les éléments avec l'attribut action-type="login" ?

J'ai utilisé "//x:a[@action-type='login']" , mais ça n'a pas fonctionné.

Le problème est que le script s'exécute avant que tous ces nœuds ne soient ajoutés à la page. Ils sont ajoutés par AJAX de la page plus tard.

Donc, vous pouvez ajouter une temporisation à votre script. Mais:

  1. Si vous voulez simplement saisir des éléments sélectionnés, vous n'avez presque plus besoin d'utiliser XPath. Utilisez querySelectorAll() ou jQuery à la place. Voici un exemple de base avec querySelectorAll et sans délai:

     var allLinks = document.querySelectorAll ("a[action-type='login']"); if (allLinks.length) { // PROCESS NODES AS DESIRED, HERE. } 

  2. Voici un script complet de Greasemonkey , qui gère le problème de contenu retardé en utilisant jQuery et l'utilitaire waitForKeyElements () :

     // ==UserScript== // @name _Weibo, hilite login links // @include http://s.weibo.com/weibo/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js // @require https://gist.github.com/raw/2625891/waitForKeyElements.js // @grant GM_addStyle // ==/UserScript== /*- The @grant directive is needed to work around a design change introduced in GM 1.0. It restores the sandbox. */ function processLoginLinks (jNode) { //***** YOUR CODE HERE ***** jNode.css ("background", "lime"); } waitForKeyElements ("a[action-type='login']", processLoginLinks);