Главная » 2016 » Ноябрь » 14 » Алгоритм ожидания события
16:17
Алгоритм ожидания события

    Рассмотрим один из главнейших алгоритмов при программировании ботов - "Алгоритм ожидания события". Попробуем разобраться что это такое и создадим универсальный код, который будет работать везде и всегда, как код для поиска рисунка на экране компьютера.

                                    "Алгоритм ожидания события"- что это?

     

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

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

start:     // начало программы

poisc("seo2.bmp") // подпрограмма поиска категории
click()           // подпрограмма поиска ссылки

start2:

WAIT(20)          // время для просмотра сайта

SOUND("blip2.wav")
WAIT(1)
SOUND("blip1.wav")
WAIT(20)       
// врем для ввода капчи
KEYDOWN(#CTRL)
KEYPRESS(#W)
KEYUP(#CTRL)
GOTO(start)

Как мы видим, этот способ прост, часто очень надёжен, но при этом, "слеп" и зачастую затягивает время исполнения программы.

Для простоты объяснения возьмём код для серфинга seo-сайтов  из прошлого видео. Для некоторых сайтов процесс просмотра сайтов есть величина постоянная(например, для profitcentr - это 20сек), а для других от 5- до 50 сек. как для сайта WMRFast.com. Как же нам простым путем отследить время отведенное на просмотр?

 Создадим скрипт на примере кода для сайта WMRFast.com. После клика на оплачиваемую ссылку нам открывается новое окно для просмотра сайта и появляется надпись Ждите __ сек , по истечении указанного времени эта надпись исчезнет и нам надо будет отгадать капчу. Надпись Ждите и будем отслеживать (картинку этой надписи).

Смысл состоит в следующем: задаем малый промежуток времени ( 2с.) и после проверяем есть ли на странице рисунок надписи Ждите. Если надпись есть - ждем еще 2с., и снова проверяем и так по кругу.После проверки есть ли рисунок на странице и нахождения его - переменной an прибавляем 1 и проверяем  не прывышает ли значение этой переменной 30 (что соответствует 60 сек ожидания исчезновения рисунка). Если ожидание превысило 60сек - выходим из цикла(что то не так) и ереходим к следующим действиям. Если рисунок исчезнет в период до 60 сек цикл ожидания автоматически закончиться по условию if_picture_in(0,0,$_xmax,$_ymax,"kpW.bmp")


 WAIT(2) // ожидание 2с
 $an=0    // переменная количество проверок наличия рисунка
ancor:      //  метка повторной проверки
    GETSCREEN
  if_picture_in(0,0,$_xmax,$_ymax,"kpW.bmp")
// если есть рисунок Ждите   
      WAIT(2)  //  ждем 2с
    $an=$an+1 //  кол проверок
     IF($an>30)  // если кол проверок превысило 30
     GOTO(con) // выходим из цикла проверок
   END_IF  //

GOTO(ancor) //  переход на начало проверки Ждите
        
    
END_IF //

con:    //   метка выхода
SOUND("blip2.wav") // звук выхода

Код универсален и применим для любых ожиданий , когда существует уникальный рисунок процесса и он исчезает после его окончания. Можно изменить время проверки WAIT(2) как уменьшить так и увеличить.

Как встраивается код в программе для сёрфинга смотри на странице сайта - тут.

 

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

    WAIT(2)
    $an=0
  ancor:      
GETSCREEN
  if_picture_in(0,0,$_xmax,$_ymax,"просм_успех.bmp")
// если рисунок появился  
   MOVE($_return1+10,$_return2+5) //перемещаемся на него
   WAIT(1)
   LCLICK($_return1+10,$_return2+5)
//кликаем
   WAIT(2)
  ELSE                
//иначе - нет рисунка
   $an=$an+1         //кол циклов ожидания
        IF($an>30)      // если больше 30
            GOTO(con)   // выход из ожидания
        END_IF
        
   WAIT(2) 
//  ждем еще 2с
   GOTO(ancor)  // переход на начало проверки появления рисунка
        
    END_IF
// конец проверки (клик на рисунке сделан)

con:

 Стоит добавить, что аналогичные операции делает "параллельный поток" , но о его работе всегда можно найти информацию в открытых источниках.

 

 

Категория: боты | Просмотров: 1202 | Добавил: kuzma | Рейтинг: 1.0/1
Всего комментариев: 0
avatar

Сайт создан для помощи тем, кто делает первые шаги в программировании.

- автор идеи Кузьма Кузин

Возможность бесплатного доступа ко всем материалам и скриптам.

-совместная работа с группой молодых программистов

Срипты для автоматического заработка на SEO сайтах.

- для всех пользователей всё по цене в 1 EUR