Решил добавить сюда свою старую статью, думаю многим будет полезно, единственное что сайт над которым издевались уже не работает.
Думаю многим начинающим будет интересно. Начнём пожалуй с преимусчеств проигрывания js перпед iim (актуально только для Firefox и производных).
- легко оперировать с переменными;
- гибкость;
- логические операции;
- доступ и манипуляции с DOM-деревом документа;
Давайте разберём на примере. Недавно помогал написать скрипт для сайта the-pirats.ru, на нём и поучимся.
Примерный план работ
- сбор ежедневного бонуса
- сбор и продажа алмазов
- покупка новых пиратов
- вывод при наборе минималки
У нас уже есть акаунт на данном сайте, поэтому начнём с входа на сайт. Сначала запишем макрос с помощью браузера, сделав вход вручную.
VERSION BUILD=8961227 RECORDER=FX TAB T=1 URL GOTO=http://the-pirats.ru/ TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:log_email CONTENT=mail@yandex.ru SET !ENCRYPTION NO TAG POS=1 TYPE=INPUT:pASSWORD FORM=NAME:NoFormName ATTR=NAME:pass CONTENT=superCrutoyParol TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*
Есть два варианта
Не правильный но рабочий: каждую строку воспроизвести через iimPlayCode(). Вот как будет выглядеть результат (первую строку с версией можно проигнорировать):
iimPlayCode('TAB T=1'); iimPlayCode('URL GOTO=http://the-pirats.ru/'); iimPlayCode('TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:log_email CONTENT=mail@yandex.ru'); iimPlayCode('SET !ENCRYPTION NO'); iimPlayCode('TAG POS=1 TYPE=INPUT:pASSWORD FORM=NAME:NoFormName ATTR=NAME:pass CONTENT=superCrutoyParol'); iimPlayCode('TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*');
//Создаём пременную в которую будем записывать строку с макросом var macros = ''; //Создаём пременную с переносом строки (можно и без неё, покажу дальше как) var n = '\n'; //Вписываем первую строку макроса и в конце знак переноса строки macros += 'TAB T=1' + n; //Вписываем следущую строку макроса и в конце знак переноса строки, //как видите здесь я показал пример записи без использования переменной переноса строки macros += 'URL GOTO=http://the-pirats.ru/ \n'; //Вписываем оставшиеся строки macros += 'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:log_email CONTENT=mail@yandex.ru' + n; macros += 'SET !ENCRYPTION NO' + n; macros += 'TAG POS=1 TYPE=INPUT:pASSWORD FORM=NAME:NoFormName ATTR=NAME:pass CONTENT=superCrutoyParol' + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*' + n; Воспроизводим записаный макрос iimPlayCode(macros);
Возьмём за основу второй вариант. Следует отметить что возможны варианты когда авторизация не требуется, поэтому нужно разделить наш макрос. Давайте сделаем для авторизации отдельную функцию.
//Функции и пременные var n = '\n'; function Avtorizacia(){ var macros = ''; macros += 'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:log_email CONTENT=mail@yandex.ru' + n; macros += 'SET !ENCRYPTION NO' + n; macros += 'TAG POS=1 TYPE=INPUT:pASSWORD FORM=NAME:NoFormName ATTR=NAME:pass CONTENT=superCrutoyParol' + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*' + n; iimPlayCode(macros); } // Тело скрипта var macros = ''; macros += 'TAB T=1' + n; macros += 'URL GOTO=http://the-pirats.ru/ \n'; iimPlayCode(macros); Avtorizacia();
//Функции и пременные var n = '\n'; var email = 'mail@yandex.ru'; var pass = 'superCrutoyParol'; function Avtorizacia(){ var macros = ''; macros += 'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:log_email CONTENT=' + email + n; macros += 'SET !ENCRYPTION NO' + n; macros += 'TAG POS=1 TYPE=INPUT:pASSWORD FORM=NAME:NoFormName ATTR=NAME:pass CONTENT='+ pass + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*' + n; var rezultat = iimPlayCode(macros); if(rezultat > 0){ return true; } return false; } // Тело скрипта var macros = ''; macros += 'TAB T=1' + n; macros += 'URL GOTO=http://the-pirats.ru/' + n; iimPlayCode(macros); if(Avtorizacia()){ window.console.log('Удачная авторизация'); }else{ window.console.log('Возникли ошибки при авторизации'); }
Было бы глупо пытаться авторизироваться на сайте если этого не требуется, поэтому напишем проверку нужно нам это или нет. Есть много вариантов, но я выбрал может не самый лучший но как мне показалось более наглядный для обучения. Будем проверять наличие элемента на странице. Если пользователь авторизирован то на всех основных станицах присутсвует состояние его счёта
function getBalancePokupki(){ iimPlayCode ('TAG POS=1 TYPE=A ATTR=HREF:/account/insert EXTRACT=TXT'); var balance = iimGetLastExtract(); window.console.log(balance); if(balance!='#EANF#'){ return balance; } return false; } function getBalanceVivod(){ iimPlayCode ('TAG POS=1 TYPE=A ATTR=HREF:/account/payment EXTRACT=TXT'); var balance = iimGetLastExtract(); window.console.log(balance); if(balance!='#EANF#'){ return balance; } return false; } // Тело скрипта var macros = ''; macros += 'TAB T=1' + n; macros += 'URL GOTO=http://the-pirats.ru/ \n'; iimPlayCode(macros); var pokupki = getBalancePokupki(); if(!pokupki){ Avtorizacia(); var pokupki = getBalancePokupki(); } var vivod = getBalanceVivod();
function getBalancePokupki(){ iimPlayCode ('TAG POS=2 TYPE=A ATTR=HREF:/account/insert EXTRACT=TXT'); var balance = iimGetLastExtract(); window.console.log(balance); if(balance!='#EANF#'){ return balance; } return false; } function getBalanceVivod(){ iimPlayCode ('TAG POS=2 TYPE=A ATTR=HREF:/account/payment EXTRACT=TXT'); var balance = iimGetLastExtract(); window.console.log(balance); if(balance!='#EANF#'){ return balance; } return false; }
VERSION BUILD=8961227 RECORDER=FX TAB T=1 URL GOTO=http://the-pirats.ru/account/bonus TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:bonus
Пример макроса для сбора алмазов который зделан с помощю записи в браузере
VERSION BUILD=8961227 RECORDER=FX TAB T=1 URL GOTO=http://the-pirats.ru/account/store TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:sbor TAG POS=1 TYPE=FONT ATTR=TXT:Рынок<SP>сбыта TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:sell
Сами функции
function bonus(){ var macros = ''; macros += 'URL GOTO=http://the-pirats.ru/account/bonus' + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:bonus' + n; var rezultat = iimPlayCode(macros); window.console.log(rezultat); if(rezultat > 0){ return true; } return false; } function almazy(){ var macros = ''; macros += 'URL GOTO=http://the-pirats.ru/account/store' + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:sbor' + n; macros += 'TAG POS=1 TYPE=FONT ATTR=TXT:Рынок<SP>сбыта' + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:sell' + n; var rezultat = iimPlayCode(macros); window.console.log(rezultat); if(rezultat > 0){ return true; } return false; }
parseFloat (для преобразования в число с плавающей точкой\запятой)
parseInt (для преобразования в целое число).
Видел также варианты с умножением на 1, но это может привести к непредсказуемым результатам, хотя можно взять на заметку. Для нас же вполне приемлемо оперировать целыми числами.
Теперь непосредсвенно к коду. Адгоритм наших действий будет следующим.
[*]узнём баланс
[*]сравниваем с самой дешевой покупкой
[*]пока больше покупаем самого дорогого пирата исходя из состояния баланса
[*]отминусовываем покупку от баланса
[*]перходим к п3
[*]узнаём баланс на вывод
[*]если больше минималки выводим средства
var pokupki = getBalancePokupki(); var vivod = getBalanceVivod(); if(pokupki){ iimPlayCode ('URL GOTO=http://the-pirats.ru/account/farm'); var balPokupki = parseInt(pokupki); while(balPokupki>100){ if(balPokupki>1250000){ iimPlayCode ('TAG POS=5 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-1250000; continue; } if(balPokupki>250000){ iimPlayCode ('TAG POS=4 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-250000; continue; } if(balPokupki>50000){ iimPlayCode ('TAG POS=3 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-50000; continue; } if(balPokupki>1000){ iimPlayCode ('TAG POS=2 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-1000; continue; } iimPlayCode ('TAG POS=5 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-100; } } if(vivod){ var balVivod = parseInt(vivod); if(balVivod>10){ var macros = ''; macros += 'URL GOTO=http://the-pirats.ru/account/payment' + n; macros += 'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=ID:sum CONTENT='+ balVivod + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:swap' + n iimPlayCode (macros); } }
//Функции и пременные var n = '\n'; var email = 'mail@yandex.ru'; var pass = 'superCrutoyParol'; function Avtorizacia(){ var macros = ''; macros += 'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=NAME:log_email CONTENT=' + email + n; macros += 'SET !ENCRYPTION NO' + n; macros += 'TAG POS=1 TYPE=INPUT:pASSWORD FORM=NAME:NoFormName ATTR=NAME:pass CONTENT='+ pass + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*' + n; var rezultat = iimPlayCode(macros); if(rezultat > 0){ return true; } return false; } function getBalancePokupki(){ iimPlayCode ('TAG POS=2 TYPE=A ATTR=HREF:/account/insert EXTRACT=TXT'); var balance = iimGetLastExtract(); window.console.log(balance); if(balance!='#EANF#'){ return balance; } return false; } function getBalanceVivod(){ iimPlayCode ('TAG POS=2 TYPE=A ATTR=HREF:/account/payment EXTRACT=TXT'); var balance = iimGetLastExtract(); window.console.log(balance); if(balance!='#EANF#'){ return balance; } return false; } function bonus(){ var macros = ''; macros += 'URL GOTO=http://the-pirats.ru/account/bonus' + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:bonus' + n; var rezultat = iimPlayCode(macros); window.console.log(rezultat); if(rezultat > 0){ return true; } return false; } function almazy(){ var macros = ''; macros += 'URL GOTO=http://the-pirats.ru/account/store' + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:sbor' + n; macros += 'TAG POS=1 TYPE=FONT ATTR=TXT:Рынок<SP>сбыта' + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:sell' + n; var rezultat = iimPlayCode(macros); window.console.log(rezultat); if(rezultat > 0){ return true; } return false; } // Тело скрипта var macros = ''; macros += 'TAB T=1' + n; macros += 'URL GOTO=http://the-pirats.ru/ \n'; iimPlayCode(macros); var pokupki = getBalancePokupki(); if(!pokupki){ Avtorizacia(); } bonus(); almazy(); var pokupki = getBalancePokupki(); var vivod = getBalanceVivod(); if(pokupki){ iimPlayCode ('URL GOTO=http://the-pirats.ru/account/farm'); var balPokupki = parseInt(pokupki); while(balPokupki>100){ if(balPokupki>1250000){ iimPlayCode ('TAG POS=5 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-1250000; continue; } if(balPokupki>250000){ iimPlayCode ('TAG POS=4 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-250000; continue; } if(balPokupki>50000){ iimPlayCode ('TAG POS=3 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-50000; continue; } if(balPokupki>1000){ iimPlayCode ('TAG POS=2 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-1000; continue; } iimPlayCode ('TAG POS=5 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*'); balPokupki = balPokupki-100; } } if(vivod){ var balVivod = parseInt(vivod); if(balVivod>10){ var macros = ''; macros += 'URL GOTO=http://the-pirats.ru/account/payment' + n; macros += 'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=ID:sum CONTENT='+ balVivod + n; macros += 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=NAME:swap' + n iimPlayCode (macros); } }
P.S. Прошу простить за возможные орфографические ошибки (при указании исправлю), адекватная критика приветствуется. Стоит учитывать что скрипт носит обучающий характер и не претендует на чистоту кода и оптимальность алгоритма действий.
исправлено - код публикуется в тегах code внутри спойлера, а не в source или каких либо иных
картинки (скрины) должны быть загружены на фото-хостинг анонимно, без использования собственных аккаунтов, на данном хостинге
InfSub
Отредактировано dvomaks (17-07-2016 18:17:00)
Отсутствует
спасибо за статью
дал ссылку на данный пост в FAQ, как пример для начинающих
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Спасибо, классная статья
Отсутствует