iMacros: команды, скрипты, примеры
Здравствуйте, уважаемые читатели блога LifeExample, хочу познакомить вас с одним удивительным инструментом веб мастера, хакера, и простого пользователя, встречайте: плагин 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 команда для задания цикла
1
|
SET !LOOP n
|
Поскольку с такой реализацией циклов далеко не уедешь, нужно искать альтернативу, и альтернатива в 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."); |
- 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 команда для чтения 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 |
1
|
SET !DATASOURCE_DELIMITER ;
|
Приведенный выше кусок макроса выполнится столько раз, сколько указано в поле "МАКС".
Как организовать полноценный алгоритм на iMacros, с чтением из CSV я покажу на практическом примере, но чуть позже, а пока хочу представить вашему вниманию функцию по возврату значения переменной обратно в JavaScript.
Как получить данные обратно в JS
Функция iimGetLastExtract() позволяет получить переменные из макроса в javascript, но работает она при условии, что в самом макросе существует команда
1
|
ADD !EXTRACT
|
1
2 3 |
ADD !EXTRACT {{VAR1}}
ADD !EXTRACT {{VAR2}} ADD !EXTRACT {{VAR3}} |
1
2 3 |
var var1 = iimGetLastExtract(1);
var var2 = iimGetLastExtract(2); var var3 = iimGetLastExtract(3); |
1
2 |
SET !VAR1 EVAL("Math.floor(Math.random()*5 + 1);")
WAIT SECONDS={{!VAR1}} |
Не исключителен случай, когда страница на одном из сервисов, для которого написан макрос, изменит свою структуру , и тогда при выполнении iMacros выкинет ошибку.
Чтобы iMacros игнорировал ошибки, нужно прописать команду:
1
|
SET !ERRORIGNORE YES
|
1
|
SET !REPLAYSPEED SLOW
|
1
|
FILTER TYPE=IMAGES STATUS=ON
|
Сохранить капчу сайта на локальный диск
Перед использованием надо создать папку 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 |
Должно получиться так:
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.":
- Теперь сделаем цикл и выведем список 10 заголовков:
- Усложним задачу, создадим CSV файл, в котором укажем три поисковых запроса, разделив из точкой с запятой. Вот так будет выглядеть CSV:
- Пример с передачей переменных, одного макроса в другой. Сначала
берем макросом данные из CSV, затем передаем их в JS, и после обработки
отдаем на растерзание всем макросам из списка.
Содержание исполняемого JS файла.
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); |
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); |
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); |
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 на русском, будет полезным материалом для создания ваших макросов, желаю успехов, если дополнения или вопросы, пишите в комментах.
Классная статейка! Вот только мне бы нужно с самых азов, так как только ещё начинаю изучать, а подробного описания чисто для таких чайников как я пока никак не найду.
ОтветитьУдалитьа как будет REFRESH через 10 циклов
ОтветитьУдалитьблять как сделать чтобы макрос повторялся?
ОтветитьУдалить