Задать вопрос
jack_azizov
@jack_azizov

Как сделать автоклик?

Подскажите пожалуйста есть код на стороне сервера, к которому напрямую нет доступа. Логика такая когда происходит клик на странице, скрипт делает редирект. Необходимо сэмулировать этот клик.

Гуглил различные варианты эмитации кликов, но почему они не срабатывают, то есть если клик совершен мышкой - редирект происходит, если делать скриптом - то нет.

Быть может есть разница в событии которое создается при клике мыши и событие которое генерируется скриптом ?
Или же возможно достичь полного соответствия ?
Подскажите пожалуйста.

Вот пример кода, который я использовал :
1) JQ
var $el = $('body')
        var offset = $el.offset()
        var event = jQuery.Event('mousedown', {
            which: 1,
            pageX: 12345,
            pageY: 12345,
        })
        $el.trigger(event)


2) JS

var targetNode = document.querySelector (".home");
        if (targetNode) {
            //--- Simulate a natural mouse-click sequence.
            setInterval(() => {
                triggerMouseEvent (targetNode, "mousedown");
                triggerMouseEvent (targetNode, "mouseup");
            }, 2000);
        }
        else 
        console.log ("*** Target node not found!");


        function triggerMouseEvent (node, eventType) {
            var clickEvent = document.createEvent ('MouseEvents');
            clickEvent.initEvent (eventType, true, true);
            node.dispatchEvent (clickEvent);
        }
  • Вопрос задан
  • 199 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Нет. Это невозможно.
Браузеры, к счастью, заботятся о пользователях, и не позволяют (по возможности) всяким уродам совершать свои грязные делишки (например автоматически кликать куда попало).

Быть может есть разница в событии которое создается при клике мыши и событие которое генерируется скриптом ?


Да, есть. У событий есть поле isTrusted — событию можно доверять, если оно сделано пользователем. поле ридонли, изменить его не получится.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы