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); ")
JS: var rndNumber = Math.floor(Math.random()*10 + 1);
EVAL из iMacros нам ни к чему. В JS есть свой eval(), и мы его будем использовать для некоторых редких ситуаций, где по-другому никак. Например при подгрузке стороннего макроса через Ajax и его выполнение.
Задержка на определенное время
iMacros : WAIT SECONDS=3
JS: setTimeout(function () {/*Do something*/}, 3000); //ms
В iMacros эта функция синхронная и значит код, написанный после нее, исполнится только через указанное количество секунд, это очень удобно, поэтому мы ее будем использовать.
Работа с фреймами
iMacros : FRAME F=2
Это одна из важнейших стандартных возможностей. Если не использовать iMacros — при помощи JS мы не сможем бессовестно ковыряться в чужих ифреймах и вытаскивать да и вставлять любое содержимое. Однозначное да!
Переключение и закрытие табов
iMacros : 'TAB CLOSEALLOTHERS'; 'TAB T=1';
При помощи JS мы просто не можем переключаться между табами, никак. Несмотря на то, что работает функция специфически, о чем я позже расскажу, однозначно мастхэв.
Я привел тут не весь список команд, а затронул только самое основное и самое важное. Большую часть работы можно делать на Javascript и использовать iMacros только там, где по-другому никак. В следующих уроках по iMacros будет рассмотрено больше команд.
Возможности iMacros + JavaScript + Firefox Extensions API
Да, все верно, мы можем писать свои скрипты на JS+iMacros, но при этом еще и использовать огромную часть функционала, как если бы мы писали расширение для браузера — а это полноценный файловый ввод-вывод, информация о системе, взаимодействие с другими приложениями и процессами и многое другое.
Если задуматься — возможности открываются поистине огромные, можно создать ботоферму, где все браузеры будут связаны друг с другом и будут иметь постоянное соединение друг с другом и смогут выполнять различные задачи сообща.