Говорят, клик не настоящий

Знаете, как отличить настоящий клик (который отправлен реальной мышкой) от фальшивого (эмулированного при помощи скрипта)?

.isTrusted

да, да.
настоящему клику всегда можно верить.
Как бы вы не пытались вызвать клик там где его не ждут
И что скажете вы, его никак нельзя подделать?

element.click() не прокатывает

element.dispatchEvent(new MouseEvent('mousedown', {
view: window,
bubbles: true,
cancelable: true
}));
element.dispatchEvent(new MouseEvent('mouseup', {
view: window,
bubbles: true,
cancelable: true
}));

Тоже, хотя казалось бы все нужные блоки для этого заготовлены как раз должны быть.

На помощь могут придти само собой языки более высокого порядка, такие как python, которые могут работать с мышью целиком. Либо headless chrome хорошо справляется с этим
Об этом я не буду рассказывать
А расскажу я о том, как эмулировать настоящий клик при помощи расширения для хрома. Такой метод гарантирует, что мышка не выйдет за пределы браузера и не взбунтует против хозяина (ну вы знаете эти роботы так и хотят восстать против человеков)

Нам понадобится изготовить расширение для хрома (для других браузеров скорее всего механизмы будут чуть другими)
Если вы не знаете как пишутся расширения - то рекомендую изучить этот вопрос самостоятельно, здесь будет упор на то что у вас есть минимальные представления о расширении и вы уже написали что-нибудь уровня hello-world

В файл манифеста прописываем права на дебаггер

"permissions": [
  "debugger"
],

Далее в файле background.js активируем режим отладки

chrome.webNavigation.onCompleted.addListener(function(navigation) {
chrome.debugger.attach({ tabId: navigation.tabId }, "1.3");
}

(программе ведь надо знать на какой вкладке включаться - на активной разумеется, вам скорее всего также понадобятся права на работу с вкладками)
Далее сами функции вызова клика по координатам выглядят вот так

chrome.debugger.sendCommand({ tabId: sender.tab.id }, "Input.dispatchMouseEvent", 
  { type: "mousePressed", x: request.x, y: request.y, button: "left", clickCount: 1 })
chrome.debugger.sendCommand({ tabId: sender.tab.id }, "Input.dispatchMouseEvent",
  { type: "mouseReleased", x: request.x, y: request.y, button: "left", clickCount: 1 })


Собственно всё
если хотите вызывать клики из вкладки - то чтобы обратиться к background.js - нужно использовать listner
например так

chrome.runtime.onMessage.addListener(
  function (request, sender) {
    if (request.event === "mouseClick") {
      chrome.debugger.sendCommand({ tabId: sender.tab.id }, "Input.dispatchMouseEvent",
      { type: "mousePressed", x: request.x, y: request.y, button: "left", clickCount: 1 })
      chrome.debugger.sendCommand({ tabId: sender.tab.id }, "Input.dispatchMouseEvent",
      { type: "mouseReleased", x: request.x, y: request.y, button: "left", clickCount: 1 })
    }
  }
)

и вызывать его например так из тела расширения

chrome.runtime.sendMessage({
  event: "mouseClick",
  x: 100,
  y: 100,
})

Вот этот клик будет засчитан как настоящий
Учитывайте, что клик засчитывается только если эта координата есть на экране, то есть вы не можете сделать клик по области экрана, которая находится вне экрана. Также это не сработает, если курсор залочен (pointer lock api)
Удачи

Больше материалов выкладываю на своем Дзен канале

  • Автор: kosmom
  • Рейтинг: 0
  • Просмотров: 1896
  • Комментариев: 0
  • Создан: 02.08.2021 16:05

Комментарии (0)

Ваши предложения и пожелания пишите на pro@kosmom.ru

Теги

ajax axios backup bootstrap core framework eloquent excel home project html ios javascript keep-alive kpi laravel legacy mvp orm php rip scroll solid timestamp undefined vue vuetify watch безопасность биометрический паспорт ваша любаша для путешествий загран на 10 лет загран паспорт загранпаспорт нового образца зимние книги как заполнить анкеты кеширование книги на новый год логирование мцф недвижимость новогодние книги образец заполнения антеты паспорт для путешествий паспорт нового поколения печать продукт проектирование прокси разработка ремонт ремонт в апартаментах ремонт нежилого помещения самокат сдача сколько стоил ремонт апартаментов спорт стандарты таблица финансы хостинг цена ремонта что почитать зимой юзабилити

Случайный пост

07.05.2013 15:56
Сокращение числа лишних переменных из HTML формы