Clickermann как зациклить сценарий

от admin

Clickermann как зациклить сценарий

Условия, циклы, подпрограммы

Сложные составные конструкции, делающие программы более умными, а сценарии более короткими и лаконичными.

IF (expression) . END_IF — проверяет истинность выражения и выполняет блоки инструкций в зависимости от результата

expression — выражение (либо выражения, объединенные логическим оператором), состоящее из двух членов (переменных или функций) и знака отношения; при этом оба члена должны быть одного типа: численного либо строкового

Выражение считается истинным, если его результат больше 0. В остальных случаях выражение считается ложным. Результат выражения — число, полученное путем вычисления выражения с использованием арифметических операций, битовых операций и операций сравнения. Для понимания этого была написана подробная статья «Условия и битовые операции» в разделе «Учебные статьи» на официальном форуме, с которой рекомендуется ознакомиться, так как там содержится много примеров и знаний для общего развития.

Операции сравнения

(a > b) = 1, если a > b (вслучае если a и b строки, сравниваются их длины)
(a < b) = 1, если a < b (вслучае если a и b строки, сравниваются их длины)
(a = b) = 1, если a равно b (поддерживает строки)
(a ! b) = 1, если a неравно b (поддерживает строки)

Логические операторы

На самом деле, битовые операции (см. учебную статью на форуме). Однако в контексте данного параграфа просто позволяют объединять логические выражения и операции сравнения в комплексные условия
Логическое И: (a & b) = 1 если и a = 1 и b = 1
Логическое ИЛИ: (a | b) = 1 если a = 1 или b = 1, или оба
Логическое исключающее ИЛИ: (a ^ b) = 1 если только a = 1 или только b = 1, но не оба

ELSE — блок «иначе»; определяет инструкции, выполняющиеся в случае если условие ложно

Блок ELSE позволяет объявить блок комманд, которые выполнятся в том и только в том случае если условие ложно. Блок ELSE описывается прямо в блоке условия между заголовком и END_IF. Блок ELSE доступен для следующих условных конструкций: IF, IF_PICTURE_IN, IF_PIXEL_IN.

Переключатель (чаще говорят просто свитч) используется когда нагромождение условий (if) нецелесообразно и портит читаемость скрипта. Переключатель анализирует входную переменную и в зависимости от ее значения выполняет часть своего внутреннего кода.
Часть case(x) используется для явного указания значения, где x — ожидаемое значение входной переменной $var. Часть default (по умолчанию) используется для всех остальных неописанных случаев. Она должа быть описана последней.

WHILE (expression) . END_CYC — организует цикл с предусловием

expression — логическое выражение (см. IF), при истинности которого выполняется тело цикла

Упрощенная версия цикла FOR, без параметра и шага. Действует так же, за тем исключением, что просто проверяет условие expression и в случае его истинности выполняет тело цикла.

SUB (sub_name, [$par1, . ]) . END_SUB — описывает подпрограмму

sub_name — имя подпрограммы
$par1, . — параметры подпрограммы

Подпрограмма это последовательность действий, объединенная в блок с собственным именем и набором параметров. Подпрограмму можно описать в любом месте сценария. Однако, описание подпрограммы должно быть раньше (выше) любого из ее вызовов. Хорошим тоном считается вынесение тел подпрограмм в отдельный внешний файл, подключаемый затем через директиву #include

Параметры, описанные в заголовке подпрограммы после ее имени, доступны в теле подпрограммы как переменные. Для вызова подпрограммы необходимо написать ее имя в сценарии вместе со всеми параметрами. Очень важно чтобы количество параметров в описании и в вызове совпадало. После выполнения подпрограммы, сценарий продолжится с момента вызова подпрограммы. Локальные переменные подпрограммы (параметры) при этом будут уничтожены.
Вызов подпрограммы без параметров все равно должен включать в себя пустые скобки ()

THREAD (thread_name, [init_state]) . END_THREAD — описывает дочерний поток

thread_name — имя потока
init_state — начальное состояние, где 1 — означает рабочее, 0 — приостановленное; необязательный параметр, значение по умолчанию — 1

Управление потоком

SetThread (thread_name, state) — меняет состояние дочернего потока

thread_name — имя потока
state — задаваемое состояние

Значения state

0 — поток ставится на паузу
1 — поток продолжает выполнение с места, где был остановлен
2 — поток ставится на паузу, при этом при повторной его активации он начинает выполняться с начала, независимо от того, на каком этапе он был остановлен

Данный простейший пример показывает одновременную работу трех потоков: родительского и двух дочерних. Все они «тикают» с разным интервалом, однако, не мешая друг другу.

Как пользоваться Clickermann — простой пример

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

Запись сценария

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

Запись сценария

После того как необходимо запись остановить, нажмите на синий квадрат.

Если вы перейдет в редактор программы то там будут тысячи строк с функцией move. Это записываются движения мыши. В настройках снимите галочку «записывать движения мыши». Теперь код будет намного компактнее.

Программируем сценарий

В примере будет показан скрипт для очистки корзины.

Перед написанием программы необходимо продумать ее алгоритм. Необходимо кликнуть по корзине правой кнопкой и из контекстного меню выбрать пункт «очистить корзину», затем подтвердить удаление. Теперь, когда знаем последовательнось действий, запрограммируем этот пример.

    Запускаете программу Clickermann. В разделе скрипт перейдите в «Редактор».

Сохраните программу, чтобы скрипт могли воспроизводить в будущем. Чтобы запустить программу нажмите зеленую кнопку PLAY.

Циклы в Clickermann

Существует по крайней мере 3 способа зациклить сценарий в Кликермане.

Например, есть следующий сценарий, который нужно повторить 30 раз.

1. Цикл FOR – выполняется определенное количество раз

2. Цикл WHILE – выполняется, пока выполняется условие

Этот цикл выполняется пока верно условие.
Например есть такая задача: искать красный пиксел на экране. После нахождения цикл должен прекратиться, а скрипт продолжит работу дальше.

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана ⁠ ⁠

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

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Начнём с подпрограмм, что это и зачем они нужны.

Подпрограмма это список действий, который будет часто повторяться в вашей программе, но не обязательно подряд. Например, мы используем такие действия (пока напишем в псевдокоде):

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

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

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

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

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

SUB(имяФункции) — определяет начало функции, общепринято все функции выносить на самый верх программы, либо выносить в отдельный файл, но это необязательно и больше для красоты, расскажу об этом в одном из следующих постов.

Имя функции определяете вы сами, старайтесь задать такое, чтобы вам было понятно, что делает эта функция, например ставит лайки в вк — VKLikes, ищет в эксель нужную строку — ExcelFindString и т.д.

END_SUB — соответственно обозначает конец вашей подпрограммы(функции).

Теперь вы можете в любой момент вызвать вашу функцию таким образом — имяФункции()

Почему это удобно? Представим, что вам потребовалось ставить лайк не на каждый пост, а на каждый второй, теперь вам придется проходить по всей вашей программе, искать каждый момент где вы ставите лайк и менять там, добавлять ещё одну прокрутку, если же это у вас выведено в отдельную функцию, вам достаточно поменять это один раз в одном месте. Удобно? а то! Ну и отдельный плюс — сокращение вашего кода. Совсем недавно я изменил свой скрипт, изначально я писал его просто как список действий, без подпрограмм, это заняло у меня 2200 строк, после *рефакторинга скрипт стал занимать 700.

*рефакторинг — процесс улучшения кода без внесения новых возможностей.

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

Вот участок моей реальной программы:

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Да, ваш скрипт может целиком выглядеть как вызов различных функций, это нормально и даже очень хорошо. Я передаю в функцию TWPersonalPost переменную, которая имеет значение от 1 до 10, в зависимости от этого, функция открывает тот лист Excel с которого мне нужно скопировать информацию:

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Тогда в названии вашей программы нужно указать переменную, например SUB(VKlikes, $name)

и внутри подпрограммы с помощью команд IF или SWITCH сделать различные действия в зависимости от значения переменной.

Анализ экрана

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Анализ экрана позволяет добавить в вашу программу ту самую вариативность исполнения, программа будет менять исполнение действий в зависимости от происходящего на экране (вот мы и добрались до создания собственного искусственного интеллекта. ну почти)

для этого clickermann представляет нам множество функций, главной из которой является GETSCREEN.

GETSCREEN — делает снимок экрана и помещает его в буфер для анализа, буквально это print screen. Мы можем сделать как снимок всего экрана, так и снимок определенной области, зачем? Ну это немного ускоряет выполнение скрипта, ведь анализировать часть проще чем весь экран. Во вторых на всем экране могут быть похожие элементы или пиксели такого же цвета, которые помешают нам. Для этого необходимо в скобочках указать координаты двух углов, верхнего правого и нижнего левого. Например так GETSCREEN(649, 473, 883, 631).

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Тогда в буфер сохранится выделенный красным криво-прямоугольником участок. Ну например если мы хотим нажать одну из этих зеленых кнопок, и мы знаем что они всегда находятся в этой области.

Хорошо, мы сохранили изображение, как его проанализировать?

IF_PIXEL_IN — ищет пиксель заданного цвета в снимке, и возвращает его координаты. Обязательно нужно указать координаты (если вы сделали снимок области, указываем такие же координаты, что и для GETSCREEN) и цвет искомого пикселя. В коде это выглядит так:

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

$_return1 \ $_return2 — переменные созданные самой программой, в них лежат координаты (по Х и по Y) для первого найденного пикселя такого цвета в этом участке изображения. Мы можем проделать любые действия с ними, например нажать левой\правой кнопкой мыши, остановить\продолжить исполнение программы и так далее. Для этого нужно поставить эти действия между IF_PIXEL_IN и END_IF которое обозначает конец условия, также как в команде IF.

Откуда мы узнали какой цвет пикселя нам нужно искать? Для этого достаточно навести на нужное место и посмотреть в окно определения цвета clickermann.

Читать:
Как посмотреть кто подключался к компьютеру по rdp

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Оранжевым изобразил указатель мыши в момент создания этого снимка.

Но нужно быть осторожным, многие сайты меняют цвета кнопок при наведении на них, так и здесь на пикабу, кнопка «картинка» не меняет цвет при наведении, а вот видео и текст меняют и при наведении на них мы увидим цвет:

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Как видно, при наведении кнопка побледнела, в отличии от «картинка», кстати @SupportTech, а не баг ли это?))

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

Для этого мы можем пойти простым путём, делаем скриншот экрана одним из следующих способов, в зависимости от вашего просветления:

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Ну разве что последний способ не очень подходит, после чего открываем картинку и уже на ней наводим на кнопку и смотрим её цвет:

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

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

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

наверху у него всегда цвет пикселя

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Теперь мы можем создать проверку, например мы работаем в Excel и браузере, соответственно в браузере сверху нет цвета пикселя Excel, тогда если мы находим такой пиксель — выводим оповещение:

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

SOUND(«имя_файла.wav») — воспроизводит звуковой файл в ваши динамики, давая вам знать о проблеме или например успешном окончании программы. Только .wav файлы. Файл должен находиться в папке с программой clickerman.

Теперь программа позовёт вас, если что-то пойдёт не так и будет ждать. Как вариант можно в действиях указать нажатие левой кнопкой мыши по значку Excel, для его раскрытия и потом ещё одну такую же проверку, в 90% случаев именно из-за лишнего закрытия-открытия окна что-то идёт не так.

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

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Тогда следует использовать анализ экрана по совпадению картинки, а поможет нам функция

IF_PICTURE_IN — ищет образец картинки в сохраненном участке изображения. Только файлы bmp формата, пример:

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Чтобы повысить вероятность нахождения, можно указать % точности совпадения. Например так:

IF_PICTURE_IN (20,20, 300, 300, «somefile.bmp», 0, 90) тогда, 90% совпадения будет достаточно для запуска действий внутри IF.

Как получить картинку формата .bmp?

Есть два способа, самый точный это командой SCREENSHOTEX — сохраняет участок экрана как отдельный файл в папке с программой.

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

и второй способ, включаем режим лупы

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Теперь смотрим на окно лупы в clickermann и наводим на нужное место, нажимаем ALT + G

и скриншот указанный на экране лупы будет сохранен в папке программы внутри папки screens.

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

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

Мы рассмотрели две основные функции для анализа экрана, по пикселю и по изображению. Вы можете ознакомиться с остальными функциями в справке программы, возможно найдете функцию которая больше подходит вам для исполнения вашего скрипта, но эти две на 95% покрывают все потребности.

Автоматизация однотипных действий, ч.3 . Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

301 пост 4.5K подписчиков

Правила сообщества

-Ставьте наши теги, если Ваш пост о программе, приложении или браузере(в том числе о расширениях, дополнениях в нему), его недоработке, баге, обновлении. Это может быть пост — обзор или отзыв.

-При возникновении споров относитесь с уважением друг к другу, а так же приводите аргументы.

Разрешено всё, что не запрещено правилами Пикабу.

А подскажите, какие функции нужны что бы сделать так:

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

Это можно как-то на горячую клавишу вывести? Например, ввели текст, нажали «энтер» и он пошёл дальше.

Делать проверку через анализ экрана сильно замороченно, я уверен, что это можно как то проще сделать.

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

Это очень круто

В пятницу познала дзен с битриксом, всего-то 200 правил для купонов с 1 купоном создать.

В субботу поняла, что можно использовать ваш совет про кликер, вручную вставляя в буфер обмена данные

Сейчас увидела ваш пост и думаю — осилить и сделать, чтобы он вообще сам брал «на строчку ниже».

Да будет завтра битва! 😉

Ответ на пост «Как автоматизировать однотипную, монотонную работу бесплатно и без навыков программирования»⁠ ⁠

Эх, сколько раз меня выручала автоматизация! Вспомнил тут пару случаев. (если что то использую скрипты в AutoHotkey (AHK)).

Первый был когда еще в органах работал. Начальство придумало — а давайте все фабулы дел вносить в базу данных. При этом база данных не воспринимала копировать-вставить (что тупо), но база не публичная и вход через матюки и старый интернет эксплорер, так что работали как есть. Сидишь, придумываешь как это сократить и потом впечатываешь. Особенно сильно негодовали мы с другом, так как у нас были не перспективные дела (в отделе на каждого следака было по 10 дел в месяц, а у нас с ним напару под сотню, именно чтобы разгрузить остальных). И нам печатать было больнее всего. И тут я вспомнил про АНК и что он умеет печатать из буфера обмена — т.е. для меня это было копировать-вставить, а база воспринимала это словно я напечатал. Экономия во времени была колоссальная.

Второй момент был в учётке — меня молодого специалиста посадили править табличку учёта личных дел. Табличка была уже не помню в какой проге, но она тоже была с приветом. Там было около 20 000 позиций, где нужно было руками убирать пару символов в начале. И нельзя скопировать никуда (в эксель например), только работать руками. Дурь. Времени начальство выделило 2 дня, типа сиди молодой, правь строчки. Ну я два дня и использовал: 20 минут шаманства со скриптом, и уютное чтение книжки под чаек на этот и следующий день, пока строчки сами себя правят. Помню в середине процесса напарник пришел и запаниковал чего это я не работаю)

Да и мелкие задачи, если их можно автоматизировать, тоже переносятся в АНК. Из того что помню:

— тоже из учётки. Перешла к нам в отдел женщина, которая в работе разбиралась но с пк была на Вы. Очень мне не нравилось что она постоянно просила меня подойти и поставить апостроф, т.к. у неё не получалось (много раз в день, Карл!). На очередную просьбу я просто сделал ей скрипт который этот апостроф ставит по нажатию на Pause, а на клавиатуру напечатал на самоклейке этот апостроф и на эту кнопку наклеил.

— люблю смотреть видео из ютуба, предварительно скачивая их на телефон. Помогал мне в этом сейвфром, который умеет скачивать плейлисты из ютуба (умел по крайней мере пол года назад). Алгоритм такой — проклацивал кнопку «добавить в посмотреть позже» на подписках, потом весь плейлист скачивал, а потом удалял видео из плейлиста. Через месяц повторял. Но однажды ютуб поменял интерфейс и удаление перестало быть удобным — нужно нажать на выпадающее меню, и там уже «удалить из плейлиста». Что ломало мой алгоритм. И снова АНК. Скрипт на четыре кнопки — 1 и 2 запоминают позиции мыши (на выпадающем меню и на пункте «удалить»), третья запускает перемещение и клики мыши, четвертая останавливает скрипт. Итог — вручную делать уже не надо.

— в онлайн игре играл в 9 окон (ходил на рейд в соло в л2, управляя всем из одного) — это не продвинутый бот и пришлось помучаться но в итогесмог отправлять команды в свёрнутые окна не открывая из, было удобно; в другой игре был тупой крафт, где тоже нужно было прокликивать одни и те же места, тоже скрипт сработал.

— часто работаю в премьер про (программа видеомонтажа) и там некоторые удобные функции не реализованны, увы. Но они прекрасно допиливаются скриптом. Те же накидывания эффектов. Приходится переключаться на отдельную панель, имкать там эффект и перетаскивать на слой.Но те кто работал в АЕ с Fx console меня поймет, это можно сделать удобнее — скрипт сам делает все эти действия, еще и за секунду. Или еще пример. Часто приходится повышать уровень громкости, и это однотипное движение, особенно если видеофрагментов под сотню. Все вместе тоже нельзя — автоматика выровняет по самому громкому кусочку, что попортит все. Выручает скрипт. И еще полезность — горячие клавиши нельзя повесить на правую кнопку мыши, но иногда хочется — опять скрипт. Сделал перемещение курсора себе на пкм. Он еще и щупает что лежит под курсором и если там кусочек видео, то выпадает меню (как обычно), а если пустота то срабатывает горячая клавиша.

— надо было отстабилизировать много фрагметов видео. Алгоритм следющий — выделяем фрагмент, набрасываем на него стабилизатор, жмем «анализ», ждём пока пройдет анализ (каждый раз разное время, зависит от длинны кусочка видео), и переходим к следующему кусочку. И так пару сотен кусков. С коллегой решили что лучше потратить время на настройку скрипта и оставить компьютер на ночь чем сидеть руками делать. И помогло что скриптом можно определять открыто ли окно анализа, на что мы и ориентировались.

Если вы подумали, что для того чтобы сделать всё тут описанное нужны навыки програмирования, то вы ошибаетесь. Большая часть примеров была сделана путем копирования скрипров которые записаны в русской документации по программе (прямо напрячься пришлоь только в скрипте для игры). Да и на самом деле сейчас есть много других программ, в которых даже не нужно ничего писать текстом, записывай действия и все (как в оригинальном посте).
Поэтому помните, что автоматизация это бро. Иногда стоит потратить время на обдумывание однообразной задачи и попытки её автоматизировать.

Похожие статьи