web-dev-qa-db-ja.com

JavaScriptでX、Y座標を使用してクリックをシミュレートする方法は?

Webページ内のJavaScriptでクリックをシミュレートするために、指定された座標を使用することは可能ですか?

85
RadiantHex

clickイベントをディスパッチできますが、これは実際のクリックとは異なります。たとえば、クロスドメインのiframeドキュメントをだましてクリックされたと思わせることはできません。

少なくともIE 6、Firefox 5、あらゆるバージョンのChromeおよびおそらくあらゆるバージョンのSafariを使用するため、最新のブラウザはすべてdocument.elementFromPointおよびHTMLElement.prototype.click()をサポートしています。リンクをたどってフォームを送信することもできます:

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

https://developer.mozilla.org/En/DOM:document.elementFromPointhttps://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/クリック

133
Andy E

はい、イベントを作成してそれをディスパッチすることにより、マウスクリックをシミュレートできます。

_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()の実装は正しいことをしていると思いますが、確認していません。

57
user663031

これは 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);
}
23
user2067021

セキュリティ上の理由から、JavaScriptを使用してマウスポインターを移動したり、クリックをシミュレートしたりすることはできません。

あなたが達成しようとしていることは何ですか?

0
quantumSoup