Автоматизируем любые действия в браузере с iMacros
- вторник, 21 октября 2014 г. в 03:11:00
iMacros — это программа, которая позволяет автоматизировать и имитировать действия пользователя в браузере. По словам разработчиков, iMacros загрузили 9 миллионов раз, но лишь 240 тысяч юзеров активно используют приложение. То есть лишь 3% из установивших продукт нашли ему применение. И неслучайно. При первом взгляде на документацию сложно разглядеть его удивительные, поражающие воображение возможности. Эта статья откроет их для тебя.
Есть два варианта установки iMacros:
В описанных ниже примерах использован iMacros Firefox add-on.
Основной прием, которому стоит научиться, — запись действий в браузере и последующее их воспроизведение. Перейдем на вкладку 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
Функция записи макросов дает возможность лишний раз не заглядывать в документацию и автоматизировать простейшие задачи, не заморачиваясь написанием кода.
В браузере Chrome не работает треть iMacros-команд (какие — см. документацию). Поэтому лучше использовать Firefox (90% возможностей) или Internet Explorer (наиболее полный функционал).
Предположим, нам нужно заполнить информацию о товарах интернет-магазина через 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"
А теперь представим обратную ситуацию. Когда нужно просмотреть каталог магазина-конкурента и сохранить информацию о товарах.
'Этот код извлекает текстовое содержимое из абзацев, имеющих атрибут "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}
Естественно, весь этот код можно использовать в цикле с динамическими переменными.
Любой макрос можно сохранить в файле с расширением iim и использовать в приложениях, написанных на 16 языках программирования. Только надо не забыть установить полную версию (не аддон) iMacros на компьютер или веб-сервер.
Вызов iMacros из батников — наиболее простой и удобный путь автоматизировать их выполнение. Достаточно одной строки для запуска макроса:
"ProgramFiles\iOpus\iMacros\iMacros.exe" -macro "..\..\Macros\Demo\RegExpSearch.iim"
Основная сложность в использовании 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);
В iMacros можно присваивать переменным результаты выполнения JavaScript-кода c помощью команды EVAL:
SET JSVAR EVAL("var JSVAR = 45+5; JSVAR;")
iMacros можно запускать с веб-сервера, используя PHP-скрипт. Зачем это может пригодиться? Для пополнения базы данных посредством мониторинга информационных сайтов, генерации онлайн-табло результатов тестирования состояния серверов и так далее. Пример вызова макроса, осуществляющего поиск на странице:
<?php
$iimobject = new COM("imacros");
// Обращаемся к компоненту iimRunner (он уже должен
// быть предварительно запущен на сервере)
$imacrosprocess = $iimobject->iimInit("-runner");
// Получаем код макроса и слова для поиска
// из адресной строки
$imacrosprocess = $iimobject->iimSet
("-var_keyword", $_GET["keyword"]);
$imacrosprocess = $iimobject->iimPlay
($_GET["macro"]);
// Выводим отчет о выполнении макроса (удалось
// запустить или нет)
echo "iimplay=";
echo $imacrosprocess;
// и результаты поиска
echo "extract=";
echo $iim1->iimGetLastExtract;
$s = $iim1->iimExit();
?>
Для отсрочки выполнения команды на n-е количество секунд существует команда WAIT. Пример:
WAIT SECONDS=10.
Для более сложного планирования выполнения макросов надо прибегать к помощи сторонних языков программирования. Простейшие варианты — batch-файлы + Windows Task Sheduler или PHP + Crontabe.
Если сайт сделан на 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
Если ты хочешь запечатлеть лучшие моменты работы iMacros на видео — используй плагин Capture Fox для Mozilla или Screencastify для Chrome.
В приложении к журналу есть девять шаблонов макросов (с русскоязычными комментами), которые ты сможешь приспособить для решения следующих задач:
В этой статье рассмотрены возможности iMacros, позволяющие решать тривиальные проблемы, с которыми может столкнуться любой IT-специалист или просто активный пользователь инета. Всего же инструмент включает в себя более полусотни команд, обозреть которые в формате журнала невозможно. Поэтому, если ты не нашел здесь ничего, что могло бы облегчить твою рутину в Сети, не отчаивайся и загляни в документацию или на форум imacros.net.