• В 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». Обидві голосно заявляють, що ви зможете програмувати без написання хоч єдиної рядки коду. Так то воно так, але це швидше кодогенераторы, результат роботи яких все одно віддається на розтерзання компілятору. А отже, помилки неминучі, і при такому підході усунути їх буде не завжди просто. Як саме вчинити? Що далі освоювати? Вибір за вами. Удачі!
    Якщо ви хочете запропонувати тему для нашої рубрики, то залишайте свої коментарі на форумі. А ще ми шукаємо авторів для нашої чудової рубрики - подробиці в тій же темі на форумі.