Предыстория
Каждый из нас когда либо приходил к мысли о необходимости автоматизации тех или иных действий в системе. Лично меня эта мысль посетила когда я пытался объяснить брату, как переставлять модем в режим роутера и обратно (в подробности, зачем было нужно постоянно менять режимы, вдаваться не буду). Т.к. последовательность действий была довольно неочевидна, да ещё и требовала запоминания некоторых данных (например ip-адреса роутера), решил процесс автоматизировать, затратив на это как можно меньше усилий. Немного погуглив нашёл довольно интересный проект SIKULI. Он позволяет автоматизировать управление GUI под основными ОСями, и при этом вам даже не придётся учить новый язык! Тех, кому интересен визуальный скриптинг, прошу под кат.
Что за зверь такой
Сразу встаёт вопрос, почему именно в этот блог я поместил этот топик. Всё просто: Sikuli — это визуальный Python! Т.е. Вы всегда можете использовать синтаксис Питона.
Но лучше всего этот проект опишут сами разработчики: «Sikuli — это визуальная технология автоматизации и тестирования графического интерфейса используя изображения (скриншоты). Sikuli включает: Sikuli Script, API визуального скриптинга для Jython, и Sikuli IDE: среда разработки для лёгкого написания визуальных скриптов скриншотов. Sikuli Script автоматизирует всё, что вы видите на экране, без использования внутренних API системы. Вы можете программно контролировать web-страницы, приложения Windows/Linux/Mac OS X, или даже приложения на iPhone или Android, запущенные в эмуляторе, либо через VNC». Вот такой мощный и, как станет видно ниже, простой скриптовый язык получается.
Ближе к делу
Саму IDE я рассматривать не буду, т.к. это уже сделал за меня товарищ KL7 в своём топике Sikuli — program ANYTHING using GUI screenshoots. Я же приведу конкретный пример, как я автоматизировал смену режимов роутера. Все дальнейшие манипуляции производятся в Sikuli IDE. Итак, приступим.
Первое, что нужно сделать — это запустить браузер, через который будем редактировать настройки модема. Т.к. Crome у меня установлен в папке пользователя и путь к нему содержит кириллицу, а Sikuli такие пути, как я понял, поддерживает плохо, то в качестве браузера я использовал Opera. Для управления приложениями в нашем распоряжении есть три функции: openApp(), switchApp(), closeApp(). Я буду использовать switchApp(), т.к. браузером кто то уже может пользоваться, в таком случае создавать новый не имеет смысла.
Далее создадим новую вкладку. Для этого нужно щёлкнуть в браузере по соответствующей кнопке. Чтобы сделать это программно, нужно вызвать функцию click(). выбираем её в списке функций справа, среда свернётся, предоставляя нам возможность выбрать ту область, по которой необходимо выполнить щелчёк. Обводим кнопку создания новой вкладки. в итоге наша функция в окне редактора будет выглядеть следующим образом:

Сразу обратите внимание, как задаётся куда и что печатать. В этом помагает функция type(), которой можно передать как просто текст, так и текст с изображением строки, куда его писать.
Далее иногда выскакивает, а иногда нет (в зависимости от того, закрывали вы браузер или нет с момента прошлого входа в настройки роутера), окно запроса логина и пароля. Отличный случай продемонстрировать, что кроме визуального скриптинга Sikuli поддерживает ещё и Python! Итак, проверку, выскочило ли окно, я организовал следующим образом:

Далее следует череда функций Click(), только в одном месте прерывающаяся функцией wait(10), из-за того, что браузеру необходимо перезагрузить страницу.
Напоследок я закрываю вкладку со свойствами роутера, вызывая функцию низкоуровневого упарвления клавиатурой: keyDown(Key.CTRL + «w»)
Послесловие
В итоге мы имеем довольно мощный инструмент автоматизации рутинных действий. Подробнее о нём вы можете почитать на официальном сайте проекта. Удачных вам скриптов!