Здравствуйте.
Есть сайт на котором за клацанье по кнопке "Тыкни" начисляют баллы. Есть макрос, который постоянно клацает на эту кнопку.
Но! Над кнопкой всегда пишут обычным текстом (без капчи) какое количество очков ты получишь за данное нажатие(от 1 и выше). И можно либо клацнуть по кнопке и в большинстве случаев получить всего 1 бал, а потом ждать, либо нажать кнопку "Пропустить" и моментально получить следующее предложение.
Цель: Макрос должен перед нажатием на кнопку "Тыкни" проверить эту текстовую строчку и в случае если обещанное количество баллов будет больше или равно 4 то произойдет нажатие на кнопку "Тыкни" после чего продолжится выполнение макроса по сценарию. Если же предложенное кол-во баллов будет меньше 4, то должно произойти нажатие на кнопку "Пропустить". И так по кругу пока не выпадет >=4
Основной макрос который работает сейчас.
VERSION BUILD=8300326 RECORDER=FX SET !ERRORIGNORE YES SET !TIMEOUT_TAG 1 SET !TIMEOUT_STEP 1 SET !TIMEOUT_PAGE 7 SET !REPLAYSPEED FAST TAB T=1 TAG POS=1 TYPE=A ATTR=TXT:Бар<SP>пивной WAIT SECONDS=7 TAG POS=1 TYPE=DIV ATTR=TXT:КнопкаТыкни TAB T=2 FRAME F=0 TAG POS=1 TYPE=BUTTON ATTR=TXT:Follow TAB T=2 WAIT SECONDS=8 TAB CLOSE TAB T=1 WAIT SECONDS=12
VERSION BUILD=8300326 RECORDER=FX SET !ERRORIGNORE YES SET !TIMEOUT_TAG 1 SET !TIMEOUT_STEP 1 SET !TIMEOUT_PAGE 7 SET !REPLAYSPEED FAST TAB T=1 TAG POS=1 TYPE=A ATTR=TXT:Бар<SP>пивной WAIT SECONDS=7 ##Вот на этом моменте хорошо бы втиснуть цикл типа "if else" или "do while. ##1)Прочесть строку с информацией о начисленных после нажатия на кнопку "Тыкни" баллах. 2)Если баллы >=4 то идем дальше. ##4)Иначе клацаем кнопку "пропустить" и снова читаем ##строку с информацией о баллах. И так по кругу. ##Вот строчка о кол-ве баллов которые будут начислены. (TAG POS=1 TYPE=B ATTR=TXT:Ты<SP>получишь<SP>4<SP>балла<SP>за<SP>нажатие.) ##А вот адрес кнопки на пропуск (TAG POS=1 TYPE=A ATTR=TXT:Skip) TAG POS=1 TYPE=DIV ATTR=TXT:КнопкаТыкни TAB T=2 FRAME F=0 TAG POS=1 TYPE=BUTTON ATTR=TXT:Follow TAB T=2 WAIT SECONDS=8 TAB CLOSE TAB T=1 WAIT SECONDS=12
Отредактировано Dkristof (29-04-2016 00:09:11)
Отсутствует
Вот на этом моменте хорошо бы втиснуть цикл типа "if else" или "do while.
так перепишите скрипт на js, в чем проблема-то?
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
for(;;){ iimPlayCode('TAG POS=1 TYPE=A ATTR=TXT:Бар<SP>пивной'); iimPlayCode('WAIT SECONDS=7'); iimPlayCode('TAG POS=1 TYPE=B ATTR=TXT:Ты<SP>получишь*нажатие. EXTRACT=TXT'); point=iimGetExtract().match(/\d+/); if(point < 4) iimPlayCode('TAG POS=1 TYPE=A ATTR=TXT:Skip'); else{ iimPlayCode('TAG POS=1 TYPE=DIV ATTR=TXT:КнопкаТыкни'); ... }}
Backend developer
PHP, JAVA, C#, Python
В личку только с серьёзными предложениями по заказу скриптов/программ.
Отсутствует
PRESIDENT
Спасибо!
Всё прекрасно работает.
Только добавил "break" в конце цикла и счетчик количества повторений общего скрипта. Зер гуд.
Не знал, что тут в js файле, можно использовать помимо прямого кода js еще и imm код через команду iimPlayCode('')
Мммм какие перспективы.
Вопрос не в тему.
Отсутствует
Кажется понял.
Там две вкладки. Одна постоянно открытая. Собственно вкладка с кнопкой.
Вторая вкладка каждую итерацию открывается и закрывается. После нажатия на кнопку "Тыкни". Далее проводятся еще несколько действий на второй вкладке, после чего отрабатывает TAB CLOSE и вторая вкладка закрывается. Всё это зациклено через счетчик на 2000 повторов.
VERSION BUILD=8300326 RECORDER=FX SET !ERRORIGNORE YES SET !TIMEOUT_TAG 1 SET !TIMEOUT_STEP 1 SET !TIMEOUT_PAGE 7 SET !REPLAYSPEED FAST TAB T=1 TAG POS=1 TYPE=A ATTR=TXT:Бар<SP>пивной WAIT SECONDS=7 for(;;){ iimPlayCode('TAG POS=1 TYPE=A ATTR=TXT:Бар<SP>пивной'); iimPlayCode('WAIT SECONDS=7'); iimPlayCode('TAG POS=1 TYPE=B ATTR=TXT:Ты<SP>получишь*нажатие. EXTRACT=TXT'); point=iimGetExtract().match(/\d+/); if(point < 4) iimPlayCode('TAG POS=1 TYPE=A ATTR=TXT:Skip'); else{ iimPlayCode('TAG POS=1 TYPE=DIV ATTR=TXT:КнопкаТыкни'); //вот тут происходит переход по кнопке "тыкни" Открывается новая вкладка. }} iimPlayCode('..........................'); // тут происходит действия на второй вкладке. WAIT SECONDS=8 //ждем 8 сек TAB CLOSE //закрываем вторую вкладку TAB T=1 WAIT SECONDS=12 //снова оказываемся на первой вкладке с кнопкой "тыкни" и ждем 12 сек.
VERSION BUILD=8300326 RECORDER=FX SET !ERRORIGNORE YES SET !TIMEOUT_TAG 1 SET !TIMEOUT_STEP 1 SET !TIMEOUT_PAGE 7 SET !REPLAYSPEED FAST TAB T=1 TAG POS=1 TYPE=A ATTR=TXT:Бар<SP>пивной WAIT SECONDS=7 for(;;){ iimPlayCode('TAG POS=1 TYPE=A ATTR=TXT:Бар<SP>пивной'); iimPlayCode('WAIT SECONDS=7'); iimPlayCode('TAG POS=1 TYPE=B ATTR=TXT:Ты<SP>получишь*нажатие. EXTRACT=TXT'); point=iimGetExtract().match(/\d+/); //вот в этой строке иногда меняется значение на сайте. if(point < 4) iimPlayCode('TAG POS=1 TYPE=A ATTR=TXT:Skip'); else{ iimPlayCode('TAG POS=1 TYPE=DIV ATTR=TXT:КнопкаТыкни'); //вот тут происходит переход по кнопке "тыкни" Открывается новая вкладка. }} iimPlayCode('..........................'); // тут происходит действия на второй вкладке. WAIT SECONDS=8 //ждем 8 сек TAB CLOSE //закрываем вторую вкладку TAB T=1 WAIT SECONDS=12 //снова оказываемся на первой вкладке с кнопкой "тыкни" и ждем 12 сек.
Отредактировано Dkristof (29-04-2016 16:11:42)
Отсутствует
Вместо TAB CLOSE используй TAB CLOSEALLOTHERS - закрыть все вкладки кроме текущей.
А то у тебя получается, если у тебя всего 1 таб открыт, то таб клозе закроет весь фаерфокс.
Backend developer
PHP, JAVA, C#, Python
В личку только с серьёзными предложениями по заказу скриптов/программ.
Отсутствует
PRESIDENT
Не пойдет, TAB CLOSE закрывает именно вторую вкладку. По крайней мере должен закрывать только вторую. TAB CLOSEALLOTHERS закроет первую вкладку, т.к. на момент выполнения мы будем находиться на второй вкладке.
Ввиду обновления информации описанной в посте №5. Можно ли imacros научить распознавать разный текст на одном месте, в разные промежутки времени и в зависимости от того что там написано проводить соответствующее действие?
Пробовал что-то типа
for(;;){ iimPlayCode('TAG POS=1 TYPE=B ATTR=TXT:Ты<SP>получишь*нажатие. EXTRACT=TXT'); point=iimGetExtract().match(/\d+/); iimPlayCode('TAG POS=1 TYPE=B ATTR=TXT:Закончились<SP>баллы. EXTRACT=TXT'); nopoint=iimGetExtract().match(/\d+/); if(point < 4) iimPlayCode('TAG POS=1 TYPE=A ATTR=TXT:Skip'); else if(nopoint >= 0) iimPlayCode('REFRESH'); //тут по идеи страница должна обновиться. Но ничего хорошего из этого не вышло. Скрипт вообще перестал адекватно разбирать информацию из этой текстовой строки. else{ iimPlayCode('TAG POS=1 TYPE=DIV ATTR=TXT:КнопкаТыкни'); }}
Отредактировано Dkristof (29-04-2016 16:33:40)
Отсутствует
... if(iimPlayCode('TAG POS=1 TYPE=B ATTR=TXT:Закончились<SP>баллы.')>0) iimPlayCode('REFRESH'); ...
TAB CLOSE закрывает именно вторую вкладку. По крайней мере должен закрывать только вторую
Сделай переход на первую вкладку и потом закрыть все кроме текущей.
У тебя поэтому браузер сам и закрывается, что иногда вторая вкладка не открывается и скрипт закрывает одну единственную, т.е. полностью ФФ.
Где то в настройках мазилы есть галочка, типа не закрывать браузер после закрытия всех вкладок.
Отредактировано PRESIDENT (29-04-2016 23:16:16)
Backend developer
PHP, JAVA, C#, Python
В личку только с серьёзными предложениями по заказу скриптов/программ.
Отсутствует
Причин закрытия вкладки было несколько.
1) Иногда, у людей были ники аналогичные с названием кнопки. И скрипт кликал по ним, естественно перехода на новую страницу не происходило. Далее скрипт закрывал наш сайт.
Решение: записывать координаты кнопки примерно след. образом. О схожих с кнопкой словах можно забыть.
function proverkaURL() { var privyzkaOK = "Москва - большой город"; // задаем текст с которым скрипт будет сверяться перед закрытием вкладки iimPlayCode('TAG POS=1 TYPE=H2 ATTR=TXT:* EXTRACT=TXT'); privyzkaPARS=iimGetExtract().match(/\D+/); // скрипт считывает текст и заносит его в переменную "privyzkaPARS" iimPlayCode('WAIT SECONDS=1') if (privyzkaPARS == privyzkaOK){ // тут наш считанный со страницы текст сверяется с заранее заданным текстом в переменной privyzkaOK. iimPlayCode('TAB CLOSE'); // и если текст будет идентичным то вкладка закроется. Если скрипт такого текста не найдет, то закрываться ничего не будет. } }
Отредактировано Dkristof (11-05-2016 23:12:22)
Отсутствует
3 - Поиск по форуму iMacros по слову "перезапуск" и аналогичным
2 - команда tab closeallothers при правильном применении - решает все проблемы
1 - читаем внимательно форум, особенно 2 основных темы, на предмет, как правильно идентифицировать элемент на странице
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Браузер через некоторое время зависает и крашится. Иногда через 2 часа, иногда через 4. Решения не нашел. Похоже мозила в паре с imacros с каждой минутой потребляет все больше и больше оперативной памяти. В итоге давится и крашится. Это только у меня так?
У себя я делаю так . В строке набери about:config и поменяй
browser.cache.disk.enable - выбери false
dom.ipc.plugins.enabled - выбери false
browser.tabs.closeWindowWithLastTab - выбери false
browser.sessionhistory.max_total_viewer - выбери 0
Отсутствует
dim222
удалено, избыточное цитирование
Не помогло. По прежнему за полтора чача процесс firefox.exe отжирает более 1гб памяти. Причем даже если остановить скрипт, закрыть все вкладки и оставить лишь одну с пустой страницей, firefox.exe уменьшиться лишь немного. Останется занято примерно 600 мб.
Если же скрипт будет продолжать работать то firefox.exe разрастется до 4гб и благополучно загнется.
InfSub
Отсутствует
Dkristof
Уже много раз обсуждалось;
переходи на старую добрую портабельку 3.6.* и АБП к ней.
Пробуй АБП установить и правильно фильтры настрой, те все фильтра и подписки что там удали вообще.
Если не знаешь как свои фильтра составлять пиши на ВП адрес сайта, помогу.
Backend developer
PHP, JAVA, C#, Python
В личку только с серьёзными предложениями по заказу скриптов/программ.
Отсутствует
PRESIDENT
в 3.6 не все работает и не все сайты подгружают требуемое
так что, тут перезапуск FF через cmd only
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
PRESIDENT
К сожалению да, версия 3.6 половину сайтов не загружает. На второй половине проблемы с авторизацией. (например, в том же инстаграме авторизоваться не получилось)
эх жаль. А что такое АДП ? АдблокПлюс? И зачем удалять существующие фильтры?
InfSub
Прежде чем разбираться как это реализовать, данный трюк прокатит в unix системах? Debian\ubuntu?
Отредактировано Dkristof (12-05-2016 22:52:27)
Отсутствует
Dkristof
Прокатит везде, где вы можете запустить программу (firefox) передав ей параметры, через консоль (для Win - это cmd, для *nix - bash/sh и т.д.)
Добавлено 12-05-2016 23:18:01
Да, АБП - это adblock plus, а фильтры удаляются для облегчения и меньшей прожорливости, создаете свои только под нужные сайты, а не под все возможные (по умолчанию)
Отредактировано InfSub (12-05-2016 23:18:01)
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
Друзья, помогите с условием
Очень на вас надеюсь, не могу ответ найти на просторах интернета.
InfSub
Отредактировано Slavon (21-07-2017 11:59:51)
Отсутствует
не могу ответ найти на просторах интернета.
И по какому же вы запросу искали, что не смогли найти то, что разжевано в основах любого языка программирования, не говоря про то, что в разделе iMacros на этом форуме, тысячи примеров подобного кода
..не говоря про то, что даже в этой теме есть примеры реализации подобной схемы действия скрипта (зависящей от условия)
Отредактировано InfSub (21-07-2017 22:50:25)
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует
То, что я вывел не работает:
for (;; ){ if(iimPlay("CODE:SET !TIMEOUT_STEP 1\n TAG POS=1 TYPE=BUTTON ATTR=TXT:Оплатить")<0){ break; }else{ iimPlayCode('SET !TIMEOUT_STEP 1 \n TAG POS=1 TYPE=SPAN ATTR=TXT:Отмена \n TAG POS=1 TYPE=BUTTON ATTR=TXT:Отмена'); }};
InfSub
Отсутствует
Slavon
экстрасенсы в отпуске, так что:
- во первых читаем правила, форума и раздела iMacros
- задаем вопрос так, чтобы на него можно было ответить, а не гадать:
-- что значит не работает? что не работает? не работает "отмена" или не работает "оплатить"? краткость - сестра таланта? - если да, то вам не сюда, иначе - потрудитесь задать вопрос так, чтобы не было еще сотни наводящих вопросов;
-- приведите вывод iimGetErrorText() после каждого вызова iimPlay()/iimPlayCode(), например;
-- убедитесь, что кнопки "оплатить" нет на сайте, в тот момент, когда вы ее не видите...
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует