В свое время мне на глаза попался плагин, автоматизирующий работу браузера — imacros. Первое знакомство с ним было поверхностным. Удобно то, что как и в любом нормальном макросе есть возможность записи действий. Кликнул на ту страницу, на другую, открыл вкладку — все протоколируется и компилируется в собственный, imacros-овский язык программирования. Если его конечно таковым можно назвать…

TAB T=1
URL GOTO=http://www.site.ru
WAIT SECONDS=1
BACK


Открыли первую вкладку, перешли по ссылке, подождали секунду и вернулись назад — как-то так. В рамках этого простого языка можно использовать переменные, заключая их в двойные фигурные скобки: {{CONTENT}}, использовать циклы, читать и сохранять csv-файлы, картинки, скриншотить экран, итп. Есть даже функции узнавания похожей картинки и клика по ней, даже если она каждый раз под новым именем/тегом/классом на странице будет.

Но главный минус всего этого добра: нет условных переходов!
Да, ходим-бродим, кликаем и скачиваем. Но стоит возникнуть непредвиденному, как скрипт впадет в ступор, возвратив ошибку. Типов ошибок кстати там куча, а кроме того, они еще прекрасно «ловятся» через стандартную консоль ошибок Firefox-а.

Выход — использовать javascript надстройку над языком imacros.
Вопросы данного «тандема» двух языков в рамках браузера Мозилла — и будут немного раскрыты в данной статье.


Благо в js есть все, что нужно любому программисту. Обмен между js и самим imacros происходит через служебные встроенные процедуры js: iimSet, iimPlay и др. С помощью них можно например задать переменную {{CONTENT}} в «привет», а далее использовать ее для заполнения поля TEXTAREA на сайте:

iimSet («CONTENT», «Привет»);
status = iimPlay(«CODE:TAG POS=1 TYPE=TEXTAREA ATTR=ID:txt CONTENT={{!CONTENT}}»);


Так вот, мы уже подобрались к тому, что нам действительно необходимо — анализу и условиям. В переменной js по имени status мы получили результат выполнения imacros-команды. И тут поле деятельности отличное — можно ловить ошибки и делать любые условные переходы.

Однако на практике я ограничивался таким:
if (status) {....} else {...}
Вполне достаточно для того, чтобы js «понял»: ага, поля TEXTAREA вообще нету на этой странице, некуда даже «привет» написать… Что-то не так. А не перезагрузить ли мне страницу?

Подводя итог тандему языка imacros и javascript — это достаточно мощный инструмент автоматизации серфинга, не сравнимый конечно с консольными приложениями или PHP-имитаторами работы в интернете, но тем не менее заслуживающий внимание. Мне например удалось написать для сайта ВКонтакте ряд программ, которые пиарили мою группу, общались с людьми (анализировали входящие сообщения и отвечали на них — да, да!), разгадывали капчу через antigate, выкладывали посты и фото по расписанию, и многое другое. Когда я уезжал в командировки, мой «робот» был онлайн иногда по целой неделе и неустанно трудился в онлайне. А друзья всегда удивлялись, глядя как мой комп без участия человека перелистывает страницы, нажимает на кнопки итп.