112

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

4

5 に答える 5

176

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

最近のすべてのブラウザは、少なくともIE 6、Firefox 5以降、Chromeのすべてのバージョン、そしておそらく気になると思われるSafariのすべてのバージョンをサポートdocument.elementFromPointしています。HTMLElement.prototype.click()リンクをたどり、フォームを送信することもできます。

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

これはただのトラザブロの答えであり、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を使用してマウスポインタを移動したり、javascriptを使用してクリックをシミュレートしたりすることはできません。

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

于 2010-07-18T21:50:04.657 に答える