В Mac OS X встроена прекрасная утилита для автоматизации некоторых действий пользователя под названием Automator. Увы, Microsoft в свою сверхпопулярную ОС ничего подобного пока что не добавила. Что же, попробуем найти подходящую замену, дабы автоматизировать ряд рутинных операций и сэкономить тем самым столь драгоценное время

Материал приведен исключительно в ознакомительных целях. Если же вы собираетесь воспроизводить действия, описанные ниже, настоятельно советуем внимательно прочитать статью до конца хотя бы один раз. Редакция 3DNews не несет никакой ответственности за любые возможные последствия.

Современные ОС донельзя напичканы всевозможными встроенными функциями для облегчения жизни конечных пользователей. Функций этих настолько много, что уже который год с полок книжных магазинов не сходят мануалы в духе «Как сделать себе хорошо для чайников. Издание 27-е, дополненное и исправленное». Увы, большинство пользователей не читает даже таких книг и для каждой, порой очень простой, задачи сразу же кидается искать какую-нибудь готовую утилиту. Это, в общем-то, нормальный подход, но ведь для массового изменения размера фотографий люди часто ставят никак не меньше чем Adobe Photoshop. Ну а как иначе-то? Несолидно ведь, правда?

Хотя для многих совершенно рутинных задач можно было бы просто взять и написать если уж не программку (это действительно дано не всем), то маленький скрипт. Благо в любой уважающей себя ОС испокон веков поддерживались bat/sh-скрипты или имелись интерпретаторы простых для освоения языков программирования вроде Basic или Perl/Python. Для той же Windows есть совершенно чудесный инструмент PowerShell. Лень вникать, а потом ещё и набирать что-то руками? Хорошо, давайте попробуем обойтись без этого и рассмотрим в порядке увеличения сложности несколько бесплатных программ для автоматизации в Windows. Перед этим рекомендуем ознакомиться с большим обзором подобных утилит, а также не преминуть попробовать ещё одну маленькую, но очень мощную программу.

Action(s)

Action(s) — относительно молодой проект, который хоть как-то похож на оригинальный Automator. Он может работать как в среде Windows, так и в Mac OS X. Для его работы необходима Java-машина, последнюю версию которой надо скачать здесь. Для установки самого приложения потребуется зайти на домашнюю страницу проекта и кликнуть по кнопке Launch. Загрузится файл actions.jnlp, который и надо будет запустить — это установщик, который скачает последнюю версию Action(s) из Сети. При первом запуске надо будет дать разрешение на работу программы и поставить галочку «Доверять этому издателю». Также можно сразу же скачать дополнения к Action(s) с этой странички и установить их, просто дважды кликнув и дождавшись, когда программа отрапортует, что дополнение установлено и с ним можно работать. Установили всё что нужно? Замечательно — перезапускаем приложение и начинаем знакомиться с ним плотнее.



Интерфейс программы разделён на две части. С левой стороны имеется библиотека действий и переменных, а с правой — рабочая область. Логика работы Action(s) проста — мы добавляем простым перетаскиванием из библиотеки в рабочую область нужное нам действие и настраиваем при необходимости его параметры. Результат работы одного действия, то есть его выходные данные, являются входными данными для следующего действия. В итоге у нас получается этакий кортеж из действий. Например, на выходе мы получаем список файлов, на следующем шаге мы их можем скопировать, переместить, заархивировать, распаковать и прочее.



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



Также можно спокойно перетаскивать действия и менять их последовательность в пределах рабочей области. При попытке добавить действие, которое требует входных данных, но их ещё нет, Action(s) предложит добавить в предыдущие шаги необходимые действия. Для большинства действий надо также настроить параметры — указать файлы, задать шаблон имени и так далее. Если вы не хотите жёстко задавать их, то во многих случаях можно просто поставить галочку Show when running the workflow. В этом случае при выполнении действия пользователя попросят указать нужные параметры — например, выбрать список обрабатываемых файлов. В общем, для быстрого понимания лучше всего просто скачать программу и потренироваться «на кошках» — каких-нибудь некритичных данных.



Что касается переменных, то тут всё просто — их можно использовать в качестве входных данных или параметров, а также для выполнения некоторых действий. Их можно как задавать вручную, так и получать или генерировать в ходе работы. Чтобы добавить переменную, перетащите её в рабочую область. Потом её можно задать, к примеру, в качестве имени файла — надо будет также просто перетащить её в нужное поле. Правда, частенько программа «сходит с ума» — подвести курсор к нужному полю тяжело, так как оно мечется вверх-вниз. Также надо следить за тем, что именно выдаёт или получает переменная. Например, Current Date при попытке использования в качестве имени файла выдаёт полную информацию о дате, времени (с двоеточием в качестве разделителя!), часовом поясе etc. Естественно, попытка создать файл с двоеточием в имени закончится крахом. Приходится использовать обходной путь — добавлять действие для переименования файла, указывать в качестве источника имени эту переменную и уже вручную задавать корректный формат выдачи.



Для лучшего понимания рассмотрим два примера. Посмотрите на скриншот выше. Этот кортеж выполняет следующую последовательность действий: делает скриншот с задержкой в 10 секунд и уведомлением пользователя об этом, добавляет к имени получившегося jpeg-файла текущую дату и время, а затем переходит к первому действию. И так шесть раз подряд. Готовые скриншоты попадают в папку screenshots. Это простейший пример автоматизации рутинной операции. Следующая «программа» чуть сложнее.



Она предлагает выбрать из папки нужные скриншоты, копирует их в другую папку (оригиналы мы сохраняем на всякий случай и работаем с копиями), слегка снижает качество изображений, упаковывает полученные картинки в архив, переименовывает архив, заливает его на FTP-сервер, считает MD5-сумму от этого архива, записывает её в текстовый файл, который тоже заливается на сервер. Этот пример хоть и надуманный, но попробуйте-ка повторять такую операцию по нескольку раз в день вручную — гарантированно надоест очень быстро. Более подробную документацию на английском языке и примеры работы в Action(s) можно найти в соответствующем разделе сайта, а также на форуме.

Sikuli

Этот инструмент с непривычным русскому уху названием обладает одной необычной особенностью — он способен распознавать по шаблону элементы на экране (кнопки, полосы прокрутки, выпадающие списки и так далее) и работать с ними. Программа также использует Java-машину. Если говорить точнее, то она представляет собой расширенный вариант реализации языка Python — Jython. С одной стороны, это даёт гораздо больше возможностей по написанию скриптов. С другой стороны, вам придётся хотя бы очень поверхностно ознакомиться с этим языком программирования. Впрочем, для простейших последовательных скриптов ничего изучать не надо.



Итак, скачайте утилиту отсюда (поддерживается Windows, Mac OS X и Linux). Можно обойтись portable-версией. Проект всё ещё находится в стадии разработки, поэтому программа иногда может падать, зависать и вообще вести себя неподобающим образом. В таком случае можно скачать либо старую стабильную версию, либо, наоборот, самую свежую. Популярные функции для работы с клавиатурой и мышью вынесены в панель слева. С правой стороны вписываются команды. В самом общем случае работа с утилитой проста до невозможности. Выбираете действие слева, программа предлагает выделить участок на экране, к которому будет применено это действие (клик, двойной клик, ввод текста и так далее), а потом сама же вставляет готовую команду в редактор. Таким образом, можно, к примеру, задать простую последовательность действий, как на скриншоте ниже.



Этот маленький код сворачивает все окна, открывает главное меню, переходит в панель управления, ну и так далее. В результате сетевой адаптер будет получать IP-адрес автоматически. Естественно, что на другом компьютере такой скрипт уже не сработает, хотя бы потому что Microsoft пока не запретила менять оформление Windows. Отсюда и ряд потенциальных проблем при работе с Sikuli. Распознавание участков изображения хоть и хорошее, но не идеальное, да и занимает порядочно времени. Программа может ошибиться и кликнуть не туда, куда надо, или, не найдя нужный кусок на экране, просто остановиться. В следующем примере мы немного улучшим работу скрипта.



Это небольшой «бот» (если это можно так назвать) для одной из браузерных Flash-игр. Делает он одну вещь — пытается найти хотя бы два одинаковых и стоящих рядом элемента и кликнуть по ним. Никакого ИИ тут, конечно, не предусмотрено. Но здесь есть несколько важных вещей. Во-первых, для ускорения процесса распознавания нам нужно исследовать не весь экран, а только одну область поменьше, где сама игра и работает. Для этого используется конструкция with — вписываем её в редактор кода, кликаем по кнопке «Выделить область» и мышью ограничиваем ту часть экрана, где надо будет вести поиск. Sikuli запоминает только абсолютную позицию прямоугольного выделения. Если вы, к примеру, промотаете страницу, то она уже ничего не найдёт.



Во-вторых, обратите внимание на форматирование кода. Команды более глубокого уровня вложенности, чем предыдущий, обязательно отбиваются пробелами или табуляцией. Команды же одного уровня выполняются последовательно, если не указано иное. К этому надо привыкнуть. Шаблоны для поиска на экране можно копировать и перемещать так же, как обычный текст. Для того чтобы «подкрутить» распознавание, надо кликнуть по шаблону. На вкладке «Предпросмотр совпадений» с помощью ползунка «Схожесть» можно отрегулировать строгость поиска. Чем выше её уровень, тем более точное совпадение с шаблоном программа будет искать, но и тратить при этом больше времени и ресурсов.



Есть смысл отрегулировать этот параметр в зависимости от задачи. В этом же окне Sikuli сразу показывает, сколько элементов она нашла при текущем уровне фильтрации. В нашем примере с игрой понижение точности положительно сказывается на числе найденных элементов. В некоторых случаях это будет только мешать. Также среди параметров есть «Смещение цели» — места, которое будет искаться и над которым будет произведено соответствующее действие (клик, ввод). Для повышения точности его тоже надо иногда корректировать.



Скрипт в примере с игрой не оптимизирован, и его можно сильно улучшить. Например, сделать так, чтобы он запускался не единожды, а сто раз подряд — добавить в начало команду for x in range (1,100): и отбить пробелами или табуляцией все нижеследующие строки. Можно обрамить кусочки по поиску конкретного элемента конструкцией try except. В общем, улучшать его можно до бесконечности. Для дальнейшего знакомства с Sikuli полезно изучить документацию, посмотреть деморолики, а также окунуться в Jython. Как и в случае с Action(s), вся информация представлена на английском языке.

Заключение

Мы рассмотрели всего пару универсальных и простых в освоении программ для автоматизации. На самом деле их гораздо больше. Часть из них рассмотрена в материалах, ссылки на которые есть в начале статьи. Существуют и гораздо более продвинутые и удобные продукты вроде AutoMate, Automation Anywhere или RoutineBot. Но они стоят непомерных для наших задач денег да и предназначены в большей степени для профессиональных тестеров. Если же вы всерьёз заинтересовались темой автоматизации, то рекомендуем обратить внимание на бесплатную программу AutoIt — это не очень сложный, но в тоже время мощный скриптовый язык, подходящий в том числе и для автоматизации. А в русском сообществе AutoIt есть множество примеров и масса другой полезной информации. Альтернативная ветвь эволюции — бесплатные системы HiAsm и «Алгоритм2». Обе громко заявляют, что вы сможете программировать без написания хоть единой строчки кода. Так-то оно так, но это скорее кодогенераторы, результат работы которых всё равно отдаётся на растерзание компилятору. А значит, ошибки неизбежны, и при таком подходе устранить их будет не всегда просто. Как именно поступить? Что дальше осваивать? Выбор за вами. Удачи!

Если вы хотите предложить тему для нашей рубрики, то оставляйте свои комментарии на форуме. А ещё мы ищем авторов для нашей замечательной рубрики — подробности в той же теме на форуме.