Распознавание и обработка изображений


Роботы и обработка изображений

Имитация поведения человека на сайте, часть 1

На сегодняшний день существует множество способов отслеживания поведения человека на сайте при помощи скриптов. Например, многим известный вебвизор от Яндекс умеет собирать следующий дествия пользователя на сайте:

  • движения мыши;
  • клики;
  • прокрутка страницы;
  • нажатия на клавиши и заполнение форм;
  • выделение и копирование текста.
Попробуем разобраться, как можно симитировать поведение пользователя программными средствами.

Движения мыши Движение мыши на странице отслеживается при помощи свойств clientX(Y) / pageX(Y) событий скрипта. Имитировать движение курсора мы двумя принципиально разными способами - это перемещение курсора мыши и создание событий или имитация перемещения курсора. В первом случае, программно курсор можно перемещать, например

функцией WINAPI: 
 BOOL SetCursorPos(int X, int Y);
или функцией Qt:
 QCursor::setPos(int X, int Y);
Во втором случае, исполняя свои скрипты на странице, можно непосредственно менять clientX(Y) / pageX(Y), либо генерировать события движения курсора мыши:
<script>
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("mousemove", true, true, window, 1, 0, 0, X, Y,
   false, false, false, false, 0, null);
</script>

Пока вы читали статью, вы обратили внимание как двигался у вас курсор? При чтении, курсор движется довольно хаотично и частыми продолжительными паузами без движения, иногда выделяются слова или фразы. При активном серфинге же, курсор движется в основном по прямой между ссылками, либо хаотично при поиске информации. Учтем это и попробуем смоделировать.

  var dX = 0;
  var dY = 0;
  var mode = 0;
  var counter = 0;
  setTimeout(setPos(), 100); // Запускаем таймер
 
  function setPos()
  {
      if (mode == 0) // режим инициализации
      {
	  // Выбираем координаты, куда по прямой поедет курсор
	  x = Math Math.random() * 1000;
	  y = Math.random() * 800;
 
	  // Выбираем количество шагов или скорость перемещения
	  counter = Math.random() * 50 + 3;
 
	  // Вычисляем, на сколько передвинется курсор за один шаг
	  dX = (x - clientX) / counter;
	  dY = (y - clientY) / counter;
 
	  // Случайно выбираем, двигаться будем или стоять на месте
	  if (Math.random() - 0.5 > 0) {
	      mode = 1; 
	      setTimeout(setPos(), 50);
	  } else {
	      mode = 2;
	      setTimeout(setPos(), 500);
	  }
      }
      else if (mode == 1) // режим движения курсора
      {
          // устанавливаем координаты курсора
	  clientX += dX;
	  clientY += dY;
	  // уменьшаем счетчик. Если счетчик закончился, начинаем инициазацию снова
	  counter--;
	  if (counter == 0)
	      mode = 0;
	  setTimeout(setPos() 50); // Если есть еще шаги, вернемся сюда же через 50 мс
      }
      else if (mode == 2)  // режим паузы
      {
          mode = 0;
	  setTimeout(setPos(), 500 + counter * 100); // 
      }   
  }
 
Итак, у нас получился внедряемый скрипт, который будет управлять координатами курсора мыши для сайта. Код для реального управления курсором мыши будет выглядеть аналогично. Рассмотрен универсальный метод инитации движения мыши. Если же требуется "обмануть" конктретную систему наблюдения на сайте, то может быть проще перопределить обработчики той системы и использовать их для своих нужд.

0
12001
ivtst1
24 апреля 2014
Написать


Комментарии: