PhantomJS; click an element

click, javascript, phantomjs

Solution

`.click()` is not standard. You need to create an event and dispatch it:

function click(el){
    var ev = document.createEvent("MouseEvent");
    ev.initMouseEvent(
        "click",
        true /* bubble */, true /* cancelable */,
        window, null,
        0, 0, 0, 0, /* coordinates */
        false, false, false, false, /* modifier keys */
        0 /*left*/, null
    );
    el.dispatchEvent(ev);
}

Problem

How do I click an element in PhantomJS? ``` page.evaluate(function() { document.getElementById('idButtonSpan').click(); }); ``` This gives me an error "undefined is not a function..." If I instead ``` return document.getElementById('idButtonSpan'); ``` and then print it, then it prints [object object], so the element does exist. The element acts as a button, but it's actually just a span element, not a submit input. I was able to get this button click to work with Casper, but Casper had other limitations so I'm back to PhantomJS.

Original source