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

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

Часть №1, Интерфейс, простые действия.
Часть №2, Запись действий, циклы, переменные, условия.

Автоматизация однотипных действий, ч.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.

Автоматизация однотипных действий, ч.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 .  Подпрограммы и анализ экрана Автоматизация, Автокликер, Анализ, Длиннопост

Программы и Браузеры

595 постов5.1K подписчиков

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

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

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

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

Вы смотрите срез комментариев. Показать все
3
Автор поста оценил этот комментарий
1) Совсем необязательно держать все файлы сценариев, картинок, звуков в папке со скриптом - поддерживаются относительные пути (при этом корневой каталог - папка с основным скриптом). Пример - "screens\pict.bmp", где screens - папка с картинками. Для ухода на уровень вверх команда "..\путь к файлу". Но, опять же, интерпретатор кликермана всё содержимое подключаемых файлов пихает в основной скрипт, и поэтому пути в подключаемых файлах должны идти так, как будто они находятся в папке со скриптом.
2) Неочевидная особенность функции GETSCREEN - в графическом буфере анализа обновляется только область, которая указана в функции, всё остальное либо остаётся без изменений (если до этого момента её вызывали), либо заливается черным цветом (при первом вызове). Проверить это можно, выполнив следующий скрипт:
GETSCREEN
SCREENSHOT
WAIT(10) // за время задержки перетаскиваем что-либо в область (0, 0,400,400)
GETSCREEN(0, 0,400,400)
SCREENSHOT
HALT
Затем глянуть скриншоты - тот квадрат, который был указан, обновился, а остальная часть осталась без изменений.
3) Надо было бы это в первом посте написать - каждая функция в кликермане пишется с новой строки, в одну строку несколько штук вписать не удастся.
4) Ну и при выносе части скрипта в отдельные файлы надо следить, чтобы не было одинаковых переменных, так как #include "miss.cms", к примеру, пихает всё в основной файл, и если таких модулей много, то могут быть конфликты
раскрыть ветку (13)
3
Автор поста оценил этот комментарий
Совсем необязательно держать все файлы сценариев

Да, но старался упростить, обычному пользователю это не особо важно.

Неочевидная особенность функции GETSCREEN

Да, поэтому написал, что getscreen нужной области надо обновлять каждый раз перед анализом экрана

Надо было бы это в первом посте написать
Ну да согласен) Для меня это было слишком очевидным, даже не подумал.
Ну и при выносе части скрипта

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


За дополнение спасибо)

раскрыть ветку (12)
Автор поста оценил этот комментарий
@L4rover, напиши мне пожалуйста на почту saveligp33@gmail.com если есть возможность помочь мне в реализации одного сценария для clickermann за вознаграждение
раскрыть ветку (2)
Автор поста оценил этот комментарий
Отписался, Если скрипт простой помогу бесплатно, если сложный смогу только советы дать ибо времени свободного почти нет
Автор поста оценил этот комментарий
Что то с почтой не то, тут напишу, вот в группе можно найти кого нибудь кто сможет сделать
https://vk.com/clickermann
Автор поста оценил этот комментарий

Или это у меня какой-то бред открывается почему-то.

раскрыть ветку (7)
Автор поста оценил этот комментарий
Нет, действительно ссылка перестала вести на официальный сайт, ерунда какая-то. Попробуй скачать здесь https://clickermann.ru/
раскрыть ветку (6)
Автор поста оценил этот комментарий

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

раскрыть ветку (4)
1
Автор поста оценил этот комментарий
Я всегда качал с той ссылки что в посте, но её видимо подменили или чего, вирус логично что ругается, программа перехватывает управление мышкой и клавиатурой все таки))

Если терпит завтра могу просто свою папку с программой архивом на облако залить и ссылку дать
раскрыть ветку (3)
1
Автор поста оценил этот комментарий

Здрастьте за софтинку подзабыли?

Автор поста оценил этот комментарий

на сайте freesoft можно сказать чистые файлы, версии 4.13:

64 битная версия https://www.virustotal.com/gui/file/eb695eede056b461b379d505...


32 битная:
https://www.virustotal.com/gui/file/adadb1a6fec9dabbf75d4d78...

Автор поста оценил этот комментарий

Было бы просто замечательно.

Автор поста оценил этот комментарий
Предупрежу вирустотал на clickermann выдёт много красных пунктов: https://www.virustotal.com/gui/file/a4d760a29dcf4bc4a8256cc0... загружал с официального.
Автор поста оценил этот комментарий

А где его можно было бы скачать ? Ваша ссылка какую то дичь показывает. На рутрекере его нет.

Иллюстрация к комментарию
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку