>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >iMacros http://forum.mozilla-russia.org/viewforum.php?id=42 >[РЕШЕНО] Цикл с условием http://forum.mozilla-russia.org/viewtopic.php?id=69828 |
Dkristof > 29-04-2016 00:02:44 |
Здравствуйте. Есть сайт на котором за клацанье по кнопке "Тыкни" начисляют баллы. Есть макрос, который постоянно клацает на эту кнопку. Цель: Макрос должен перед нажатием на кнопку "Тыкни" проверить эту текстовую строчку и в случае если обещанное количество баллов будет больше или равно 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 Есть идеи как это можно сделать? |
InfSub > 29-04-2016 00:32:25 |
Dkristof пишет
так перепишите скрипт на js, в чем проблема-то? |
PRESIDENT > 29-04-2016 00:36:54 |
скрытый текст Выделить код Код: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:КнопкаТыкни'); ... }} |
Dkristof > 29-04-2016 12:24:28 |
PRESIDENT скрытый текст Почему может вылетать браузер "iceweasel" под Debian, примерно через час выполнения скрипта? Причем без каких либо ошибок, просто закрывается. |
Dkristof > 29-04-2016 15:12:28 |
Кажется понял. Там две вкладки. Одна постоянно открытая. Собственно вкладка с кнопкой. скрытый текст Выделить код Код: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 сек. Теперь проблема. Иногда, на том же месте, заместо "Ты<SP>получишь*нажатие" выскакивает другая надпись: "TAG POS=1 TYPE=B ATTR=TXT:Баллов<SP>пока<SP>нет" Скрипт не понимает эту строчку, а следственно не происходит переход на вторую вкладку и скрипт с радостной улыбкой закрывает сам себя. Вот только почему это происходит рандомно. Скрипт может либо проскочить этот момент, либо закрыть страницу. О_О скрытый текст Выделить код Код: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 сек. |
PRESIDENT > 29-04-2016 15:17:51 |
Вместо TAB CLOSE используй TAB CLOSEALLOTHERS - закрыть все вкладки кроме текущей. |
Dkristof > 29-04-2016 15:53:34 |
PRESIDENT Ввиду обновления информации описанной в посте №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:КнопкаТыкни'); }} |
PRESIDENT > 29-04-2016 22:01:27 |
Dkristof Загляни сюда для начала Выделить код Код:... if(iimPlayCode('TAG POS=1 TYPE=B ATTR=TXT:Закончились<SP>баллы.')>0) iimPlayCode('REFRESH'); ... Dkristof пишет
Сделай переход на первую вкладку и потом закрыть все кроме текущей. |
Dkristof > 30-04-2016 00:04:51 |
PRESIDENT |
Dkristof > 11-05-2016 22:58:09 |
Причин закрытия вкладки было несколько. скрытый текст 2) Опять же иногда, после клика по кнопке, сайт тупил и сам закрывал открывшуюся вкладку по тайм ауту. Но скрипт то уже начал отрабатывать и в итоге закрывал оставшуюся вкладку с нужным сайтом. Решение немного кривое но какое есть. Можно заместо TAB CLOSE прикрутить функцию с проверкой какой-нибудь фразы с отрывающейся вкладки. Например: скрытый текст Выделить код Код: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'); // и если текст будет идентичным то вкладка закроется. Если скрипт такого текста не найдет, то закрываться ничего не будет. } } 3) Браузер через некоторое время зависает и крашится. Иногда через 2 часа, иногда через 4. Решения не нашел. Похоже мозила в паре с imacros с каждой минутой потребляет все больше и больше оперативной памяти. В итоге давится и крашится. Это только у меня так? |
InfSub > 12-05-2016 09:32:44 |
3 - Поиск по форуму iMacros по слову "перезапуск" и аналогичным |
dim222 > 12-05-2016 15:53:25 |
Dkristof пишет
У себя я делаю так . В строке набери about:config и поменяй browser.cache.disk.enable - выбери false |
Dkristof > 12-05-2016 17:50:27 |
dim222 Если же скрипт будет продолжать работать то firefox.exe разрастется до 4гб и благополучно загнется. InfSub |
PRESIDENT > 12-05-2016 18:12:44 |
Dkristof Пробуй АБП установить и правильно фильтры настрой, те все фильтра и подписки что там удали вообще. |
InfSub > 12-05-2016 18:19:21 |
PRESIDENT |
Dkristof > 12-05-2016 22:46:34 |
PRESIDENT К сожалению да, версия 3.6 половину сайтов не загружает. На второй половине проблемы с авторизацией. (например, в том же инстаграме авторизоваться не получилось) InfSub |
InfSub > 12-05-2016 23:13:32 |
Dkristof 12-05-2016 23:18:01 |
Slavon > 21-07-2017 11:49:03 |
Друзья, помогите с условием скрытый текст ---------если кнопки нет, то пропускаем этот шаг------------ скрытый текст ------если не выполненно условие выше---------- скрытый текст код публикуется в стенах code под спойлером Очень на вас надеюсь, не могу ответ найти на просторах интернета. InfSub |
InfSub > 21-07-2017 22:46:40 |
Slavon пишет
И по какому же вы запросу искали, что не смогли найти то, что разжевано в основах любого языка программирования, не говоря про то, что в разделе iMacros на этом форуме, тысячи примеров подобного кода ..не говоря про то, что даже в этой теме есть примеры реализации подобной схемы действия скрипта (зависящей от условия) |
Slavon > 24-07-2017 11:42:43 |
То, что я вывел не работает: скрытый текст Выделить код Код: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:Отмена'); }}; код публикуется в стенах code под спойлером InfSub |
InfSub > 24-07-2017 23:06:31 |
Slavon |