2016-12-11 1 views
1

J'essaye de cliquer sur le bouton "Mehr Laden" sur l'URL http://www.sparhandy.de/handy-kaufen/ avec Tampermonkey. Le bouton est situé sous les images du smartphone. Voici le script que j'ai écrit jusqu'à présent:Le bouton ne fonctionne pas dans le script Greasemonkey/Tampermonkey. Déjà essayé des événements de souris standard avec waitForKeyElements()

// ==UserScript== 
// @name   SparhandyScript 
// @namespace http://tampermonkey.net/ 
// @version  0.1 
// @description try to take over the world! 
// @author  Nigel 
// @match  http://www.sparhandy.de/handy-kaufen/ 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 

waitForKeyElements ("[data\\-behavior=result\\-paging]", triggerMostButtons); 

function triggerMostButtons (jNode) { 
    triggerMouseEvent (jNode[0], "mouseover"); 
    triggerMouseEvent (jNode[0], "mousedown"); 
    triggerMouseEvent (jNode[0], "mouseup"); 
    triggerMouseEvent (jNode[0], "click"); 
    //alert(jNode[0].className); 
    //alert(jNode[0].parentNode.className); 
} 

function triggerMouseEvent (node, eventType) { 
    var clickEvent = document.createEvent('MouseEvents'); 
    clickEvent.initEvent (eventType, true, true); 
    node.dispatchEvent (clickEvent); 
} 

Répondre

0

Ce bouton est chargé avant que le jQuery qui l'exécute soit prêt à fonctionner. Il ne suffit donc pas d'attendre le bouton dans ce cas. Vous devez également attendre l'initialisation du JS joint. Un test rapide et sale montre que, pour moi, le bouton n'est prêt que plus d'une seconde après le chargement de la page! (. Le temps réel peut varier et je ne pas essayer de trouver un marqueur d'état approprié (qui est à faire pour vous;))

Ainsi, en ajustant le code pour permettre le bouton d'initialiser, fonctionne pour moi:

// ==UserScript== 
// @name  SparhandyScript 
// @match  http://www.sparhandy.de/handy-kaufen/ 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js 
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant  GM_addStyle 
// ==/UserScript== 

waitForKeyElements ("[data\\-behavior=result\\-paging]", clickButtonAfterDelay); 

function clickButtonAfterDelay (jNode) { 
    if (document.readyState != "complete") return true; 
    //triggerMouseEvent (jNode[0], "click"); 
    //-- WARNING: Fixed time may not always work unless it is ridiculously long. 
    setTimeout (triggerMouseEvent, 2222, jNode[0], "click"); 
} 

function triggerMouseEvent (node, eventType) { 
    var clickEvent = document.createEvent('MouseEvents'); 
    clickEvent.initEvent (eventType, true, true); 
    node.dispatchEvent (clickEvent); 
} 


NOTE: Ce code va chercher la première page de résultats supplémentaires, puis arrêter. Il ne va pas chercher toutes les pages possibles; vous avez besoin d'une machine d'état plus sophistiquée pour cela.
C'est au-delà de la portée de cette question. Si vous avez besoin d'aide pour cette partie, ouvrez une nouvelle question (après une tentative sincère de la résoudre vous-même).

+0

Merci :) Je devrais être capable de le faire pour chaque page à partir d'ici. Si ce n'est pas, je vais demander à nouveau –

+0

Vous êtes les bienvenus et bonne chance. –