模拟一个鼠标下,点击,鼠标上的序列在Tampermonkey

Simulating a mousedown, click, mouseup sequence in Tampermonkey?

本文关键字:鼠标 Tampermonkey 点击 一个 模拟      更新时间:2023-09-26

我想模拟一个完整的点击,而不仅仅是

document.getElementsByClassName()[0].click();

我该怎么做?搜索结果似乎都是关于处理这些事件,而不是触发它们。

发送鼠标事件。像这样:

//--- Get the first link that has "stackoverflow" in its URL.
var targetNode = document.querySelector ("a[href*='stackoverflow']");
if (targetNode) {
    //--- Simulate a natural mouse-click sequence.
    triggerMouseEvent (targetNode, "mouseover");
    triggerMouseEvent (targetNode, "mousedown");
    triggerMouseEvent (targetNode, "mouseup");
    triggerMouseEvent (targetNode, "click");
}
else
    console.log ("*** Target node not found!");
function triggerMouseEvent (node, eventType) {
    var clickEvent = document.createEvent ('MouseEvents');
    clickEvent.initEvent (eventType, true, true);
    node.dispatchEvent (clickEvent);
}

如果网页是静态加载的,则此操作有效。如果网页是ajax驱动的,则使用如下技术:

  • "中性";点击按钮的方法不工作在Greasemonkey脚本?
  • 在ajax驱动的站点上选择和激活正确的控件

注意:
问题码有错误。您需要将类名传递给该函数。像这样:

document.getElementsByClassName ("SomeClassName")[0].click();

我对Brock的代码做了一些改进。

定义:

function simulateMouseClick(targetNode) {
    function triggerMouseEvent(targetNode, eventType) {
        var clickEvent = document.createEvent('MouseEvents');
        clickEvent.initEvent(eventType, true, true);
        targetNode.dispatchEvent(clickEvent);
    }
    ["mouseover", "mousedown", "mouseup", "click"].forEach(function(eventType) { 
        triggerMouseEvent(targetNode, eventType);
    });
}

调用示例:

simulateMouseClick(document);
simulateMouseClick(document.querySelector("a[href*='stackoverflow']"));

Bit Optimized

function fireMouseEvents( query, eventNames ){
    var element = document.querySelector(query);
    if(element && eventNames && eventNames.length){
        for(var index in eventNames){
            var eventName = eventNames[index];
            if(element.fireEvent ){
                element.fireEvent( 'on' + eventName );     
            } else {   
                var eventObject = document.createEvent( 'MouseEvents' );
                eventObject.initEvent( eventName, true, false );
                element.dispatchEvent(eventObject);
            }
        }
    }
}

你会像这样开火

fireMouseEvents("a[href*='stackoverflow']",['mouseover','mousedown','mouseup','click']);