Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: Kedrick on November 18, 2014, 08:10:20 PM
-
Можно ли как-то красиво написать такую функцию, чтобы после клика по кнопке или ссылке в браузере, кликер ждал ровно столько времени, сколько грузится следующая страница?
Простой WAIT не всегда возможно адекватно использовать, по причине того, что интернет то летает и скрипт работает отлично, то начинает тупить и скрипт не зная этого тыкает в еще незагруженную кнопку или ссылку и ессно все сбивается.
Надоело нагромождать монструозные проверки и втыкать их после и перед каждым действием :(
-
При загрузке вкладки меняется соответствующий значек (например у мазиллы это загнутая стрелка меняющаяся на время загрузки на крестик.). Нужно написать ожидание пиксела или картинки и запихнуть это в подпрограмму чтоб где нужно вызвать одной строкой.
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
ожидание()
-
Спасибо.
Иногда бывает непонятные и непрогнозируемые подвисания, и загрузка страницы может длиться вечно, это исправляется обновлением окна, и я бы сделал как-то так:
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. Попробую завтра.
-
немного упрощенный вариант:
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мин, если в течении пяти минут ничего невышло:
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
-
GOTO(stop) в твоем скрипте не играет роли, скрипт сам пойдет в том направлении.
PS Еще думаю если из подпрограммы можно вызывать ее саму, то можно слегка проще написать используя только условные циклы IF-ELSE. Попробую завтра.
Этот бред называется рекурсией. Благо теперь, начиная с 4.9 версии, вызов всегда должен идти после подпрограммы, и рекурсия стала невозможной.
У страницы может не догрузиться какой нибудь стиль или жава скрипт без которого вполне можно работать. Тут наверное лучше смотреть на саму страницу. А может быть что пропал интернет, и тут обновляй не обновляй...
-
В хуманэмуляторе есть одна команда: browser->wait(сколько_сек_ждать, сколько_попыток_обновить)
напиши подобную подпрограмму <IE-browser_wait( sec, attempts )> для кликермана и вызывай её без дальнейшего мозголомства ;)
-
В ацтулз без рекурсии было никак, там нет работы с системным временем.
Еще одна маленькая просьба/вопрос не по этой теме.
Не могу разобраться как сделать работу подпрограммы до определенного времени.
WHILE($_time_h<12) работает до 12 часов, а если мне надо до 11:35 как сделать? Не найду в каком формате обозначать время.
$_time_t - не разобрался как с ним работать.
-
В ацтулз без рекурсии было никак, там нет работы с системным временем.
Еще одна маленькая просьба/вопрос не по этой теме.
Не могу разобраться как сделать работу подпрограммы до определенного времени.
WHILE($_time_h<12) работает до 12 часов, а если мне надо до 11:35 как сделать? Не найду в каком формате обозначать время.
$_time_t - не разобрался как с ним работать.
WHILE(($_time_h ! 11) | ($_time_m ! 35))
// работает пока не наступит 11:35
END_CYC
или
// остановить в 11:35
IF(($_time_h = 11) & ($_time_m = 35))
HALT
END_IF
-
Спасибо огромное
-
В ацтулз без рекурсии было никак, там нет работы с системным временем.
Еще одна маленькая просьба/вопрос не по этой теме.
Не могу разобраться как сделать работу подпрограммы до определенного времени.
WHILE($_time_h<12) работает до 12 часов, а если мне надо до 11:35 как сделать? Не найду в каком формате обозначать время.
$_time_t - не разобрался как с ним работать.
WHILE(($_time_h ! 11) | ($_time_m ! 35))
// работает пока не наступит 11:35
END_CYC
или
// остановить в 11:35
IF(($_time_h = 11) & ($_time_m = 35))
HALT
END_IF
этот код не выполнится если проверка происходит реже чем ежеминутно и скрипт будет работать вечно, я понимаю что винт врятли мог это упустить из виду, но решил всетаки упомянуть данный факт.
-
Какой был вопрос - такой ответ. Всех тонкостей разъяснять у меня жизни не хватит и терпения.
Естественно нужно задавать диапазон времени.
Либо же вывести проверку в подпрограмму и вызывать её довольно часто. Потоки опять же...
Будет конкретный скрипт - будет конкретная реализация.
-
Попробовал и не сработало :(
Напишу более конкретно
В игре, в полночь, выскакивает окошко с несколькими ежедневными подарками, там нужно выбрать нужный и тыкнуть ок, по другому это окошко не убирается.
Соответственно мой бот должен работать до 1:55 потом запускается подпрограмма поиска подарочного попапа, при нахождении кликаем куда надо, закрываем и запускаем бота. В определенное время бот тухнет и усыпляет комп.
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
-
возможно в подпрограмме bot() работает бесконечный цикл, либо эта подпрограмма работает больше минуты. покажи подпрограмму bot()
-
Бесконечного цикла там нет, подпрограмма bot это основное тело скрипта с кучей строк, его длительность 7-8 минут (скинуть бабло в банку, зайти на арену проатачить очередника, зайти на работу поставить действие, ждать отката) циклит эту подпрограмму именно условие while которое должно этот цикл прерывать если системное время приближается к 2 часам. Пусть он без дела стоит 5-10-15 минут, не важно, главное чтобы к моменту 0 он был уже остановлен и ждал попапа.
Может быть тогда лучше сделать так?
WHILE(($_time_h < 1) & ($_time_m < 40))
bot()
END_CYC
Но мне кажется это тоже лажу я спорол и он сразу после 00:00 встанет
Уже склоняюсь к тому, что добавить поиск попапа после каждого прохода бота, но это не красиво и хочется всетки разобраться как работать со временем в кликермане.
-
лучше вот так:
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 раз и должна работать пока ненайдет твои подарки.
-
Спасибо, попробую )
Надоело третий день жду у компа до 2 часов утра чтобы проверить )) и завтра будет еще раз чтобы проверить работу с потоком.