112

是否可以使用给定的坐标来模拟网页中 JavaScript 的点击?

4

5 回答 5

176

您可以分派一个点击事件,尽管这与真正的点击不同。例如,它不能用来欺骗跨域 iframe 文档,使其认为它被点击了。

所有现代浏览器都支持document.elementFromPointHTMLElement.prototype.click(),至少从 IE 6、Firefox 5、任何版本的 Chrome 开始,可能还有您可能关心的任何版本的 Safari。它甚至会跟随链接并提交表单:

document.elementFromPoint(x, y).click();
于 2010-07-18T21:56:14.363 回答
79

是的,您可以通过创建事件并调度它来模拟鼠标点击:

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

小心click在元素上使用该方法——它被广泛实现但不是标准的,并且在例如 PhantomJS 中会失败。我认为 jQuery 的实现是.click()正确的,但尚未确认。

于 2013-05-12T16:32:04.403 回答
39

这只是torazaburo 的回答,已更新为使用 MouseEvent 对象。

function click(x, y)
{
    var ev = new MouseEvent('click', {
        'view': window,
        'bubbles': true,
        'cancelable': true,
        'screenX': x,
        'screenY': y
    });

    var el = document.elementFromPoint(x, y);

    el.dispatchEvent(ev);
}
于 2016-03-22T01:28:59.490 回答
2

它对我不起作用,但它会将正确的元素打印到控制台

这是代码:

function click(x, y)
{
    var ev = new MouseEvent('click', {
        'view': window,
        'bubbles': true,
        'cancelable': true,
        'screenX': x,
        'screenY': y
    });

    var el = document.elementFromPoint(x, y);
    console.log(el); //print element to console
    el.dispatchEvent(ev);
}
click(400, 400);
于 2020-05-02T18:07:18.250 回答
-4

出于安全原因,您不能用 javascript 移动鼠标指针,也不能用它模拟点击。

你想要完成什么?

于 2010-07-18T21:50:04.657 回答