如何在 JavaScript 中使用 x,y 坐标来模拟单击?

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

166245 次浏览

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

你想达到什么目的?

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

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

document.elementFromPoint(x, y).click();

是的,您可以通过创建一个事件并分派它来模拟鼠标单击:

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()实现做了正确的事情,但是还没有确认。

这只是 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);
}

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

this is the code:

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