Как сделать сервер закачек

Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%

как сделать сервер закачек

<<< PHP Автоматическое исправление неправильной раскладки строки || Событие mousePress на JavaScript и jQuery >>>

21.01.2013

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

Здравствуйте, уважаемые читатели блога LifeExample, хочу познакомить вас с одним удивительным инструментом веб мастера, хакера, и простого пользователя, встречайте: плагин 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.":

    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);

  2. Теперь сделаем цикл и выведем список 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);

  3. Усложним задачу, создадим 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

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

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.


Источник: http://lifeexample.ru/jquery-javascript-primeryi/imacros-komandyi-skriptyi-primeryi.html



Рекомендуем посмотреть ещё:


Закрыть ... [X]

Домашний медиа-сервер (UPnP) 2.33 Как из телефона сделать рацию


Как сделать сервер закачек Как сделать сервер закачек Как сделать сервер закачек Как сделать сервер закачек Как сделать сервер закачек Как сделать сервер закачек