Пятница, 03.05.2024, 15:28
Меню сайта
Категории раздела
JQuery плагины [59]
JQuery уроки [69]
PHP полезное [24]
PHP уроки [21]
Css [26]
JS [3]
SQL [9]
Css 3 [17]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » PHP полезное

iMacros: команды, скрипты, примеры

iMacros: команды, скрипты, примеры

21.01.2013
iMacros: команды, скрипты, примеры

Здравствуйте, уважаемые читатели блога, хочу познакомить вас с одним удивительным инструментом веб мастера, хакера, и простого пользователя, встречайте: плагин iMacros для браузера Mozila Firefox.

iMacros позволяет записать любую последовательность действий человека на сайте в макрос.

Макроспрограммный код хранящий порядок необходимых к автоматическому выполнению.

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

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

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

Начав заниматься написанием скриптов для автоматического размещения информации на чужом сайте, я выбрал путь с использованием возможностей библиотеки CURL на php, но вскоре столкнулся с рядом проблем, обход которых не представлялся возможным, пользуясь лишь серверным языком. Малейшее использование JavaScripta в системе авторизации сайта ставило бота в тупик.

Гуляя по просторам интернета, с целью найти решение для обхода защиты использующей Javascript, я нашел инструмент, с помощью которого можно сделать бота эмулирующего любое действие человека, и этим инструментом явился плагин iMacros для браузера Mozila Firefox.

iMacros, как сделать первый макрос

Самым первым действием нужно установить плагин, для этого скачиваем последнюю версию 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 на русском языке, т.к. в интернете информации очень мало. Из действительно полезных источников, рассказывающих об 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 команда для задания цикла

1
SET !LOOP n

Слева снизу 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

Согласитесь это не очень удобно, если после цикла нужно выполнить другие действия, или же новый цикл.

Как организовать полноценный алгоритм на iMacros, с чтением из CSV я покажу на практическом примере, но чуть позже, а пока хочу представить вашему вниманию функцию по возврату значения переменной обратно в JavaScript.

Как получить данные обратно в JS

Функция iimGetLastExtract() позволяет получить переменные из макроса в javascript, но работает она при условии, что в самом макросе существует команда

1
ADD !EXTRACT

отдающая какое либо значение:

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 игнорировал ошибки, нужно прописать команду:

1
SET !ERRORIGNORE YES

Еще несколькими полезными командами в iMacros может явиться понижение скорости выполнения макроса:

1
SET !REPLAYSPEED SLOW

И отключение картинок

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 практические примеры

  1. Создадим макрос, получающий первый заголовок из выдачи yandex.ru по запросу "Moguta CMS.":
  2. 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);
  3. Теперь сделаем цикл и выведем список 10 заголовков:
  4. 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);
  5. Усложним задачу, создадим CSV файл, в котором укажем три поисковых запроса, разделив из точкой с запятой. Вот так будет выглядеть CSV:
  6. 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

  7. Пример с передачей переменных, одного макроса в другой. Сначала берем макросом данные из CSV, затем передаем их в JS, и после обработки отдаем на растерзание всем макросам из списка.
    Содержание исполняемого JS файла.
  8. 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 на русском, будет полезным материалом для создания ваших макросов, желаю успехов, если дополнения или вопросы, пишите в комментах.

Категория: PHP полезное | Добавил: ChronoW (20.04.2013)
Просмотров: 9870 | Комментарии: 17 | Теги: iMacros: команды, php, Примеры, скрипты | Рейтинг: 0.0/0
Всего комментариев: 1
1 Игорь  
0
Большое спасибо!

Имя *:
Email *:
Код *: