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:
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. }
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);