alert («Hallow_HabraWorld»)Эта статья не про очередного бота для очередной лайковой биржи. Это, скорее, история о том как я, не имея ни малейшего понятия о скриптах и языках программирования, Начал осваивать это не вспаханное поле. А что из этого вышло узнаете под катом.
Предисловие
Давным-давно (где-то год назад) я загорелся идеей заработка в сети. Меня никогда не интересовали сетевые маркетинги и пирамиды. Возможно потому-что от их участника требуется коммуникабельность и подвешенный язык, а у меня с этим беда.Так вот: мне был жизненно необходим абсолютно автоматизированный, стабильный (пусть и небольшой) доход.Перепробовал многое, перечислять не буду, т.к. это стандартные проекты с аудиторией школьников, пашущих за жвачку. Скоро мне все это надоело, потом было пару месяцев простоя. И вот, кто-то из друзей подкинул мне рефералку биржи vprka. Там можно было зарабатывать как деньги, так и баллы, которые потом за копейки продавать… Был даже бот одного из умельцев (естественно виндовый). У меня же стояла ubuntu. Долгое время строить костыли из wine и virtualbox мне тоже наскучило. Хотелось кроссплатформенного бота (или нечто, схожего по функционалу).
Нежданно-негаданно решение нашлось.
Не помню точно как, но в просторах интернета (не без помощи гугла, конечно) набрёл я на дополнение для firefox'a под названием imacros. Гугление продолжалось и удивлению не было предела. Каждый день для меня открывались все новые функции сего, поистине божьего, творения. Синтаксис iim, а уж тем более js, для меня был — потёмки. Довольствовался обыкновенной записью действий с незначительным редактированием.На этом предисловие можно закончить. Дальше началось самое интересное.
Первые скрипты.
Началось все с olik'a. Проект хорош и аудитория многочисленна, но и с защитой от кликеров у этих ребят всё в порядке (хотя утверждение спорное). Сперва я писал только iim скрипты, занимали они over 100 строк и выглядели они очень не эстетично. Да и возможности структуризации кода в этом языке ограничены.Когда заметил поддержку js, был приятно удивлён. Но языка я не знал (как впрочем и сейчас).
Хватит воды. Даёшь примеры кода!
Итак, сначала пишем основу — это несколько iim скриптов для выполнения определенных действий кликера (непосредственно клики).
Пишем скрипт для входа.
VERSION BUILD=8810214 RECORDER=FX
'Стандартная команда с указанием версии imacrosSET !REPLAYSPEED FAST
'Ускоряем выполнение скрипта до максимумаFILTER TYPE=IMAGES STATUS=ON
'Отключаем показ картинок (для большего ускорения загрузки)SET !DATASOURCE "turboliker.csv"
'Задаём базу аккаунтов для входаSET !DATASOURCE_COLUMNS 5
'Кол-во колонок со значениями в файле (можно поставить 3 )SET !LOOP {{!VAR1}}
'Переменная берется из js файла (терпение и все станет понятно)URL GOTO=https://m.vk.com/
'Используем моб версию, так же для ускоренияTAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:https://login.vk.com/?act=login&_origin=https://m.vk.com&ip_h=* ATTR=NAME:email CONTENT={{!COL2}}
SET !ENCRYPTION NO
TAG POS=1 TYPE=INPUT:PASSWORD FORM=ACTION:https://login.vk.com/?act=login&_origin=https://m.vk.com&ip_h=* ATTR=NAME:pass CONTENT={{!COL3}}
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:https://login.vk.com/?act=login&_origin=https://m.vk.com&ip_h=* ATTR=*
Логин и пароль этот и следующие скрипты будут брать из файла «turboliker.csv», который необходимо создать в папке «Datasources» директории imacros'a.
Аналогично логинимся на turboliker'e
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED FAST
FILTER TYPE=IMAGES STATUS=ON
SET !DATASOURCE "turboliker.csv"
SET !DATASOURCE_COLUMNS 5
SET !LOOP {{!VAR1}}
URL GOTO=http://turboliker.ru/
TAG POS=1 TYPE=INPUT:TEXT ATTR=ID:link CONTENT={{!COL4}}
TAG POS=1 TYPE=P ATTR=TXT:Войти
SET !ENCRYPTION NO
TAG POS=1 TYPE=INPUT:PASSWORD ATTR=ID:pass CONTENT={{!COL5}}
TAG POS=1 TYPE=P ATTR=TXT:Войти
SET !ERRORIGNORE YES
SET !TIMEOUT_STEP 1
TAG POS=2 TYPE=DIV ATTR=TXT:Ок
TAG POS=1 TYPE=DIV ATTR=ID:nomore
Логично, что сперва необходимо задать пароль в настройках профиля turboliker
И youtube
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED FAST
FILTER TYPE=IMAGES STATUS=ON
SET !DATASOURCE "turboliker.csv"
SET !DATASOURCE_COLUMNS 6
SET !LOOP {{!VAR1}}
URL GOTO=https://accounts.google.com/ServiceLogin
TAG POS=1 TYPE=INPUT:EMAIL FORM=ID:gaia_loginform ATTR=ID:Email CONTENT={{!COL6}}
SET !ENCRYPTION NO
TAG POS=1 TYPE=INPUT:PASSWORD FORM=ID:gaia_loginform ATTR=ID:Passwd CONTENT={{!COL5}}
TAG POS=1 TYPE=INPUT:CHECKBOX FORM=ID:gaia_loginform ATTR=ID:PersistentCookie CONTENT=NO
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:gaia_loginform ATTR=ID:signIn
Теперь напишем logout'ы для каждого аккаунта (впоследствии они нам пригодятся.)
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED FAST
SET !TIMEOUT_STEP 1
FILTER TYPE=IMAGES STATUS=ON
URL GOTO=https://vk.com/
TAG POS=1 TYPE=A ATTR=ID:logout_link
TAB CLOSE
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED FAST
SET !TIMEOUT_STEP 1
FILTER TYPE=IMAGES STATUS=ON
URL GOTO=http://turboliker.ru/
TAG POS=1 TYPE=A ATTR=TXT:Выход
TAB CLOSE
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED FAST
SET !TIMEOUT_STEP 1
URL GOTO=http://www.youtube.com/
TAG POS=3 TYPE=BUTTON ATTR=TXT:
TAG POS=1 TYPE=A ATTR=TXT:Выйти
TAB CLOSE
Приступим к выполнению самих заданий. Начнём с постановки лайка вк.
VERSION BUILD=8601111 RECORDER=FX
SET !REPLAYSPEED MEDIUM
FILTER TYPE=IMAGES STATUS=ON
TAB CLOSEALLOTHERS
URL GOTO=http://turboliker.ru/index.php?page=likes&tab=setListLike
EVENT TYPE=CLICK SELECTOR="#turbo-main>DIV:nth-of-type(2)>DIV>DIV:nth-of-type(5)>DIV>DIV>DIV:nth-of-type(2)>DIV>DIV>DIV>DIV>TABLE>TBODY>TR>TD>DIV>DIV:nth-of-type(2)" BUTTON=0
TAB T=2
SET !ERRORIGNORE YES
SET !TIMEOUT_STEP 1
'likeTAG POS=1 TYPE=SPAN ATTR=ID:like_link*
'like fotoTAG POS=1 TYPE=SPAN ATTR=ID:pv_like_link
'like videoTAG POS=1 TYPE=SPAN ATTR=ID:mv_like_link
WAIT SECONDS=5
TAB CLOSE
SET !VAR1 EVAL("var randomNumber=Math.floor(Math.random()*120 + 1); randomNumber;")
WAIT SECONDS={{!VAR1}}
TAG POS=1 TYPE=I ATTR=CLASS:icon-check<SP>icon-white&&TXT:
Вступаем в группы.
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED MEDIUM
FILTER TYPE=IMAGES STATUS=ON
URL GOTO=http://turboliker.ru/index.php?page=group&tab=getGroupWin
TAG POS=1 TYPE=DIV ATTR=TXT:подписаться...
TAB T=2
SET !ERRORIGNORE YES
SET !TIMEOUT_STEP 1
TAG POS=1 TYPE=BUTTON ATTR=ID:subscribe_button
TAG POS=1 TYPE=BUTTON ATTR=TXT:Вступить<SP>в<SP>группу
TAG POS=1 TYPE=BUTTON:SUBMIT ATTR=ID:join_button
WAIT SECONDS=5
TAB CLOSE
SET !VAR1 EVAL("var randomNumber=Math.floor(Math.random()*110 + 1); randomNumber;")
WAIT SECONDS={{!VAR1}}
TAG POS=1 TYPE=I ATTR=CLASS:icon-check<SP>icon-white&&TXT:
Делаем репосты
VERSION BUILD=8810214 RECORDER=FX
FILTER TYPE=IMAGES STATUS=ON
URL GOTO=http://turboliker.ru/index.php?page=repost&tab=setListRepost
EVENT TYPE=CLICK SELECTOR="#turbo-main>DIV:nth-of-type(2)>DIV>DIV:nth-of-type(5)>DIV>DIV>DIV:nth-of-type(2)>DIV>DIV>DIV>DIV>TABLE>TBODY>TR>TD>DIV>DIV>B" BUTTON=0
TAB T=2
TAG POS=1 TYPE=A ATTR=TXT:Поделиться
SET !ERRORIGNORE YES
TAG POS=1 TYPE=BUTTON ATTR=ID:like_share_send
TAG POS=1 TYPE=SPAN ATTR=ID:pv_like_link
TAG POS=1 TYPE=SPAN ATTR=TXT:Рассказать<SP>друзьям
WAIT SECONDS=5
TAB CLOSE
SET !VAR1 EVAL("var randomNumber=Math.floor(Math.random()*130 + 1); randomNumber;")
WAIT SECONDS={{!VAR1}}
TAG POS=1 TYPE=P ATTR=ID:btn1
Добавляем в друзья
VERSION BUILD=8601111 RECORDER=FX
SET !REPLAYSPEED MEDIUM
FILTER TYPE=IMAGES STATUS=ON
URL GOTO=http://turboliker.ru/index.php?page=frnd&tab=getFrnd
CLICK X=362 Y=488
TAB T=2
TAG POS=1 TYPE=BUTTON ATTR=TXT:Добавить<SP>в<SP>друзья
WAIT SECONDS=5
TAB CLOSE
SET !VAR1 EVAL("var randomNumber=Math.floor(Math.random()*140 + 1); randomNumber;")
WAIT SECONDS={{!VAR1}}
TAG POS=1 TYPE=I ATTR=CLASS:icon-check<SP>icon-white&&TXT:
Пишем свободные комментарии.
Текст берем из «komment_turboliker.csv» базу спам-комментариев можно нагуглить или написать свою.
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED FAST
FILTER TYPE=IMAGES STATUS=ON
TAB CLOSEALLOTHERS
URL GOTO=http://turboliker.ru/index.php?page=comm&tab=getComm
EVENT TYPE=CLICK SELECTOR="#turbo-main>DIV:nth-of-type(2)>DIV>DIV:nth-of-type(5)>DIV>DIV>DIV:nth-of-type(2)>DIV>DIV>DIV>DIV>TABLE>TBODY>TR>TD>DIV>DIV>B" BUTTON=0
TAB T=2
SET !VAR2 EVAL("var randomNumber=Math.floor(Math.random()*104 + 1); randomNumber;")
SET !DATASOURCE komment_turboliker.csv
SET !DATASOURCE_COLUMNS 1
SET !LOOP {{!VAR2}}
SET !ERRORIGNORE YES
SET !TIMEOUT_STEP 1
TAG POS=1 TYPE=TEXTAREA ATTR=ID:pv_comment CONTENT={{!COL1}}
TAG POS=1 TYPE=BUTTON ATTR=ID:pv_comment_send
TAG POS=1 TYPE=TEXTAREA ATTR=ID:fwr_text CONTENT={{!COL1}}
TAG POS=1 TYPE=BUTTON ATTR=ID:fwr_send
TAG POS=1 TYPE=TEXTAREA ATTR=ID:ba_text CONTENT={{!COL1}}
TAG POS=1 TYPE=BUTTON ATTR=TXT:Отправить
WAIT SECONDS=5
TAB CLOSE
SET !VAR1 EVAL("var randomNumber=Math.floor(Math.random()*110 + 1); randomNumber;")
WAIT SECONDS={{!VAR1}}
TAG POS=1 TYPE=I ATTR=CLASS:icon-check<SP>icon-white&&TXT:
Ставим лайк в youtube
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED MEDIUM
FILTER TYPE=IMAGES STATUS=ON
TAB CLOSEALLOTHERS
URL GOTO=http://turboliker.ru/index.php?page=Ylikes&tab=setYListLike
EVENT TYPE=CLICK SELECTOR="#turbo-main>DIV:nth-of-type(2)>DIV>DIV:nth-of-type(5)>DIV>DIV>DIV:nth-of-type(2)>DIV>DIV>DIV>DIV>TABLE>TBODY>TR>TD>DIV>DIV:nth-of-type(2)" BUTTON=0
TAB T=2
SET !ERRORIGNORE YES
TAG POS=1 TYPE=BUTTON ATTR=ID:watch-like
WAIT SECINDS=5
TAB CLOSE
SET !VAR1 EVAL("var randomNumber=Math.floor(Math.random()*120 + 1); randomNumber;")
WAIT SECONDS={{!VAR1}}
TAG POS=1 TYPE=I ATTR=CLASS:icon-check<SP>icon-white&&TXT:
Просмотр видео в youtube
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED FAST
FILTER TYPE=IMAGES STATUS=ON
URL GOTO=http://turboliker.ru/index.php?page=YView&tab=setYListView
TAG POS=1 TYPE=A ATTR=ID:link
FILTER TYPE=IMAGES STATUS=OFF
TAB T=2
SET !ERRORIGNORE YES
WAIT SECONDS=35
TAB CLOSE
Делаем подписку на канал youtube
VERSION BUILD=8810214 RECORDER=FX
SET !REPLAYSPEED FAST
FILTER TYPE=IMAGES STATUS=ON
URL GOTO=http://turboliker.ru/index.php?page=Ysubs&tab=setYListsubs
EVENT TYPE=CLICK SELECTOR="#turbo-main>DIV:nth-of-type(2)>DIV>DIV:nth-of-type(5)>DIV>DIV>DIV:nth-of-type(2)>DIV>DIV>DIV>DIV>TABLE>TBODY>TR>TD>DIV>DIV>B" BUTTON=0
TAB T=2
EVENT TYPE=CLICK SELECTOR="#c4-primary-header-contents>DIV>SPAN>BUTTON" BUTTON=0
WAIT SECONDS=5
TAB CLOSE
TAG POS=1 TYPE=P ATTR=ID:btn1
Самое вкусное.
С iim скриптами покончено. Теперь осталось написать управляющий js скрипт и можно запускать.
var replay = prompt('Кол-во повторов', ''); //форма с запросом кол-ва повторов
var allreplay = prompt('Кол-во повторов всех макросов', ''); //Форма с запросом повторов выполнения заданий
var n = 0 //Объявляем переменную, равную количеству повторов цикла выполнения заданий
var macro = "CODE:";
macro += "CLEAR"
while (n <allreplay ) { //Повтор всех циклов до значения
n += 1 //Увеличение n на 1 при каждом повторе цикла
iimDisplay (n);
iimPlay("turboliker/logout_vk");
iimPlay("turboliker/logout_turb");
iimPlay("turboliker/logout_you");
iimSet("VAR1",n);
iimPlay("turboliker/login_vk.iim");
iimSet("VAR1",n);
iimPlay("turboliker/login_turb.iim");
iimSet("VAR1",n);
iimPlay("turboliker/login_you");
for (i=1;i<=replay;i++){ //Повтор всех цикла до значения
iimDisplay (i);
iimPlay("turboliker/vk_like");
iimPlay("turboliker/vk_group");
iimPlay("turboliker/vk_share");
iimPlay("turboliker/vk_follow");
iimPlay("turboliker/vk_freekomment");
iimPlay("turboliker/you_like");
iimPlay("turboliker/you_watch");
iimPlay("turboliker/you_follow");
}
iimPlay(macro);
}
При запуске управляющего скрипта, появится окно с запросом кол-ва повторов replay (можно вписать любое значение, но я рекомендую «5») и allreplay — это кол-во аккаунтов, которые следует чередовать между собой.
Эксперименты с «батником»
Процесс накрутки автоматизирован. Это хорошо, но есть пара подводных камней: 1) Кол-во входов в систему на турболайкере ограничено 20-ю. 2) Скрипт должен работать 24 часа в сутки, следовательно бат-файл должен должен быть готов к крахам и ошибкам на стороне браузере.
Закрытие «огненной лисы» средствами js.
Чтобы обойти ограничение входов на сайт, как ни странно, не понадобились никакие прокси. Достаточно просто чистить куки и кэш, но для их очистки нужно перезапускать окно. Как это сделать? Оказывается все довольно просто: надо лишь вставить в конце управляющего js вставить "javascript:window.close();
" эта команда закроет текущее окно браузера, тем самым куки и кэшь после повторного запуска будут чисты.
Bat для повторного запуска мозилы.
Исходные данные этого батника были найдены на каком-то форуме. Модернизированный вариант для наших нужд выглядит так:@echo off
set fullname=C:Program Files (x86)Mozilla Firefoxfirefox.exe
set prog=firefox.exe
:waiting
tasklist |>nul FindStr /B /L /I /C:%prog%&&(ping -n 1 -w 1000 192.168.254.254>NUL & goto :waiting)
start firefox imacros://run/?m=turboliker/start.js
goto :waiting
Он и будет мониторить процесс браузера, при необходимости запускать его и js, который нам так нужен.
Заключение.
Конечно скрипт не совершенен и находится далеко не на последней стадии разработки, т.к. каждый день совершенствуется и исправляется. Последнюю версию вы всегда можете скачать здесь.Спасибо за внимание и до новых встреч.
Автор: holzed