Javascript 按钮点击不';不要在Greasemonkey/Tampermonkey脚本中工作。已尝试使用WaitForkYelloments()执行标准鼠标事件

Javascript 按钮点击不';不要在Greasemonkey/Tampermonkey脚本中工作。已尝试使用WaitForkYelloments()执行标准鼠标事件,javascript,jquery,greasemonkey,tampermonkey,Javascript,Jquery,Greasemonkey,Tampermonkey,我试图用Tampermonkey点击URL上的“Mehr-loaded”按钮。该按钮位于智能手机图片下方。以下是我到目前为止写的脚本: // ==UserScript== // @name SparhandyScript // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author Nigel

我试图用Tampermonkey点击URL上的“Mehr-loaded”按钮。该按钮位于智能手机图片下方。以下是我到目前为止写的脚本:

// ==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);
}

该按钮在运行它的jQuery准备启动之前加载。因此,在这种情况下,等待按钮是不够的。您还必须等待附加的JS初始化

一个快速而肮脏的测试表明,对我来说,这个按钮直到页面加载后一秒钟才准备好!(实际时间可能会有所不同,我没有试图找到一个合适的状态标记(这是由您来做的;)

因此,调整代码以允许按钮初始化,这对我很有用:

// ==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);
}


注意:此代码将获取额外的第一页结果,然后停止。它不会获取所有可能的页面;为此,您需要一个更高级的状态机。
这超出了这个问题的范围。如果您在这方面需要帮助,请打开一个新问题(在您自己诚实地尝试解决它之后)。

谢谢:)从现在开始,我应该能够在每一页上都这样做。如果没有,我会再问