iMacros: команды, скрипты, примеры
Здравствуйте, уважаемые читатели блога, хочу познакомить вас с одним удивительным инструментом веб мастера, хакера, и простого пользователя, встречайте: плагин iMacros для браузера Mozila Firefox.
iMacros позволяет записать любую последовательность действий человека на сайте в макрос.
Макрос – программный код хранящий порядок необходимых к автоматическому выполнению.
Запустив макрос, действия выполняться автоматически, включая все
переходы по вкладкам, заполнение полей, нажатием на кнопок, переходами
по ссылкам и др.
Так сложилось, что последнее время часть моего времени уходит на
написание ботов и поиск уязвимостей на чужих сервисах, через которые
этих ботов можно протолкнуть.
Я не пишу вредоносные программы, а лишь упрощаю жизнь себе и людям, с
которыми работаю, в задачи моих роботов входит автоматическое
размещение объявлений на всевозможных информативных досках рунета.
Начав заниматься написанием скриптов для автоматического размещения
информации на чужом сайте, я выбрал путь с использованием возможностей
библиотеки CURL на php, но вскоре столкнулся с рядом
проблем, обход которых не представлялся возможным, пользуясь лишь
серверным языком. Малейшее использование JavaScripta в системе
авторизации сайта ставило бота в тупик.
Гуляя по просторам интернета, с целью найти решение для обхода защиты
использующей Javascript, я нашел инструмент, с помощью которого можно
сделать бота эмулирующего любое действие человека, и этим инструментом
явился плагин iMacros для браузера Mozila Firefox.
iMacros, как сделать первый макрос
Самым первым действием нужно установить плагин, для этого скачиваем последнюю версию iMacros, устанавливаем, и наблюдаем появившуюся панель в левой части окна.
В появившемся разделе находятся кнопочки и вкладочки данного
инструмента, я думаю, вы без труда догадаетесь, как им пользоваться
самостоятельно, но всеже немного расскажу об этом.
Для записи наших действий перейдем во вкладку запись и нажмем на
одноименную кнопку. После чего откроем сайт yandex.ru и введем любой
поисковый запрос, например: "Бесплатная CMS для интернет магазина Moguta", нажмем кнопку найти. Завершим запись действий, нажав на кнопку стоп в панеле iMacros.
Полученные в ходе наших действия команды iMacros сохраняет в файл #Current.iim. Чтобы воспроизвести их дважды кликнем на макрос #Current.iim, после чего iMacros должен произвести ряд записанных команд:
1 2 3 4 5
| VERSION BUILD=7601105 RECORDER=FX
TAB T=1
URL GOTO=http://www.yandex.ru/
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://yandex.ru/yandsearch ATTR=ID:text CONTENT= "Бесплатная CMS для интернет магазина Moguta"
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:form ATTR=VALUE:Найти |
Вот таки легким способом можно автоматизировать любое рутинное
действие офисного сотрудника. Возможности плагина iMacros безграничны, с
его помощью можно считывать данные из файла на диске и передавать их на
любой сайт через макрос, как это сделать я расскажу дальше.
Команды iMacros на русском языке
Целью данной статьи стоит описать команды iMacros на русском языке, т.к. в интернете информации очень мало. Из действительно полезных источников, рассказывающих об iMacros на русском, я встретил только форум Mozila.
Прочитав данный форум, я собрал список часто задаваемых вопросов и часто используемых команд iMacros.
Я думаю каждый, кто имеет цель написать хоть чуточку полезный макрос, первым делом задаст себе следующие вопросы:
Как запустить iMacros автоматически на Windows
Ответ: Создать файл с расширением *.bat открыть в блокноте и сохранить в него строку:
1
| start firefox "C:\Program Files\Mozilla Firefox\firefox.exe" http://run.imacros.net/?m=#Current.iim. |
После чего макрос будет выполняться при запуске созданного файла. Для
полной автоматизации, можно прописать его в планировщик задач windows.
Как запустить iMacros автоматически на Unix
Ответ: без комментариев, линуксоводы поймут:
1 2 3 4 5
| #!/usr/bin/python
import imacros
iret = imacros.iimInit("-fx", True)
iret = imacros.iimPlay("CODE:URL GOTO=http://www.iopus.com")
iret = imacros.iimExit() |
Как запустить iMacros из PHP
Ответ: используя класс COM:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
$iim1 = new COM("imacros");
$s = $iim1->iimInit("-runner");
$s = $iim1->iimSet("-var_keyword", $_GET["keyword"]);
$s = $iim1->iimPlay($_GET["macro"]);
echo "iimplay=";
echo $s;
echo "extract=";
echo $iim1->iimGetLastExtract;
$s = $iim1->iimExit();
?> |
Разобравшись с автозапуском, приходит понимание, что для макроса со
сложной задачей, необходимо научиться использовать циклы. В iMacros циклы предусмотрены, но пользоваться ими слишком неудобно.
iMacros команда для задания цикла
Слева снизу iMacros’а есть надпись "Повторить макрос", под ней поле "Макс:", там нужно ввести количество итераций цикла.
Поскольку с такой реализацией циклов далеко не уедешь, нужно искать
альтернативу, и альтернатива в iMacros действительно есть. Плагин iMacros
для браузера Mozila Firefox, имеет потрясающую возможность использовать
управляющий JavaScript файл, именно эта способность окончательно
разбило мое сердце и влюбила меня в iMacros.
Как сделать управляющий js-файл
Управляющий JavaScript файл – это ни что иное как обычный скрит на JS, Пример управляющего файла из демонстрационных скриптов iMacrosa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| MyPosts = new Array();
MyPosts.push("307");
MyPosts.push("2615");
MyPosts.push("1147");
MyPosts.push("3201");
MyPosts.push("3360");
iimDisplay("Array/iimSet Demo");
for (i = 0; i < MyPosts.length; i++) {
iimSet("POSTID", MyPosts[i]);
retcode = iimPlay("CODE:URL GOTO=http://forum.iopus.com/viewtopic.php?f=11&t={{postid}}\n");
if (retcode < 0) { // an error has occured
errtext = iimGetLastError();
alert(errtext);
break;
}
}
iimDisplay("Script completed."); |
Можно заметить несколько непривычных web-программисту функций, в данном скрипте, являющимися командами для iMacros:
- iimSet("POSTID”, MyPosts[i]); – передает в макрос переменную "POSTID", со значением MyPosts[i];
- iimPlay("CODE:URL GOTO=http://forum.iopus.com/viewtopic.php?f=11&t={{postid}}\n”); – приводит команду макроса в выполнение, кроме того данной командой можно запустить готовый макрос iimPlay("JS/login”,60);
- iimGetLastError(); – Возвращает текст ошибки;
- iimDisplay("Script completed.”); – Выводит сообщение в консоль iMacros;
Научившись использовать команды iMacros внутри
JavaScript, можно приступать к реализации любого бота, но практически
сразу встанет вопрос: "как передать данные из текстового файла в
макрос?".
iMacros команда для чтения CSV файла
В iMacros встроен свой парсер CSV файлов, что явно прощает жизнь
программистам. Чтобы прочитать содержимое CSV нужно выполнить следующий
список команд:
1 2 3 4 5 6 7 8
| CMDLINE !DATASOURCE SET !DATASOURCE C:\users.csv
SET !DATASOURCE_COLUMNS 4
'Начало со второй строки, минуя заголовки. '
SET !LOOP 2
'Увеличения счетчика строк спомощью цикла LOOP'
SET !DATASOURCE_LINE {{!LOOP}}
'Далее Непосредственно сами команды цикла'
URL GOTO=http://www.testdomain.com/form.php |
По умолчанию, макрос считывает CSV в формате в котором разделителями
являются просто запятые. Иногда может потребоваться использоват
альтернативный разделитель например в виде точки с запятой. В этом
случае нужно выполнить команду:
1
| SET !DATASOURCE_DELIMITER ; |
Если внутри поля csv необходимо использовать значение содержащие в себе разделитель, то нужно взять его в двойные кавычки.
Приведенный выше кусок макроса выполнится столько раз, сколько указано в поле "МАКС".
Согласитесь это не очень удобно, если после цикла нужно выполнить другие действия, или же новый цикл.
Как организовать полноценный алгоритм на iMacros, с чтением из CSV я
покажу на практическом примере, но чуть позже, а пока хочу представить
вашему вниманию функцию по возврату значения переменной обратно в
JavaScript.
Как получить данные обратно в JS
Функция iimGetLastExtract() позволяет получить переменные из макроса в javascript, но работает она при условии, что в самом макросе существует команда
отдающая какое либо значение:
1 2 3
| ADD !EXTRACT {{VAR1}}
ADD !EXTRACT {{VAR2}}
ADD !EXTRACT {{VAR3}} |
В данном случае из макроса возвращается три переменные, каждая из которых будет доступна следующими вызовами в JS:
1 2 3
| var var1 = iimGetLastExtract(1);
var var2 = iimGetLastExtract(2);
var var3 = iimGetLastExtract(3); |
Иногда требуется задать значение переменной используя javascript прямо в макросе, для этого предусмотренна команда EVAL:
1 2
| SET !VAR1 EVAL("Math.floor(Math.random()*5 + 1);")
WAIT SECONDS={{!VAR1}} |
Этим кодом в переменную {{!VAR1}} попадает случайное число сгенерированное на JS командой EVAL. Кстати обратите внимание, тут мы использовали еще одну новую iMacros команду: WAIT, задающую время ожидания перед выполнением следующего действия.
Не исключителен случай, когда страница на одном из сервисов, для
которого написан макрос, изменит свою структуру , и тогда при выполнении
iMacros выкинет ошибку.
Чтобы iMacros игнорировал ошибки, нужно прописать команду:
Еще несколькими полезными командами в iMacros может явиться понижение скорости выполнения макроса:
И отключение картинок
1
| FILTER TYPE=IMAGES STATUS=ON |
Ну вот и пришло время окунуться в практику, и написать несколько несложных управляющих JavaScript файлов:
Сохранить капчу сайта на локальный диск
Перед использованием надо создать папку c:\imacros и обновить плагин
imacros до последней версии. Без обновления могут вылетать ошибки.
1 2 3
| URL GOTO=http://yoursite.ru
ONDOWNLOAD FOLDER=c:\imacros FILE=capcha.png WAIT=YES
TAG POS=1 TYPE=IMG ATTR=SRC:http://yoursite.ru/captcha/* CONTENT=EVENT:SAVEPICTUREAS |
Примечание: данным методом можно сохранять статичные картинки, для
генерируемых автоматически, как в случае с капчей, нужно использовать
событие SAVE_ELEMENT_SCREENSHOT введенное с версии 7.2.0.8. iMacros
Должно получиться так:
1 2 3
| URL GOTO=http://yoursite.ru
ONDOWNLOAD FOLDER=c:\imacros FILE=capcha.png WAIT=YES
TAG POS=1 TYPE=IMG ATTR=SRC:http://yoursite.ru/captcha/* CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT |
iMacros выполнение JS внутри макроса
1 2
| SET !VAR1 EVAL("var content='текст'; content;")
PROMPT {{!VAR1}} |
iMacros практические примеры
- Создадим макрос, получающий первый заголовок из выдачи yandex.ru по запросу "Moguta CMS.":
1 2 3 4 5 6 7 8 9 10 11 12
| var macros;
var retcode;
var s_n = "\n";
var getExtract;
var search = "moguta+CMS" //вместо пробелов используйте знак '+'
macros = "CODE:SET !EXTRACT_TEST_POPUP NO"+s_n;
macros += "URL GOTO=http://yandex.ru/yandsearch?text="+search+s_n;
macros += "TAG POS=2 TYPE=A ATTR=class:b-serp-item__title-link EXTRACT=TXT"+s_n;
retcode = iimPlay(macros);
getExtract = iimGetLastExtract(1);
alert(getExtract); |
- Теперь сделаем цикл и выведем список 10 заголовков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var macros;
var retcode;
var s_n = "\n";
var getExtract;
var search = "moguta+CMS" //вместо пробелов используйте знак '+'
for (i=1; i<=10; i++) {
macros = "CODE:SET !EXTRACT_TEST_POPUP NO"+s_n;
macros += "URL GOTO=http://yandex.ru/yandsearch?text="+search+s_n;
macros += "TAG POS="+i+" TYPE=A ATTR=class:b-serp-item__title-link EXTRACT=TXT"+s_n;
retcode = iimPlay(macros);
getExtract += iimGetLastExtract(1)+s_n;
}
alert(getExtract); |
- Усложним задачу, создадим CSV файл, в котором укажем три поисковых
запроса, разделив из точкой с запятой. Вот так будет выглядеть CSV:
1 2
| imacros команды;imacros скрипты;imacros на русском;
moguta CMS;lifeexample.ru;могута; |
И напишем макрос который выведет список топовых заголовков, занимающих первую позицию, по этим запросам. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var macros;
var retcode;
var s_n = "\n";
var getExtract="";
var columns = 3; //количество колонок csv
var rows = 2; //количество строк csv
for (j = 1; j <= rows; j++) {
for (i = 1; i <= columns; i++) {
macros = "CODE:SET !EXTRACT_TEST_POPUP NO"+s_n;
macros += "SET !DATASOURCE_DELIMITER ;"+s_n;
macros += "CMDLINE !DATASOURCE test.csv"+s_n;
macros += "SET !DATASOURCE_COLUMNS "+columns+s_n;
macros += "SET !LOOP "+j+s_n;
macros += "SET !DATASOURCE_LINE {{!LOOP}}"+s_n;
macros += "URL GOTO=http://yandex.ru/yandsearch?text={{!COL"+i+"}}"+s_n;
macros += "TAG POS=1 TYPE=A ATTR=class:b-serp-item__title-link EXTRACT=TXT"+s_n;
retcode = iimPlay(macros);
getExtract += iimGetLastExtract(1)+s_n;
}
}
alert(getExtract); |
Обратите внимание, что файл test.csv, должен лежать в директории C:\Users\user\Documents\iMacros\Datasources , или необходимо указать абсолютный путь до файла C:\\test.csv - Пример с передачей переменных, одного макроса в другой. Сначала
берем макросом данные из CSV, затем передаем их в JS, и после обработки
отдаем на растерзание всем макросам из списка.
Содержание исполняемого JS файла. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| var macros;
var retcode;
var s_n = "\n";
var getExtract="";
macros = "CODE:SET !EXTRACT_TEST_POPUP NO"+s_n;
macros += "SET !DATASOURCE_DELIMITER ;"+s_n;
macros += "CMDLINE !DATASOURCE test.csv"+s_n;
macros += "SET !DATASOURCE_COLUMNS "+columns+s_n;
macros += "SET !LOOP "+1+s_n;
macros += "SET !DATASOURCE_LINE {{!LOOP}}"+s_n;
macros += "ADD !EXTRACT {{!COL1}}"+s_n;
macros += "ADD !EXTRACT {{!COL2}}"+s_n;
retcode = iimPlay(macros);
var COL1 = iimGetLastExtract(1);
var COL2 = iimGetLastExtract(2);
alert(COL1);
alert(COL2);
iimSet("VAR1", COL1);
iimSet("VAR2", COL2);
i = iimPlay("JS/test",60);
Содержание макроса JS/test.imm :
VERSION BUILD=7601105 RECORDER=FX
TAB T=1
URL GOTO=http://yandex.ru/yandsearch?text={{!VAR1}}{{!VAR2}}&lr=2 |
На этом я закончу данную большую статью в которой мы узнали о том какие команды iMacros востребованы чаще остальных и написали несколько примеров макросов с использованием управляющих JS файлов.
Надеюсь данная статья про iMacros на русском, будет полезным материалом для создания ваших макросов, желаю успехов, если дополнения или вопросы, пишите в комментах.
|