É possível usar as coordenadas fornecidas para simular um clique em JavaScript em uma página da web?
É possível usar as coordenadas fornecidas para simular um clique em JavaScript em uma página da web?
Respostas:
Você pode enviar um evento de clique , embora isso não seja o mesmo que um clique real. Por exemplo, ele não pode ser usado para enganar um documento iframe entre domínios, fazendo-o pensar que foi clicado.
Todos os navegadores modernos suportam document.elementFromPoint
e HTMLElement.prototype.click()
, desde pelo menos o IE 6, Firefox 5, qualquer versão do Chrome e provavelmente qualquer versão do Safari que você provavelmente goste. Ele até seguirá links e enviará formulários:
document.elementFromPoint(x, y).click();
https://developer.mozilla.org/En/DOM:document.elementFromPoint https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
Sim, você pode simular um clique do mouse criando um evento e enviando-o:
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);
}
Cuidado ao usar o click
método em um elemento - ele é amplamente implementado, mas não é padrão e falhará, por exemplo, no PhantomJS. Presumo que a implementação do jQuery de .click()
faz a coisa certa, mas não foi confirmada.
$.click()
initMouseEvent
foi descontinuado: developer.mozilla.org/en-US/docs/Web/API/MouseEvent/…
initMouseEvent
você pode usar var event = new MouseEvent( "click", { clientX: x, clientY: y, bubbles: true } )
Isso também é mostrado em stackoverflow.com/a/36144688/384670 .
Esta é apenas a resposta de torazaburo , atualizada para usar um objeto 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);
}
não funciona para mim, mas imprime o elemento correto no console
este é o código:
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);
Por razões de segurança, você não pode mover o ponteiro do mouse com javascript, nem simular um clique com ele.
O que você está tentando realizar?
createEvent()
+initMouseEvent()