Автоматизация однотипных действий, ч.2
Всем привет, с одной стороны я знал, что желание избавиться от однотипного труда довольно популярно, но всё же не ожидал такого отклика. Спасибо за ваши отзывы.
Ссылка на первую часть
А теперь продолжим изучать создание сценариев действий в Clickermann.
Для того, чтобы вы могли начать простую автоматизацию уже сегодня, изучим возможность записи своих действий и их использования, а также общие нюансы создания скрипта.
Прежде всего изучим горячие клавиши запуска и остановки программы. Возможно те из вас, кто уже попробовал запустить свой скрипт столкнулись с проблемой его остановки, ведь он перехватывает управление мышкой и дотянутся до кнопки "стоп" становится непросто.
Для этого есть следующие комбинации:
Alt + A – Запуск сценария;
Alt + A – Пауза сценария (после его запуска);
Alt + S – Полная остановка;
Alt + R – Начать запись сценария;
Перед созданием сценария, вам необходимо подумать, при каком окне и размерах окна, будет стартовать ваша программа. Например если выработаете в сочетании окон Word, Chrome, Excel и запишите свой сценарий при таком расположении значков:
То при таком, она уже работать не будет(если не внедрять проверку с анализом экрана, но об этом позже):
Тоже самое касается размера окна, поэтому я советую просто открыть все окна в полноэкранный размер и записывать скрипты исходя из этого.
После того как вы определитесь с этим, следует также учесть эти стартовые порядки и размеры при каждом следующем запуске скрипта, например сначала вы открываете все файлы и только потом запускаете скрипт.
Немаловажный момент касается цикличности исполнения. Например если ваш скрипт подразумевает повторы, условно:
1) Открыть браузер
2) Нажать на закладку с адресом сайта
3) Скопировать информацию
4) Занести в таблицу эксель
5) Перейти к п.1
То при следующем открытии браузера уже будет открыта загруженная страница сайта и возможно не будет той закладки по которой вы переходите, соответственно все дальнейшие действия будут неверными, поэтому нам нужно изменить свой скрипт так, чтобы он возвращал все положения окон в их изначальное состояние на старте, например так:
1) Открыть браузер
2) Нажать на закладку с адресом сайта
3) Скопировать информацию
3.5) Закрыть браузер
4) Занести в таблицу эксель
5) Перейти к п.1
Особенностью исполнения скриптов является также то, что он запускается снова после исполнения. То есть вы можете написать скрипт длинною в час, который сделает всю нужную работу, когда он дойдет до последнего действия и закончит его, программа снова начнет исполнять его с первой строчки, чтобы этого не было, достаточно добавить большую задержку в конец скрипта, например так:
Тогда у вас будет достаточно времени, чтобы подойти и отключить скрипт.
Теперь о записи действий, у неё есть неоспоримый плюс - скорость и простота, достаточно включить запись действий (Alt + R) и один раз в ручную совершить эти действия, после чего остановить запись. Тут следует учесть, что запись идёт непрерывно по всем движениям мышки, я записал 10-ти секундные движения, у меня получилось следующее:
Как вы понимаете отредактировать такое будет невозможно, но если вам не нужны просто движения мышкой без кликов и действий, то открываем настройки и в разделе "Интерпретатор" убираем галочку "Записывать движения мыши" и жмём "применить".
Теперь наш скрипт получился намного короче, но разобраться в нём всё ещё довольно сложно:
Также запись не позволяет вам использовать такие функции как анализ экрана, анализ текста скопированного в буфер, какие либо вариации в сценарии в зависимости от происходящего.
Поэтому данный способ идеально подходит для коротких, не вариативных действий. Он позволяет без помощи редактора и соответственно без знания команд производить простые манипуляции.
Далее мы начнём углубляться в настоящее программирование своих сценариев.
Представим, что нам нужно совершить выполнение какой либо последовательности действий несколько раз. Например обработать все входящие письма пришедшие нам на почту. При этом эта последовательность не является всей нашей программой, например наш скрипт проверяет почту, но основная его цель - копировать данные из одной таблички excel в другую. Как бы вы написали этот код?
Вероятно так (напишем псевдокодом):
Работает? Да, но выглядит не очень, трудно читать и понимать.
Чтобы внести порядок в наш скрипт, мы будет использовать переменные и циклы.
Переменная - своего рода корзина, куда мы помещаем значение. Это может быть слово, буква, но чаще всего число. С этим числом можно производить арифметические действия, сравнивать его с чем либо и на основе этого, поведение нашего скрипта будет изменяться.
Цикл - выделение участка кода в отдельный блок, с целью его многократного использования.
Допустим, мы точно знаем, что нам каждый день приходит 5 писем, тогда мы можем сделать так:
ВАЖНО: общепринято выделять внутренности цикла отступом для пущей красоты и удобства понимания. для этого выделяем участок кода внутри цикла и нажимаем TAB или пробел. Вуаля, вы восхитительны.
У нас появляются новые команды:
DEFINE - объявление \ создание переменной, в скобочках указываем её название и через запятую значение, название всегда начинается со значка доллара, то есть правильно называть переменные $counter, $x, $letter, неправильно - counter, _z, $переменная.
WHILE - команда открывающая цикл, в скобочках пишем логическое выражение, например сравниваем переменную с другим числом. Сравнить можно так:
== "равно"
>= "Больше или равно"
<= "Меньше или равно"
> "Больше"
< "Меньше"
пока условие будет выполняться, блок кода внутри цикла будет исполняться, на нашем примере он исполнится 5 раз. Давайте отследим логическую цепочку, в первый раз переменная VAR заходит в проверку цикла со значением 0.
0 меньше 5? Да! - выполняем код
Затем мы встречаем команду:
INC - увеличить значение переменной, в скобочках указываем какую переменную и на сколько увеличивать ($var, 1). Поэтому наша переменная увеличивается на 1 и становится один. Без увеличения переменной мы получим бесконечный цикл и бесконечное повторение действий внутри цикла.
после чего встречаем новую команду:
END_CYC - противоположность команде while - закрывает цикл. таким образом каждый раз при соответствии условий будет исполняться всё что между этими двумя командами.
Вернёмся к нашей переменной var, она увеличилась на 1 и снова отправляется на проверку соответствия условию.
1 меньше 5? Да! - выполняем код. Увеличиваем переменную до 2.
2 меньше 5? Да! - выполняем код. Увеличиваем переменную до 3.
3 меньше 5? Да! - выполняем код. Увеличиваем переменную до 4.
4 меньше 5? Да! - выполняем код. Увеличиваем переменную до 5.
5 меньше 5? Нет! - теперь цикл больше не будет исполняться, действие программы пойдет к первой команде после цикла (ниже чем END_CYC ).
Таким образом наш код стал меньше, красивее и легче в редактировании, ваш босс увидел как быстро вы принимаете задания и стал давать вам 10 заданий, соответственно приходит 10 писем, в прошлом коде вам бы пришлось копировать и вставлять, считать сколько раз вы уже вставили, не лишнего ли теперь? А сейчас достаточно поменять условие на WHILE($var < 10) и вот, всё будет точно работать 10 раз.
Это вы, сравниваете количество ваших новых задач на столе по высоте пальца
Хорошо, а что на счёт вариативности кода? Если дальнейшие действия зависят от воли случая?
Для этого у нас есть операторы IF и SWITCH
IF - оператор сравнения, такое мы уже с вами видели в скобочках цикла WHILE. Оператор IF проверяет соответствие условию и если оно верно, выполняет действия в своем блоке кода.
Рассмотрим пример:
Мы создаем переменную, кладем в неё значение 2. Оператор IF проверяет, равна ли var двойке, если да воспроизведется звуковой файл, если нет, пропустит эту строку. Конец блока кода оператора IF определяется оператором END_IF
Хорошо, мы разобрались с одним вариантом, но как быть если у нас два варианта, разных действий. Для этого применяется конструкция IF - ELSE
Теперь оператор IF проверяет на соответствие переменной двойке, если она равна 2, воспроизведется файл end.wav, при любом другом значении переменной var будет воспроизведен файл start.wav
Бывают случаи, когда нам мало двух условий, например вы публикуете фотографии в 10 социальных сетях, под каждую социальную сеть, вы подготовили разные фотографии и положили их на 10-ти разных листах в документе excel, как сделать так, чтобы в нужную социальную сеть, попадало нужное фото?
SWITCH - оператор множественного выбора. В данном примере вы проверяем переменную post в зависимости от её значения от 1 до 10 открывается соответствующая страница документа. Данный оператор содержит в себе операторы CASE и END_SWITCH. Оператор Case() содержит в скобках значение переменной, при которой именно его действия будут выполнятся,своего рода это дверь, которая открывается тогда, когда переменная(ключ) подходит к его условию(замку) ну и END_SWITCH заканчивает блок кода выбора действий.
Также можно заметить оператор DEFAULT который срабатывает, если переменная $post содержит в себе значение не подходящее ни под один CASE.
Таким образом, применяя IF и SWITCH вы можете создать по настоящему вариативную программу и уже начинать называть себя программистом =)
В следующем посте, расскажу о подпрограммах и удобстве которое они дают, как производить анализ экрана и на основе этого выбирать действия. А пока небольшое домашнее задание, создайте скрипт который в готовый файл excel пишет числа по порядку и скрывает строку.
Работать это должно примерно так:
Для этого нам потребуется функция:
KEYSTRING - имитирует ввод с клавиатуры переданного ему значения. Можно вводить числа, например KEYSTRING("2") или строки KEYSTRING("Hello World") или переменные KEYSTRING($var) обратите внимание, в случае переменной кавычки внутри скобок не нужны. Ваши решения можете писать тут же в комментариях и подсмотреть решения других, если что-то не получается, но настоятельно рекомендую не делать этого сразу, а попытаться решить самостоятельно.