Куперс

Бухучет и анализ

Макрос

iMacros — это программа, которая позволяет автоматизировать и имитировать действия пользователя в браузере. По словам разработчиков, iMacros загрузили 9 миллионов раз, но лишь 240 тысяч юзеров активно используют приложение. То есть лишь 3% из установивших продукт нашли ему применение. И неслучайно. При первом взгляде на документацию сложно разглядеть его удивительные, поражающие воображение возможности. Эта статья откроет их для тебя.

Рис. 1. Начало работы iMacros Другие статьи в выпуске:

Хакер #185. Докажи баг!

  • Подписка на «Хакер»

Установка

Есть два варианта установки iMacros:

  • в качестве расширения (add-ons) для браузера (Firefox, Chrome или Internet Explorer),
  • как отдельное приложение (только для Windows).

В описанных ниже примерах использован iMacros Firefox add-on.

Hello world

Основной прием, которому стоит научиться, — запись действий в браузере и последующее их воспроизведение. Перейдем на вкладку Record на панели в левом нижнем углу экрана и нажмем на кнопку Record Macro. Теперь вобьем в Google «Hello world» и нажмем Enter. Потом кнопку Stop (под кнопкой Record Macro). iMacros сгенерировал код, который можно многократно запускать и редактировать:

VERSION BUILD=7020226 RECORDER=CR URL GOTO=https://www.google.ru/?gfe_rd=cr&ei=Jw5gU4LuF9CWwAPQuIG4Ag TAG POS=1 TYPE=INPUT:TEXT FORM=ID:gbqf ATTR=ID:gbqfq CONTENT=hello<SP>world TAG POS=1 TYPE=BUTTON FORM=ID:gbqf ATTR=ID:gbqfb

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

WARNING

В браузере Chrome не работает треть iMacros-команд (какие — см. документацию). Поэтому лучше использовать Firefox (90% возможностей) или Internet Explorer (наиболее полный функционал).

Работа с данными

Заполнение форм из CSV-файла с данными

Предположим, нам нужно заполнить информацию о товарах интернет-магазина через CMS-админку (конкретный пример написан для Insales). Названия, описания, цены и остатки хранятся в файле CSV. Эту задачу можно мгновенно выполнить с помощью небольшого макроса:

SET !DATASOURCE products.csv ‘подключаем файл CSV (лучше прописывать абсолютный путь) SET !LOOP 4 ‘делаем построчный обход файла и для каждый строки выполняем код, приведенный далее SET !DATASOURCE_LINE {{!LOOP}} ‘открываем страницу добавления товара URL GOTO=http://example.com/newproduct ‘записываем значение первого поля файла CSV в форму для названия товара TAG POS=1 TYPE=INPUT:TEXT FORM=ID:new_product ATTR=ID:product_title CONTENT= {{!COL1}} ‘записываем значение второго поля файла CSV в форму для короткого названия товара TAG POS=1 TYPE=TEXTAREA FORM=ID:new_product ATTR=ID:product_short_description CONTENT= {{!COL2}} ‘третье и четвертое поле — аналогично TAG POS=1 TYPE=INPUT:TEXT FORM=ID:new_product ATTR=ID:product_variants_attributes__price CONTENT= {{!COL3}} TAG POS=1 TYPE=INPUT:TEXT FORM=ID:new_product ATTR=ID:product_variants_attributes__quantity CONTENT={{!COL4}} ‘после ввода всех данных о товаре сохраняем его в каталог TAG POS=1 TYPE=INPUT:BUTTON FORM=ID:new_product ATTR=* // А вот так выглядит products.csv: «Товар 1″,»Опиcание товара 1″,»555″,»7» «Товар 2″,»Опиcание товара 2″,»722″,»13» «Товар 3″,»Опиcание товара 3″,»234″,»9» «Товар 4″,»Опиcание товара 4″,»301″,»11»

Рис. 2. Запись макроса

Извлечение данных из веб-страниц

А теперь представим обратную ситуацию. Когда нужно просмотреть каталог магазина-конкурента и сохранить информацию о товарах.

‘Этот код извлекает текстовое содержимое из абзацев, имеющих атрибут «class», равный «product_description» TAG POS=1 TYPE=P ATTR=CLASS:product_description EXTRACT=TXT ‘А этот сохраняет его в файл SAVEAS TYPE=TXT FOLDER=»C:\» FILE=»product_desc.txt» ‘А вот команда для запуска диалогового окна сохранения картинки и нажатия кнопки подтверждения: TAG POS=1 TYPE=IMG ATTR=ID:product_image CONTENT=EVENT:SAVEITEM ONWEBPAGEDIALOG KEYS={down<SP>2}{tab<SP>1}{enter}

Естественно, весь этот код можно использовать в цикле с динамическими переменными.

Рис. 3. Панель запуска макроса

Вызов iMacros из кода

Любой макрос можно сохранить в файле с расширением iim и использовать в приложениях, написанных на 16 языках программирования. Только надо не забыть установить полную версию (не аддон) iMacros на компьютер или веб-сервер.

Поддерживаемые языки

  • ASP
  • ASP.NET
  • C#
  • C++
  • Delphi
  • FoxPro
  • Java
  • JavaScript
  • Perl
  • PHP
  • Python
  • Power Shell
  • Ruby
  • TCL
  • VBA
  • VBS

WWW

  • Пользователи iMacros для Firefox могут делиться между собой исходниками с помощью закладок Delicious. Подробности здесь: wiki.imacros.net/iMacros_for_Firefox#Bookmarking
  • Полный мануал по iMacros: wiki.imacros.net
  • Сайт производителя: imacros.net

Batch-файлы

Вызов iMacros из батников — наиболее простой и удобный путь автоматизировать их выполнение. Достаточно одной строки для запуска макроса:

«ProgramFiles\iOpus\iMacros\iMacros.exe» -macro «..\..\Macros\Demo\RegExpSearch.iim»

C++

Основная сложность в использовании iMacros под C++ — настройка среды разработки (конкретику по версиям различных сред ищи в документации или спрашивай у саппорта). Принцип работы кода такой же, как в PHP:

IAppPtr app = IAppPtr(__uuidof(App)); Status s = app->iimInit(«», true, «», «», «», cTimeout); s = app->iimPlay(«wsh-extract-rate», cTimeout); // Запуск wsh-extract-rate s = app->iimExit(cTimeout);

Использование JavaScript в макросах

В iMacros можно присваивать переменным результаты выполнения JavaScript-кода c помощью команды EVAL:

SET JSVAR EVAL(«var JSVAR = 45+5; JSVAR;»)

PHP

iMacros можно запускать с веб-сервера, используя PHP-скрипт. Зачем это может пригодиться? Для пополнения базы данных посредством мониторинга информационных сайтов, генерации онлайн-табло результатов тестирования состояния серверов и так далее. Пример вызова макроса, осуществляющего поиск на странице:

<?php $iimobject = new COM(«imacros»); // Обращаемся к компоненту iimRunner (он уже должен // быть предварительно запущен на сервере) $imacrosprocess = $iimobject->iimInit(«-runner»); // Получаем код макроса и слова для поиска // из адресной строки $imacrosprocess = $iimobject->iimSet («-var_keyword», $_GET); $imacrosprocess = $iimobject->iimPlay ($_GET); // Выводим отчет о выполнении макроса (удалось // запустить или нет) echo «iimplay=»; echo $imacrosprocess; // и результаты поиска echo «extract=»; echo $iim1->iimGetLastExtract; $s = $iim1->iimExit(); ?>

Выполнение макросов по расписанию

Для отсрочки выполнения команды на n-е количество секунд существует команда WAIT. Пример:

WAIT SECONDS=10.

Для более сложного планирования выполнения макросов надо прибегать к помощи сторонних языков программирования. Простейшие варианты — batch-файлы + Windows Task Sheduler или PHP + Crontabe.

Рис. 4. Окно редактирования макроса

Direct Screen Technology

Если сайт сделан на Flash, Flex или SilverLight, то к его элементам нельзя обратиться стандартными способами (по идентификаторам DOM-разметки). Необходимо использовать координаты объекта на веб-странице:

‘клик по точке с координатами и ввод текста DS CMD=MOVETO X=455 Y=224 CONTENT={BACKSPACE} текст

С помощью координатной адресации можно даже имитировать drag and drop. Перед записью макроса для Flash-сайта необходимо включить Use Direct Screen Commands в настройках.

Скриншоты

С помощью команды SCREENSHOT TYPE=(PAGE|BROWSER) FOLDER=folder_name FILE=file_name можно сделать скриншот всей страницы, а используя TAG + обращение к элементу + CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT — отдельной ее части.

Тестирование сайтов

С помощью iMacros можно легко написать программу для мониторинга времени реакции на разные действия пользователя. Пример:

‘Загружаем страницу и записываем в бортовой журнал время на ее загрузку URL GOTO=http://example.com/about STOPWATCH ID=PageAbout ‘Вводим имя и фамилию пользователя в формы и замеряем время, затраченное на отправку данных TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:username CONTENT=Ira TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:usersurname CONTENT=Chernova TAG POS=1 TYPE=BUTTON:SUBMIT FORM=ID:SendInfo ATTR=TXT:SendInfo STOPWATCH ID=SendInfo

Результаты измерений сохраняются в Imacros\Downloads\performance_Stopwatch.csv.

Обработка ошибок

По умолчанию в случае возникновения какой-либо ошибки выполнение макроса останавливается. Этого можно избежать, прописав в начале !ERRORIGNORE YES.

Использование прокси-серверов

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

PROXY ADDRESS=127.0.0.1:8888

Альтернативы

  • ZennoPoster
  • Selenium IDE
  • DejaClick
  • UBot Studio

Запись видео

Если ты хочешь запечатлеть лучшие моменты работы iMacros на видео — используй плагин Capture Fox для Mozilla или Screencastify для Chrome.

SRC

В приложении к журналу есть девять шаблонов макросов (с русскоязычными комментами), которые ты сможешь приспособить для решения следующих задач:

  • заполнение полей форм из CSV-файлов;
  • извлечение данных из таблицы в CSV-файл;
  • установка значений в селектах и переключателях (radio buttons);
  • сохранение картинок с сайта;
  • обработка всплывающих JS-диалогов;
  • печать страницы;
  • создание скриншотов;
  • измерение времени на загрузку отдельных элементов страницы и выполнение сценариев;
  • извлечение данных из форм и прочих частей веб-сайта.

В этой статье рассмотрены возможности iMacros, позволяющие решать тривиальные проблемы, с которыми может столкнуться любой IT-специалист или просто активный пользователь инета. Всего же инструмент включает в себя более полусотни команд, обозреть которые в формате журнала невозможно. Поэтому, если ты не нашел здесь ничего, что могло бы облегчить твою рутину в Сети, не отчаивайся и загляни в документацию или на форум imacros.net.

Макросы

Независимо от используемых операционной системы и программных приложений MS Office пользователь часто выполняет одни и те же последовательности команд для многих рутинных задач. Вместо повторения последовательности команд каждый раз, когда необходимо выполнить какую-либо задачу, можно создать макрос (macro), который вместо пользователя будет выполнять эту последовательность. Термин macro произошел от греческого слова, означающего расширенный или растянутый.

Макрос – это программа (в контексте офисного программирования — созданная автоматически), состоящая из списка команд, которые должны быть выполнены приложением.

Основными преимуществами использования макросов являются:

  • повышение точности и скорости работы, поскольку компьютеры лучше приспособлены для выполнения повторяющихся задач, чем человек;
  • при выполнении макросов обычно нет необходимости в присутствии человека-оператора; в случае, если макрос очень длинный и выполняет операции, требующие значительного времени (например, поиск в базе данных и сортировка), пользователь может переключиться на другое приложение.

Макрос служит для объединения нескольких различных действий в одну процедуру, которую можно легко вызвать. Этот список команд состоит в основном из макрокоманд, которые тесно связаны с приложением, в котором создается макрос – т.е. с командами Word, Excel или других приложений Microsoft Office.

Можно выделить три основные разновидности макросов:

  1. Командные макросы – это наиболее распространенные макросы, обычно состоящие из операторов, эквивалентным тем или иным командам меню или параметрам диалоговых окон. Основным предназначением такого макроса является выполнение действий, аналогичных командам меню – т.е. изменение окружения и основных объектов приложения.
  2. Пользовательские функции – работают аналогично встроенным функциям приложения. Отличие этих функций от командных макросов состоит в том, что они используют значения передаваемых им аргументов, производят некоторые вычисления и возвращают результат в точку вызова, но не изменяют среды приложения.
  3. Макрофункции – представляют сочетание командных макросов и пользовательских функций. Они могут использовать аргументы и возвращать результат, подобно пользовательским функциям, а также могут изменять среду приложения, как и командные макросы. Чаще всего эти макросы вызываются из других макросов, и активно используются для модульного программирования.

Поддержка макросов позволяет порой обойтись вообще безо всякого программирования: достаточно включить автоматическую запись выполняемых пользователем действий и в результате получить готовый макрос, а затем назначить ему кнопку на панели инструментов или новую команду меню, которые будут использоваться для вызова. Простые макросы удается создавать, не написав вручную ни одной строки программного кода. Для разработки же серьезных приложений приходится программировать.

Таким образом, различают 2 способа разработки макроса:

  • автоматическое создание, с использованием макрорекордера;
  • написание макроса «с нуля», используя язык программирования VBA.

Отметим, что возможен и комбинированный подход: фрагменты будущей программы записываются автоматически, а затем они корректируются и дополняются «рукописным» кодом. Для записи макросов из приложений Microsoft Office используется макрорекордер. Это встроенный инструмент, который фиксирует все действия пользователя, включая ошибки и неправильные запуски. При выполнении макроса интерпретируется каждая записанная макрорекордером команда точно в такой последовательности, в которой пользователь выполнял их во время записи.

Для записи макроса в приложении Microsoft Office можно использовать меню «Сервис/Макрос/Начать запись» или выбрать кнопку «Записать макрос» на панели инструментов Visual Basic. До начала записи нужно указать имя макроса и определить, где он будет храниться и как будет доступен. Затем выполнить действия, которые требуется сохранить в макросе. Для завершения записи нужно на панели инструментов «Остановка записи» щелкнуть кнопку «Остановить запись». Для выполнения макроса необходимо:

  1. Установить курсор в место вставки выполнения макроса.
  2. Выбрать пункт меню «Сервис/Макрос/Макросы».
  3. В появившемся диалоговом окне «Макрос» выбрать имя нужного макроса и выбрать «Выполнить».

Чтобы просмотреть код записанного макроса, надо выбрать меню «Сервис/Макрос/Макросы». В появившемся диалоговом окне выбрать имя нужного макроса и щелкнуть кнопку «Изменить». Исходный код указанного макроса будет загружен в окно редактора Visual Basic.

Структура записанного макроса

Макросы, создаваемые макрорекордером MS Office, сохраняются в специальной части файла данных, называемой модулем. Модуль VBA содержит исходный код программы на языке VBA. Фактически макрос является подпрограммой (а точнее, процедурой) VBA. Записанный макрос имеет строго определенную структуру. Ниже представлен исходный код простого макроса, созданного в Microsoft Word.

Листинг 1. Пример макроса

Sub Hello() ‘ Макрос изменяет размер, начертание шрифта, выравнивание абзаца и ‘ выводит надпись в активный документ MS Word ‘ Selection.Font.Size = 24 Selection.Font.Bold = wdToggle Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter Selection.TypeText Text:=»Hello, World!» End Sub

В общем виде структуру кода макроса можно представить следующим образом2:

Sub имяМакроса () ‘ текст комментария Оператор1 Оператор2 … ОператорN End Sub

Каждый макрос VBA начинается с ключевого слова Sub, за которым следует имя макроса. Строку, содержащую ключевое слово Sub и имя макроса, называют строкой объявления (declaration) макроса. За именем макроса всегда следуют пустые круглые скобки (т.к. макрос является процедурой VBA без параметров). За строкой объявления макроса следуют строки комментариев. Комментарий (comment) – это строка в макросе VBA, которая не содержит инструкций, являющихся частью этого макроса. Каждая строка комментария начинается с символа апострофа ( ‘ ). Комментарии содержат имя макроса и текст, который был введен пользователем в текстовое поле «Описание» («Description») диалогового окна «Запись макроса» («Record Macro») в момент записи этого макроса. Сразу за объявлением макроса следует тело макроса (body). Каждая строка в теле макроса состоит из одного или более операторов VBA. Оператор VBA (statement) – это последовательность ключевых слов и других символов, которые вместе составляют одну полную инструкцию для VBA. Макрос VBA состоит из одного или нескольких операторов.

Конец макроса выделяется ключевой строкой End Sub, завершающей тело макроса.

Анатольев А.Г., 18.09.2012

Постоянный адрес этой страницы:

Возможности Excel не ограничиваются набором встроенных функций. При помощи написания макросов Вы можете создавать собственные функции для выполнения нестандартных задач в Excel.

Например, самостоятельно написанный макрос можно привязать к иконке и вывести на Ленту меню. Либо Вы можете создать пользовательскую функцию (UDF) и использовать ее точно так же, как и остальные встроенные функции Excel.

Макрос — это компьютерный код, написанный для Excel на языке программирования Visual Basic for Applications (VBA). Базовые понятия языка программирования VBA рассматриваются на нашем сайте в Учебнике по VBA. Однако прежде чем приступить к написанию кода VBA, рекомендуем познакомиться с уроками, в которых рассматривается безопасность макросов Excel и редактор Visual Basic.

Настройка разрешения для использования макросов в Excel

В Excel предусмотрена встроенная защита от вирусов, которые могут проникнуть в компьютер через макросы. Если хотите запустить в книге Excel макрос, убедитесь, что параметры безопасности настроены правильно.

Редактор Visual Basic

В Excel есть встроенный редактор Visual Basic, который хранит код макроса и взаимодействует с книгой Excel. Редактор Visual Basic выделяет ошибки в синтаксисе языка программирования и предоставляет инструменты отладки для отслеживания работы и обнаружения ошибок в коде, помогая таким образом разработчику при написании кода.

Запись макросов

Инструментарий Excel для записи макросов – это отличный способ эффективно выполнять простые повторяющиеся задачи. Также его можно использовать, как вспомогательное средство при написании более сложных макросов.

Учебник Excel VBA

Для тех, кто только начинает осваивать язык программирования Excel VBA, предлагаем небольшой вводный курс по Visual Basic for Applications.

Урок подготовлен для Вас командой сайта office-guru.ru

Перевел: Антон Андронов
Правила перепечатки
Еще больше уроков по Microsoft Excel

Оцените качество статьи. Нам важно ваше мнение:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Наверх