Автокликер Clickermann :: Форум

Основной раздел => Использование => Topic started by: Kedrick on November 18, 2014, 08:10:20 PM

Title: Ожидание полной загрузки страницы в браузере
Post by: Kedrick on November 18, 2014, 08:10:20 PM
Можно ли как-то красиво написать такую функцию, чтобы после клика по кнопке или ссылке в браузере, кликер ждал ровно столько времени, сколько грузится следующая страница?
Простой WAIT не всегда возможно адекватно использовать, по причине того, что интернет то летает и скрипт работает отлично, то начинает тупить и скрипт не зная этого тыкает в еще незагруженную кнопку или ссылку и ессно все сбивается.
Надоело нагромождать монструозные проверки и втыкать их после и перед каждым действием :(

Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Oraven on November 18, 2014, 09:25:35 PM
При загрузке вкладки меняется соответствующий значек (например у мазиллы это загнутая стрелка меняющаяся на время загрузки на крестик.). Нужно написать ожидание пиксела или картинки и запихнуть это в подпрограмму чтоб где нужно вызвать одной строкой.

Code: (clickermann) [Select]
SUB(ожидание)
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
         $check = 1
         WAITMS(100)
      ELSE
         WAITMS(100)
      END_IF
   END_CYC
END_SUB




ожидание()

Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Kedrick on November 18, 2014, 11:36:58 PM
Спасибо.
Иногда бывает непонятные и непрогнозируемые подвисания, и загрузка страницы может длиться вечно, это исправляется обновлением окна, и я бы сделал как-то так:
Code: (clickermann) [Select]
SUB(ожидание)
   $check = 0
   $counter = 0
   WHILE($check = 0)
      IF($counter < 60)
         GETSCREEN
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
            $check = 1
            WAITMS(100)
            GOTO(stop)
         ELSE
            INT($counter)
            WAIT(1)
         END_IF
      ELSE
         $counter = 0
         KEYPRESS(#F5)
         WAITMS(100)
      END_IF
   stop:
   END_CYC
END_SUB

Тут он каждые 60 секунд будет жать F5 пока страница таки не загрузится.
Еще при желании можно сделать чтобы это было не вечно, а вложить третий цикл, чтобы через 5 минут безуспешных попыток скрипт сделал паузу минут на 10 и потом продолжил долбиться, или вообще остановился, или еще один цикл чтобы подолбиться еще несколько раз по 5 минут.

Именно такие конструкции я и назвал монструозными :)
В хуманэмуляторе есть одна команда: browser->wait(сколько_сек_ждать, сколько_попыток_обновить)
Всего одна команда и вся вышеуказанная подпрограмма выполняется без мозголомства пользователя.

Тут хотелось-бы что-то подобное видеть в следующих версиях кликермана. Тогда он будет еще более незаменимым :)

PS Еще думаю если из подпрограммы можно вызывать ее саму, то можно слегка проще написать используя только условные циклы IF-ELSE. Попробую завтра.
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: dramster on November 19, 2014, 12:46:49 AM
немного упрощенный вариант:

Code: (clickermann) [Select]
SUB(ожидание)
   $t = $_time_t + 60
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
         $check = 1
         WAITMS(100)
      ELSE
         WAITMS(100)
         IF($t < $_time_t)
            KEYPRESS(#F5)
            $t = $_time_t + 60
         END_IF         
      END_IF
   END_CYC
END_SUB

а вот вариант с паузой 10мин, если в течении пяти минут ничего невышло:

Code: (clickermann) [Select]
SUB(ожидание)
   $t = $_time_t + 60
   $n = 0
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
         $check = 1
         WAITMS(100)
      ELSE
         WAITMS(100)
         IF($t < $_time_t)
            KEYPRESS(#F5)
            $t = $_time_t + 60
            INC($n,1)
            IF($n = 5)
               wait(600)
               $n = -1
            END_IF           
         END_IF
      END_IF
   END_CYC
END_SUB
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Oraven on November 19, 2014, 07:48:52 AM
GOTO(stop) в твоем скрипте не играет роли, скрипт сам пойдет в том направлении.
PS Еще думаю если из подпрограммы можно вызывать ее саму, то можно слегка проще написать используя только условные циклы IF-ELSE. Попробую завтра.
Этот бред называется рекурсией. Благо теперь, начиная с 4.9 версии, вызов всегда должен идти после подпрограммы, и рекурсия стала невозможной.

У страницы может не догрузиться какой нибудь стиль или жава скрипт без которого вполне можно работать. Тут наверное лучше смотреть на саму страницу. А может быть что пропал интернет, и тут обновляй не обновляй...
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: i0 on November 19, 2014, 11:33:07 AM
В хуманэмуляторе есть одна команда: browser->wait(сколько_сек_ждать, сколько_попыток_обновить)
напиши подобную подпрограмму <IE-browser_wait( sec, attempts )> для кликермана и вызывай её без дальнейшего мозголомства  ;)
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Kedrick on November 19, 2014, 11:47:01 AM
В ацтулз без рекурсии было никак, там нет работы с системным временем.

Еще одна маленькая просьба/вопрос не по этой теме.
Не могу разобраться как сделать работу подпрограммы до определенного времени.
WHILE($_time_h<12) работает до 12 часов, а если мне надо до 11:35 как сделать? Не найду в каком формате обозначать время.
$_time_t - не разобрался как с ним работать.
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Vint on November 19, 2014, 01:07:59 PM
В ацтулз без рекурсии было никак, там нет работы с системным временем.

Еще одна маленькая просьба/вопрос не по этой теме.
Не могу разобраться как сделать работу подпрограммы до определенного времени.
WHILE($_time_h<12) работает до 12 часов, а если мне надо до 11:35 как сделать? Не найду в каком формате обозначать время.
$_time_t - не разобрался как с ним работать.
Code: (clickermann) [Select]
WHILE(($_time_h ! 11) | ($_time_m ! 35))
   // работает пока не наступит 11:35
END_CYC

или

Code: (clickermann) [Select]
// остановить в 11:35
IF(($_time_h = 11) & ($_time_m = 35))
  HALT
END_IF
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Kedrick on November 19, 2014, 01:21:48 PM
Спасибо огромное
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: aden on November 20, 2014, 02:37:31 PM
В ацтулз без рекурсии было никак, там нет работы с системным временем.

Еще одна маленькая просьба/вопрос не по этой теме.
Не могу разобраться как сделать работу подпрограммы до определенного времени.
WHILE($_time_h<12) работает до 12 часов, а если мне надо до 11:35 как сделать? Не найду в каком формате обозначать время.
$_time_t - не разобрался как с ним работать.
Code: (clickermann) [Select]
WHILE(($_time_h ! 11) | ($_time_m ! 35))
   // работает пока не наступит 11:35
END_CYC

или

Code: (clickermann) [Select]
// остановить в 11:35
IF(($_time_h = 11) & ($_time_m = 35))
  HALT
END_IF

этот код не выполнится если проверка происходит реже чем ежеминутно и скрипт будет работать вечно, я понимаю что винт врятли мог это упустить из виду, но решил всетаки упомянуть данный факт.
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Vint on November 20, 2014, 03:05:48 PM
Какой был вопрос - такой ответ. Всех тонкостей разъяснять у меня жизни не хватит и терпения.
Естественно нужно задавать диапазон времени.
Либо же вывести проверку в подпрограмму и вызывать её довольно часто. Потоки опять же...
Будет конкретный скрипт - будет конкретная реализация.
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Kedrick on November 20, 2014, 09:30:32 PM
Попробовал и не сработало :(

Напишу более конкретно
В игре, в полночь, выскакивает окошко с несколькими ежедневными подарками, там нужно выбрать нужный и тыкнуть ок, по другому это окошко не убирается.
Соответственно мой бот должен работать до 1:55 потом запускается подпрограмма поиска подарочного попапа, при нахождении кликаем куда надо, закрываем и запускаем бота. В определенное время бот тухнет и усыпляет комп.

Code: (clickermann) [Select]
WHILE(($_time_h ! 1) | ($_time_m ! 55)) // ботим до 1:55
   bot()
END_CYC
IF(($_time_h = 1) & ($_time_m > 55)) // если время больше 1:55 ждем попап
   gift()
END_IF
WHILE($_time_h < 5) // ботим до 5
   bot()
END_CYC
EXECUTE("sleep.bat")
halt
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: dramster on November 20, 2014, 10:37:04 PM
возможно в подпрограмме bot() работает бесконечный цикл, либо эта подпрограмма работает больше минуты. покажи подпрограмму bot()
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Kedrick on November 20, 2014, 11:45:14 PM
Бесконечного цикла там нет, подпрограмма bot это основное тело скрипта с кучей строк, его длительность 7-8 минут (скинуть бабло в банку, зайти на арену проатачить очередника, зайти на работу поставить действие, ждать отката) циклит эту подпрограмму именно условие while которое должно этот цикл прерывать если системное время приближается к 2 часам. Пусть он без дела стоит 5-10-15 минут, не важно, главное чтобы к моменту 0 он был уже остановлен и ждал попапа.
Может быть тогда лучше сделать так?
Code: (clickermann) [Select]
WHILE(($_time_h < 1) & ($_time_m < 40))
   bot()
END_CYC

Но мне кажется это тоже лажу я спорол и он сразу после 00:00 встанет

Уже склоняюсь к тому, что добавить поиск попапа после каждого прохода бота, но это не красиво и хочется всетки разобраться как работать со временем в кликермане.
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: dramster on November 21, 2014, 12:01:33 AM
лучше вот так:

Code: (clickermann) [Select]
THREAD(bot,1)
   // ботим
END_THREAD




WHILE(($_time_h ! 1) | ($_time_m ! 55)) // ботим до 1:55
   waitms(200)
   else
   SetThread (bot, 0) //в 1:55 рстановка потока
END_CYC

 gift()    //ждем попап
 SetThread (bot, 1) //после окончания программы gift() , опять врубаем поток основного бота

WHILE($_time_h < 5) // и он работает до 5ч
waitms(200)
END_CYC

EXECUTE("sleep.bat")
halt



только заметь, что подпрограмма запускается 1 раз и должна работать пока ненайдет твои подарки.
Title: Re: Ожидание полной загрузки страницы в браузере
Post by: Kedrick on November 21, 2014, 12:15:25 AM
Спасибо, попробую )

Надоело третий день жду у компа до 2 часов утра чтобы проверить )) и завтра будет еще раз чтобы проверить  работу с потоком.