Где почитать:
Версии iMacros и Firefox:
Обработка ошибок в iMacros:
Управляющий JavaScript:
URL GOTO=imacros://run/?m=path/file.iim
URL GOTO=imacros://run/?m=path/file.js
iimPlay("path/file.iim")
iimPlayCode("URL GOTO=imacros://run/?m=path/file.js")
iimPlay("CODE:URL GOTO=http://fmacros.ru/launcher.html?m=path/file.js")
Не рекомендуется запускать js из js, если вы не понимаете принципа работы данной конструкции и не готовы отлавливать баги, связанные с ней. Для тех, кто все же, решил попробовать, могу сказать только одно, не ждите от данного метода - последовательного запуска из одного js-скрипта - нескольких js-скриптов, его нет и не будет.
где:
1 для iimPlay() - путь до файла, может быть полным
SET !ERRORIGNORE YES/NO
Используется в ситуациях, когда требуется в любом случае выполнить скрипт, даже если часть команд выполнилась с ошибками
Например: есть несколько вариантов кнопки, которую требуется нажать, кнопки не подпадают под единый шаблон, так как созданы на основе различных тегов, но одна из них - обязательно присутствует на странице, соответственно, включаем данный модификатор и далее записываем последовательно команды нажатия для каждой из кнопок. В результате: нужная кнопка будет нажата, ошибочные команды - будут проигнорированы
SET !ERRORCONTINUE YES
Для любителей бездумно копировать чужие ляпы и фейки, еще раз повторяю, такой опции уже НЕ СУЩЕСТВУЕТ!, начиная с iMacros 7 версии (да и в последней 6 версии, она тоже не работает)SET !EXTRACT_TEST_POPUP YES/NO
Всплывающие окна требуются при написании и тестировании iim-скриптов. При цикличном запуске iim-скрипта, либо при запуске из управляющего js-скрипта, эти окна не отображаются. Данная опция используется для отключения показа тестовых окон для iim-скриптов, действие которых, не зациклено и выполняется единожды (нажатием кнопки "Воспроизвести").
Скорость воспроизведения макроса (быстро/нормально/медленно):SET !REPLAYSPEED FAST/MEDIUM/SLOW
* Режим, используемый по умолчанию - подчеркнут!
iimDisplay ("Ваш комментарий")
iimPlay ("файл или код")или
iimPlayCode ("код")
iimSet ("имя iim-переменной", "значение")
Описание и примеры использования:
iimPlay () - отправляет iim-файл или iim-код на выполнение.
* При использовании в JS, обратные слеши "\" - должны быть экранированы еще одним обратным слешем (актуально для OS Windows).
Либо, путь до файла, можно записать с помощью прямых слешей "/", в таком случае, их не придётся экранировать.
Например:
"C:\\MyMacros\\macro.iim"
и
"C:/MyMacros/macro.iim"
iimPlayCode () - отправляет iim-код на выполнение.
iimSet () - инициализирует переменные в iim-файле или iim-коде и передает им значения из js-скрипта.
** Нельзя передать значение уже инициализированным переменным, таким как: !VAR0-!VAR9 и любым другим, начинающимся со знака !
Дополнительные возможности:
code by: okkamas_knife
var prgpath="C:\\windows\\ping.exe"; // путь до исполняемого файла, не забываем про двойные косые в пути ... // ... (экранирование обратного слеша "\\" при записи пути до exe-файла в OS Windows) var args = ['-n','6', 'google.com']; // аргументы, все разделены пробелом. т.е. строка bla.exe -open "c:\\program files\\ololo\\ololo.txt" ... // ... будет иметь аргументы var args = ['-open','"c:\\program', 'files\\ololo\\ololo.txt"']; var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(prgpath); var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); process.run(false, args, args.length);
Key | Code | | | Key | Code | | | Key | Code |
backspace | 8 | | | e | 69 | | | numpad 8 | 104 |
tab | 9 | | | f | 70 | | | numpad 9 | 105 |
enter | 13 | | | g | 71 | | | multiply | 106 |
shift | 16 | | | h | 72 | | | add | 107 |
ctrl | 17 | | | i | 73 | | | subtract | 109 |
alt | 18 | | | j | 74 | | | decimal point | 110 |
pause/break | 19 | | | k | 75 | | | divide | 111 |
caps lock | 20 | | | l | 76 | | | f1 | 112 |
escape | 27 | | | m | 77 | | | f2 | 113 |
page up | 33 | | | n | 78 | | | f3 | 114 |
page down | 34 | | | o | 79 | | | f4 | 115 |
end | 35 | | | p | 80 | | | f5 | 116 |
home | 36 | | | q | 81 | | | f6 | 117 |
left arrow | 37 | | | r | 82 | | | f7 | 118 |
up arrow | 38 | | | s | 83 | | | f8 | 119 |
right arrow | 39 | | | t | 84 | | | f9 | 120 |
down arrow | 40 | | | u | 85 | | | f10 | 121 |
insert | 45 | | | v | 86 | | | f11 | 122 |
delete | 46 | | | w | 87 | | | f12 | 123 |
0 | 48 | | | x | 88 | | | num lock | 144 |
1 | 49 | | | y | 89 | | | scroll lock | 145 |
2 | 50 | | | z | 90 | | | semi-colon | 186 |
3 | 51 | | | left window key | 91 | | | equal sign | 187 |
4 | 52 | | | right window key | 92 | | | comma | 188 |
5 | 53 | | | select key | 93 | | | dash | 189 |
6 | 54 | | | numpad 0 | 96 | | | period | 190 |
7 | 55 | | | numpad 1 | 97 | | | forward slash | 191 |
8 | 56 | | | numpad 2 | 98 | | | grave accenth | 192 |
9 | 57 | | | numpad 3 | 99 | | | open bracket | 219 |
a | 65 | | | numpad 4 | 100 | | | back slash | 220 |
b | 66 | | | numpad 5 | 101 | | | close braket | 221 |
c | 67 | | | numpad 6 | 102 | | | single quote | 222 |
d | 68 | | | numpad 7 | 103 | | |
Отредактировано InfSub (11-10-2019 04:27:53)
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
баг функций iimGetLastExtract() и ее аналога iimGetExtract()
Добавлено 29-09-2015 01:13:53
перезапуск FF с помощью iMacros+cmd
Ждем пару (5-10) сек
убиваем просец, фаерфокс taskkill /F /IM FirefoxPortable.exe
опять ждём пару (10-30) сек
И запускаем снова мозиллу с параметрами, что бы в ней сразу стартанул нужный скрипт
start "РЕСТАРТ МОЗИЛЛЫ" "D:\FirefoxPortable.exe" imacros://run/?m=твой_скрипт.js
Для паузы используй команду слеп или если будет ругаться
то так
ping -n 1 -w 5000 192.168.254.254 >nul
где -w 5000 это пауза в миллисекундах 5000 = 5 сек
SET pathToFirefox=D:\FIREFOX\ timeout /T 5 /NOBREAK taskkill /F /IM FirefoxPortable.exe timeout /T 20 /NOBREAK START "РЕСТАРТ МОЗИЛЛЫ" %pathToFirefox%\FirefoxPortable.exe imacros://run/?m=твой_скрипт.js timeout /T 5 /NOBREAK exit
code by: PRESIDENT
Отредактировано InfSub (29-09-2015 01:13:53)
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
пример функции для работы с вкладками (js)
//tabActs() - перейти на 1 вкладку //tabActs(3) - перейти на 3 вкладку //tabActs(3,1) - перейти на 3 вкладку и закрыть //tabActs(3,2) - перейти на 3 вкладку и закрыть все остальные var r=tabActs(2,1); //alert(r?'найдена':'не найдена'); function tabActs(a,b){ //a - номер вкладки по порядку неважно с какой страницы запущен скрипт //b - что нужно сделать с вкладкой 1-закрыть 2-перейти на неё и закрыть все остальные var a=a||1,b=b||0,c='SET !TIMEOUT_STEP 0\nTAB T='; while(iimPlayCode(c+'0')==1); if(iimPlayCode(c+a)==1){ switch(b){ case 1: iimPlayCode('TAB CLOSE'); break; case 2: iimPlayCode('TAB CLOSEALLOTHERS'); break; }; return true; }; return false; }
code by: InfSub
var Tabs = { _browser: function () { var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); return wm.getMostRecentWindow("navigator:browser").gBrowser; }(), go: function (tabIndex) { this._browser.selectedTab = this._browser.tabContainer.childNodes[tabIndex - 1]; } };
пример использования:
Tabs.go(1); // переход на первую вкладку iimPlayCode("WAIT SECONDS=3"); Tabs.go(2); iimPlayCode("WAIT SECONDS=3"); Tabs.go(3);
Отредактировано InfSub (05-11-2016 19:14:34)
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
как присвоить переменной рандомное (случайное) значение
Отредактировано InfSub (05-06-2016 15:28:18)
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Решил добавить сюда свою старую статью, думаю многим будет полезно, единственное что сайт над которым издевались уже не работает.
Думаю многим начинающим будет интересно. Начнём пожалуй с преимусчеств проигрывания 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=*
Как же это будет выглядеть на js?Есть два варианта
Не правильный но рабочий: каждую строку воспроизвести через 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);
Стоит немного остановится на стоке iimPlayCode(macros);.
Варианты:
iimPlayCode(macros); - проиграть макрос с параметрами по умолчению
iimPlayCode(macros,50); - проиграть макрос и дать на выполнение макроса 50 секунд, не путайте с другими таймаутами. По умолчанию таймаут равен 600 секунд.
var resultat = iimPlayCode(macros); - таким образом можно унать результат выполнения макроса, что иногда бывает очень полезно. resultat будет равен 1 если макрос выпонился без ошибок.Возьмём за основу второй вариант. Следует отметить что возможны варианты когда авторизация не требуется, поэтому нужно разделить наш макрос. Давайте сделаем для авторизации отдельную функцию.
скрытый текстВыделить кодКод:
//Функции и пременные 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('Возникли ошибки при авторизации'); }
Добавлено 17-07-2016 18:15:01
ПродолжимБыло бы глупо пытаться авторизироваться на сайте если этого не требуется, поэтому напишем проверку нужно нам это или нет. Есть много вариантов, но я выбрал может не самый лучший но как мне показалось более наглядный для обучения. Будем проверять наличие элемента на странице. Если пользователь авторизирован то на всех основных станицах присутсвует состояние его счёта
скрытый текст
Откроем firebug и помотрим как мы можем определить наличие этого элемента.скрытый текст
Как мы видим это ссылка с атрибутом href="/account/insert". Предлагаю извлекать колличество денег на счёте для покупок (оно нам ещё пригодится в будущем) и если там не пусто пропускать авторизацию. Можно сразу записать это действие в виде функции. Ну и плюс добавить новые возможности в тело скрипта.скрытый текстВыделить кодКод:
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();
После запуска в консоли видим печальную картинускрытый текст
Оказывается элементов с такими атрибутами несколько. Исправить ситуацию можно указав позицию элемента. В нашем случае POS=2скрытый текстВыделить кодКод:
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; }
Добавлено 17-07-2016 18:17:00
Следующими пунктами будет организация покупки пиратов и вывод средств. Здесь есть пара моментов которые стоит учесть. Функции getBalancePokupki() и getBalanceVivod() возвращают строку, а нам нужно число для нормального оперирования получеными данными. Увидеть это можно выполнив window.console.log(getBalancePokupki()+123), в консоли покажет 25.00123. Произошла конкатенация двух строк '25.00' и '123' вместо нужного сложения двух чисел. Для получения желаемого результата нужно преобразовать строку в число. В js для этого применяют: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); } }
сылка на pastebin http://pastebin.com/YYWJ6r3JP.S. Прошу простить за возможные орфографические ошибки (при указании исправлю), адекватная критика приветствуется. Стоит учитывать что скрипт носит обучающий характер и не претендует на чистоту кода и оптимальность алгоритма действий.
Отредактировано InfSub (05-11-2016 19:20:26)
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
решение для смены личности в Tor
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator) .getMostRecentWindow("navigator:browser"); // Пример использования iimPlayCode('URL GOTO=https://whoer.net'); iimPlayCode('WAIT SECONDS=5'); wm.torbutton_new_circuit(); // Меняем цепочку соединения iimPlayCode('URL GOTO=https://whoer.net');
code by: Nagibaka
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Примеры имитации клика мыши на Javascript
// Кликнет по кнопке субмита window.document.querySelector("input[type=submit]").click(); // Кликнет по элементу с id="sbm" window.document.querySelector("#sbm").click(); // Кликнет по первому элементу с классом class="btn" window.document.querySelector(".btn").click(); // Кликнет по второму элементу с классом class="btn" window.document.querySelectorAll(".btn")[1].click();
code by: Nagibaka
// Кликнет по элементу с id="sbm" var targetNode = window.document.querySelector("#sbm"); if (targetNode) { triggerMouseEvent (targetNode, "mouseover"); triggerMouseEvent (targetNode, "mousedown"); triggerMouseEvent (targetNode, "mouseup"); triggerMouseEvent (targetNode, "click"); } else window.console.log ("*** Target node not found!"); function triggerMouseEvent (node, eventType) { var clickEvent = window.document.createEvent ('MouseEvents'); clickEvent.initEvent (eventType, true, true); node.dispatchEvent (clickEvent); }
code by: karginaolga
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Как отключить ADBLOCK с помощью iMacros+JS
var Cc=Components.classes, Ci=Components.interfaces; var prf=Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch); prf.setBoolPref("extensions.adblockplus.enabled",0);
code by: PRESIDENT
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Как правильно закрыть FireFox из скрипта
function a () { window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebNavigation) .QueryInterface(Components.interfaces.nsIDocShellTreeItem) .rootTreeItem .QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIDOMWindow) .document.getElementById('menu_FileQuitItem').click() } a()
code by: Hamzat
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
свернуть/развернуть окно браузера с помощью скрипта
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebNavigation) .QueryInterface(Components.interfaces.nsIDocShellTreeItem) .rootTreeItem.QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIDOMWindow); mainWindow.minimize() //сворачиваем браузер mainWindow.onTitlebarMaxClick()//разворачиваем браузер
code by: karginaolga
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
обработчик для работы с DOM незагруженной страницы
решение с переходом на активную новую вкладку:
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebNavigation) .QueryInterface(Components.interfaces.nsIDocShellTreeItem) .rootTreeItem .QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIDOMWindow); //Заворачиваем открытие вкладки и переход на неё в метод getBrowserForTab(), чтобы определить цель события для обработчика var newTabBrowser = mainWindow.gBrowser.getBrowserForTab(mainWindow.gBrowser.selectedTab = mainWindow.gBrowser.addTab("https://forum.mozilla-russia.org/")); //Любая функция, которая будет вызываться обработчиком function ready(){ alert(newTabBrowser.contentDocument.body.innerHTML); newTabBrowser.removeEventListener("DOMContentLoaded", ready, true);//Удаляем обработчик }; //Назначаем обработчик для newTabBrowser, который сработает на этапе загрузки HTML newTabBrowser.addEventListener("DOMContentLoaded", ready, true);
Или напротив откладывать работу до полной загрузки содержимого страницы:
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
var imJS = { get Ci() { return Components.interfaces; }, get Cu() { return Components.utils; }, setCookie: function setCookie(cookies) { this.Cu.import("resource://gre/modules/Services.jsm"); for (var i = 0; i < cookies.length; i++) { Services.cookies.add(cookies[i].host, cookies[i].path, cookies[i].name, cookies[i].value, cookies[i].isSecure, cookies[i].isHttpOnly, cookies[i].isSession, cookies[i].expiry); }; }, getCookie: function(domain) { this.Cu.import("resource://gre/modules/Services.jsm") var services = Services.cookies.getCookiesFromHost(domain); var listCookies = []; while (services.hasMoreElements()) { var cookie = services.getNext().QueryInterface(this.Ci.nsICookie2); listCookies.push(cookie); }; return listCookies; }, } // Использвоние imJS.getCookie('vk.com'); // Получаем куки и сохраняем в json файл или как удобно на диск // В следущем заходе берем куки с диска, переводите в массив JSON.parse() imJS.setCookie(cookies /* Передаем массив кукис */ )
code by: Hamzat
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует