[Урок 1] . Возможности iMacros. Что мы будем использовать из iMacros, а что эффективнее делать на Javascript?

iMacros — это расширение для браузера, которое позволяет записывать и воспроизводить действия пользователя в браузере. Также можно самому писать на нем скрипты и что по-настоящему круто, можно полноценно использовать Javascript помимо основного скудного синтаксиса iMacros.
В интернете довольно много информации об использовании iMacros. Многие люди используют его крайне примитивным образом. Стандартными средствами движка крайне неудобно делать сложные автоматизации, а для решения многих проблем часто приходится писать кучу кода, плохо структурированного и плохо поддерживаемого.

Прежде чем начать

Не хотелось бы разжевывать совсем азы работы с iMacros — подобного материала много. Если вы решили начать изучать использование iMacros совместно с Javascript — то, скорее всего, вы уже немного освоились со стандартными командами iMacros. Если же нет — то рекомендую посмотреть пару роликов на ютубе на эту тему или почитать статьи для совсем новичков. Я буду отталкиваться от того, что вы все же уже писали свои первые макросы и представляете примерно, что это такое.

Стандартный функционал iMacros vs Javascript:

У iMacros не такой уж и большой набор свойств, методов, но среди них есть критически важные для создания ботов любой сложности. В Javascript функционал огромен, к тому же мы будем использовать не самую старую версию Firefox, а значит сможем порадоваться всяким новым и полезным фичам из HTML5 и ECMASCRIPT 6. Хочу пройтись немного по основным возможностям iMacros.

Что же нам использовать, а от чего лучше воздержаться?


Переход по ссылке

iMacros : URL GOTO=http://ya.ru
JS: window.location = 'http://ya.ru'

Эту команду iMacros мы будем использовать, поскольку она синхронная, то есть код, написанный после нее, исполнится только тогда, когда страница загрузится или истечет таймаут, который кстати можно добавлять самому, например вот так iimPlayCode('SET !TIMEOUT 10\nURL GOTO=https://nagibaka.ru/'); 


Переменные

iMacros : SET !VAR1 hello<SP>world
JS: var var1= 'hello world';

Такое задание переменных — это абсолютно бесполезный кусок говна, во-первых мы ограничены в их количестве и в их именовании(VAR0 — VAR9). Но, самое важное, с переменными из JS мы можем делать что угодно, для них доступно куча методов и возможностей, мы их можем обрабатывать, используя всю мощь JS. Поиск текста, цифр, преобразования в объекты, массивы, использование регулярных выражений для поиска и замены, калькуляция и много всего другого. Единственный момент, когда мы используем iMacros-переменную — это выдирание данных через iimGetExtract().


Сохранение\чтение данных в CSV

iMacros : SET !DATASOURCE books.csv; SET !LOOP 2; SET !DATASOURCE_LINE {{!LOOP}}   

Не стал перечислять все команды из этой серии. Но, все что связано с чтением\сохранением в CSV, а также реализация циклов — это слишком отвратительно, чтобы использовать. Когда только начинал изучать, я как-то раз делал сохранение и чтение списка страниц в csv стандартными средствами.  Когда в списке стало больше сотни страниц, перебор всего файла  в поисках нужной строки занимал несколько секунд, потом я все переделал на JS + JSON в качестве формата хранения и теперь все операции происходят мгновенно. Для операций с данными без вариантов мы будем юзать JS.


Извлечение данных из HTML-тэгов

iMacros : TAG POS=1 TYPE=DIV ATTR=CLASS:submeta EXTRACT=TXT 
JS: window.document.querySelector(‘.submeta’).textContent; //Тут вариантов много как искать селектор

Мы будем использовать TAG для кликов по кнопкам, ссылкам и т.д. А также будем иногда использовать EXTRACT — он жизненно необходим, когда нужно выдрать картинку или какие-то данные из iframe — в этих случаях одним JS мы не обойдемся.


Сохранение скриншота любого элемента на странице

iMacros : ONDOWNLOAD FOLDER=c:/btc FILE=image.jpg WAIT=YES TAG POS=1 TYPE=DIV ATTR=class:ava CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT');

Это одна из важнейших стандартных возможностей — сохранение любого элемента страницы, даже не обязательно картинки,  в файл. На JS подобная задача заставила бы попотеть как следует и не факт, что полностью все получилось бы.


Преобразование текстовой строки в исполняемый код EVAL()

iMacros : SET !VAR1 EVAL("Math.floor(Math.random()*10 + 1); ")
JSvar rndNumber = Math.floor(Math.random()*10 + 1);

EVAL из iMacros нам ни к чему. В JS есть свой eval(), и мы его будем использовать для некоторых редких ситуаций, где по-другому никак. Например при подгрузке стороннего макроса через Ajax и его выполнение.


Задержка на определенное время

iMacrosWAIT SECONDS=3
JSsetTimeout(function () {/*Do something*/}, 3000); //ms

В iMacros эта функция синхронная и значит код, написанный после нее, исполнится только через указанное количество секунд, это очень удобно, поэтому мы ее будем использовать.


Работа с фреймами

iMacrosFRAME F=2

Это одна из важнейших стандартных возможностей. Если не использовать iMacros — при помощи JS мы не сможем бессовестно ковыряться в чужих ифреймах и вытаскивать да и вставлять любое содержимое.  Однозначное да!


Переключение и закрытие табов

iMacros : 'TAB CLOSEALLOTHERS'; 'TAB T=1';

При помощи JS мы просто не можем переключаться между табами, никак. Несмотря на то, что работает функция специфически, о чем я позже расскажу, однозначно мастхэв. 


Я привел тут не весь список команд, а затронул только самое основное и самое важное. Большую часть работы можно делать на Javascript и использовать iMacros только там, где по-другому никак. В следующих уроках по iMacros будет рассмотрено больше команд.

Возможности iMacros + JavaScript + Firefox Extensions API

Да, все верно, мы можем писать свои скрипты на JS+iMacros, но при этом еще и использовать огромную часть функционала, как если бы мы писали расширение для браузера — а это полноценный файловый ввод-вывод, информация о системе, взаимодействие с другими приложениями и процессами и многое другое.

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

15 комментариев

  1. ». Расширение повторит все действия, которые предварительно были сохранены. Следует заметить, что пользователь имеет возможность прервать воспроизведение в любой момент. Также он может изменить скорость, с которой будут повторяться действия, воспользовавшись кнопкой «

    Ответить
  2. Здравствуйте, уважаемый автор блога! Нужна автоматизация заполнения веб-формы. Вы занимаетесь написанием макросов на заказ?

    Ответить
  3. Спасибо автору за ценную информацию! Почерпнул для себя много нового и интересного. Продолжайте в том же духе, отличные уроки.

    Ответить
  4. Здравствуйте. Нужно автоматизировать несколько действии на одеом сайте. Кто сможет сделать за небольшую оплату? Пишите в личку

    Ответить
  5. Это распространенное заблужение, но iMacros можно создавать сколько угодно переменных.

    Это не отменяет остальных недостатков, но мало ли кому может пригодиться скрипт на чистом iim. Мне вот на работе приходиться парсить 2gis через Chrome.

    Нигде этого не пишут, обнаружил методом тыка.
    FF 37 Imacros 8.9.7

    SET FFF helloworld
    PROMPT {{FFF}}
    http://i89.fastpic.ru/big/2017/0311/80/3bc7c0323a7168eaa26a91e1b49ca080.png

    Ответить
  6. ребят подскажите, как заставить imacros открыть приватное окно — по идее URL GOTO=about:privatebrowsing

    Ответить
  7. «Например при подгрузке стороннего макроса через Ajax и его выполнение».
    Хотеть! Где читать?

    Ответить

Оставить комментарий