Simulating a mousedown, click, mouseup sequence in Tampermonkey?

后端 未结 3 1657
慢半拍i
慢半拍i 2020-11-27 13:09

I would like to simulate a whole click not just

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

How do I do that? Search results all seem t

3条回答
  •  离开以前
    2020-11-27 13:24

    Send mouse events. Like so:

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

    That works if the web page is statically loaded. If the web page is AJAX-driven, use a technique as in:

    • "Normal" button-clicking approaches are not working in Greasemonkey script?
    • Choosing and activating the right controls on an AJAX-driven site

    Beware:
    The question code has an error. You need to pass a class name to that function. Like so:

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

提交回复
热议问题