9.JavaScript циклы.

 

Задачи, которые нужно повторять больше одного раза можно поместить в цикл. Цикл может быть как определенное количество раз, так и выполняться безконечно. В JavaScript он обозначается так:

Первая строка говорит нам дословно следующее:

Ох и сложно, вздыхаете вы. Не cложнее чем работать на стройке. Или в шахте. Так что сцепили зубы и и продолжаем выполнение нашего ТЗ:

Заказчик поставил условие что запросов, по которым мы должны искать видео должно быть очень много. Поэтому открываем наш файл C:\iMacros\Macros\Обучение\zapros.txt

и добавляем в него еще 2 строки:

JavaScript

Macros

и сохраняем. Теперь научим наш браузер нырять в  zapros.txt, вытягивать оттуда все строки по очереди и переходить по ним:

Разберем по строкам:

Как вы видите теперь уже мы создаем переменную i и даем ей значение 1, сейчас поймете почему

Затем в условии мы пишем. Выполнять код пока i меньше или равно 3(нам нужно выбрать три строки из файла)

Дальше код не меняется, вплоть до 5 строки. В ней мы указываем, из какой строки файла брать данные в переменную:

Обратите внимание как мы хитро используем свою переменную i Каждый заход цикла она будет увеличиваться на один. Соответственно с этим данные из файла будем брать все ниже и ниже. Начнем с первой строки, и закончим третьей. Возможно в этом месте вас смутят плюсы вокруг i на самом деле они обозначают просто что мы ее внедряем в код аймакрос. Так уж создан джаваскрипт, чтоб добавить строку ее нужно слаживать.

Весь остальной код мы с вами уже разобрали.

Сложно? Не думаю. Заставьте себя понять этот код. Скорее всего у вас и не получится. У меня например сразу не получалось. Знаете что я делал? Просто копировал код из разных источников, и немного его изменял под себя. Иногда понимание приходит со временем. Само собой. Так что не волнуйтесь если что-то не понятно.

Перейти к следующему уроку!

  24 комментария to “9.JavaScript циклы.”

  1.  

    Читая одну статью за другой, складывается такое впечатление, что автор не только хорошо понимает iMacros, но и человеческую психологию. Уж очень приятно изучать новое для себя, ощущая вашу поддержку!

  2.  

    Здравствуйте. Нужна ваша помощь! Есть два скрипты Js и iim ставлю циклы в js, потом он — вызывает iim. В iim указанный файл C: \ file.тхт — есть 66 ссылок и надо чтобы они шли подряд, а когда я запускаю Js циклы идут но вытягивает первую ссылку с file.txt и при повторном цикле тоже. Обяснить пожалуйста нубу что не так делаю?

    var i;
    for (i=1;i<=50;i++){
    iimSet("LINE",i);
    iimPlay("spam.iim",60);
    }

    SET !REPLAYSPEED FAST
    SET !ERRORIGNORE YES
    SET !ERRORCONTINUE YES
    TAB T=1
    SET !VAR8 EVAL("var randomNumber=Math.floor(Math.random()*10 + 20); randomNumber;")
    SET !VAR6 EVAL("var random=Math.floor(Math.random()*11 + 15); random;")
    SET !VAR7 EVAL("var random=Math.floor(Math.random()*2 + 15); random;")
    SET !DATASOURCE C:\file.txt
    SET !DATASOURCE_COLUMNS 66
    SET !LOOP 1
    SET !DATASOURCE_LINE {{!LOOP}}
    WAIT SECONDS={{VAR8}}
    URL GOTO={{!COL1}}
    WAIT SECONDS={{VAR7}}
    WAIT SECONDS=5
    CMDLINE !DATASOURCE coment.txt
    SET !DATASOURCE_LINE 1
    TAG POS=1 TYPE=DIV ATTR=TXT:Написать*
    TAG POS=1 TYPE=TEXTAREA ATTR=ID:post_field CONTENT={{!COL1}}
    TAG POS=1 TYPE=BUTTON ATTR=ID:send_post
    WAIT SECONDS={{VAR6}}
    WAIT SECONDS=10

    •  

      Тяжело понять чужой код не видя на практике. Ошибки есть, например строка DATASOURCE_COLUMNS 66 говорит что в этом файле 66 колонок,
      Строка SET !DATASOURCE_LINE {{!LOOP}} и будет вам давать всегда первую строку из файла.
      Нужно SET !DATASOURCE_LINE {{!LINE}}
      Возможно имеются еще ошибки…

      •  

        И так
        SET !LINE 1
        SET !DATASOURCE_LINE {{!LINE}}
        и так менял
        SET !LOOP 1
        SET !DATASOURCE_LINE {{!LOOP}}
        Сам iim хорошо работает отдельно, ставишь повторы он извлекает ссылки по порядку

        А вот разом с Js все як раньше, надо вчитись…

      •  

        То для вк. C: \ file.тхт — ссылки на группы.

  3.  

    Здравствуйте, возник вопрос по циклах.
    Допустим есть сайт со списком ссылок. И на одной странице показывается только 10 ссылок а станицы 3
    Например:
    Ссылка1
    ССылка 2
    Ссылка 3
    Ссылка 10
    ——

    Надо сохранить в файл эти 30 ссылок.
    Вот вариант JS файла

    var а = 1; // С какой строки начать
    var б = 5; // Кол-во (циклов)
    var с = 3; // Кол-во страниц
    for (var z=1;z<=с;z++)// цикл перебора страниц
    {
    for (i=1;iб){
    iimPlay(«teleadreson/2.iim»,60); // макрос нажимающий переход на следующую страницу
    }
    }
    Если я включу этот скрипт, то он выберет на первой странице — (1- 5 ссылок )(переменная б) и перейдет на вторую страницу, но там он начнет перебор с (6 -10), а на третей странице (10-15)
    Вопрос, как сделать, чтобы на каждой странице цикл начинался заново с 1 позиции?

    •  

      здравствуйте. Хороший вопрос, такие случаи встречаются часто.
      конкретно на вашем примере я бы поступил вообще не так. Скорее всего вы вообще не знаете количество страниц которые выпадут. Тоесть каждый раз это количество будет разным. Чтоб не привязываться конкретно к количеству, можно записать нажатие на клик по номеру страницы
      например так:
      TAG POS=2 TYPE=A ATTR=HREF:*?p=1*&&CLASS:pagination__page
      в этом случае клик на кнопку второй страницы будет TAG POS=2 TYPE=A ATTR=HREF:*?p=2*&&CLASS:pagination__page
      и так далее
      В аймакросе есть ткой прикол, если клик удался он возврачает целое число, если клик не удался то -1
      Тоесть можно поставить условие например
      while(iimPlayCode(‘SET !TIMEOUT_STEP 0\nSET !TIMEOUT_PAGE 10\nTAG POS=2 TYPE=A ATTR=HREF:*?p=’+j+’*&&CLASS:pagination__page’)>0)
      тоесть цикл будет выполняться пока кнопка есть. Это будет переход по страницам.:
      do{
      //выполняется условие
      }while(iimPlayCode(‘SET !TIMEOUT_STEP 0\nSET !TIMEOUT_PAGE 10\nTAG POS=2 TYPE=A ATTR=HREF:*?p=’+j+’*&&CLASS:pagination__page’)>0)// пока нажимается на кнопку
      и do вписать уже цикл сбора ссылок, примерно так может выглядеть все вместе:
      j=0
      do{
      for(i=1;i<30; i++){
      // сбор ссылок
      }
      j++
      }while(iimPlayCode('SET !TIMEOUT_STEP 0\nSET !TIMEOUT_PAGE 10\nTAG POS=2 TYPE=A ATTR=HREF:*?p='+j+'*&&CLASS:pagination__page')>0)

      •  

        Спасибо за ответ, но если так запустим, то скрипт запустит цикл, соберет первые 30 ссылок с первой страницы, посмотрит активна ли кнопка next, если активна, то перейдет на следующую страницу и начнет с номера 31 на следующей странице, а нужно, чтобы он начал с номера 1. Потому что, на странице номер 3 он будет начинать с номера ссылки 61.
        Нужно повторять с начала цикл сбора 30 ссылок, после каждого нажатия next. Я не могу придумать, как его заставить начинать на следующей странице с первой ячейки.

  4.  

    вот управляющий файл, а то что то не скопировало
    for (var z=1;z<=с;z++)
    {

    for (i=1;iб){
    iimPlay(«teleadreson/2.iim»,60);
    }
    iimDisplay(z);
    iimSet(«z», z);
    }

    •  

      вы меня не слышите. Вы вибираете ссылку по порядковому номеру ее нахождения на странице. Это номер элемента DOM если это страница из 30 ссылок цикл будет выбирать с первой по 30, если на странице 1000 ссылок то будет с первой по 1000
      Просто если страниц много эту выборку помещаете в цикл перехода по страницам

    •  

      for(i=1;i<30; i++){
      }
      дословно означает :
      i = 1 пока i < 30 выполнять цикл тоесть каждый раз выбираться будет первая ссылка на странице.

  5.  

    Здравствуйте, уважаемый учитель!
    Хочу спросить — возможно ли выбирать из таблицы случайную строку, а не по циклу?
    Ну то есть все воспроизводить в цикле, но не по порядку перебирать строки, а в случайном порядке? Как это можно реализовать? Заранее спасибо!

    •  

      Есть несколько способов, например выбрать изначально все строки в массив, а потом рандомно их перебирать.
      Но еще более простой способ это зайти на файл по ссылке. Если это текстовый документ, то он откроется в браузере. Со страницы можно все выбрать и превратить в массив, где разделителем будет перенос строки \n
      Затем можно просто перемешать массив например такой функцией
      function compareRandom(a, b) {
      return Math.random() — 0.5;
      }
      arr_count.sort(compareRandom);
      А потом просто перебирать перемешанный массив

  6.  

    Есть такой код под Imacros напишу его схематически

    {Функция 1}

    {Функция 2}

    while (true) {

    iimPlayCode(«TAG POS=1 TYPE=DIV ATTR=DATA-RELOAD:list&&CLASS:vkt-content__camp-button \n WAIT SECONDS=30»);// обновить страницу
    iimPlayCode(«SET! EXTRACT NULL \n TAG POS=1 TYPE=P ATTR=DATA-BIND:type_name EXTRACT=TXT WAIT SECONDS=10 \n «); // берем данные с сайта в stroka

    stroka = iimGetLastExtract(); // берем данные с сайта в stroka

    if (stroka == «Поставьте лайк на странице»){iimPlayCode(функция 1);}
    if (stroka == «Вступите всообщество»){iimPlayCode(функуия 2);}

    }

    Работа кода заключается в том, что он находит нужную ссылку на сайте, срабатывает {функция1 } и переходит по ней, затем возвращается к циклу и обновляет страницу, а мне нужно что бы он проверял есть ли еще ссылки ниже первой и если их нет обновить страницу.

    •  

      реализуйте проще. Пусть скрипт проверяет сразу есть ли ссылки, если есть пусть записывает их в массив. Потом, если длина массива > 0, то он иперебирает ссылки в массиве и выполняет нужную вам функцию.

  7.  

    подскажите — есть простой цикл
    for (i=1; i3 цикл начинался сначала и так по кругу бесконечное количество раз?

  8.  

    Всем привет!!!. Такой вопрос: У меня не выполняет команду вбить поисковой запрос, вроде все как у вас!!! Как только переходит по сылке на ютуб перешагивает «вбить в поиск и искать». А когда вообще убираю сылку и запускаю уже на ютубе, все работает, все ищет.
    И в предыдущем уроке то же самое было, после прохода по сылке ну может вести в поиск и пролетает.
    for (i=1;i<=3;i++){//создаем переменную i, цикл будем выполнять 3 раза
    var macro; // создаем переменную macro
    macro = "CODE:"; // говорим нашему скрипту что в нее впишем код аймакрос
    macro += "CMDLINE !DATASOURCE C:\\iMacros\\Datasources\\zapros.txt" + "\n"; // подключаем текстовый файл
    macro += "SET !DATASOURCE_LINE "+i+ "\n";// из какой по счету строки брать данные
    macro += "ADD !EXTRACT {{!COL1}}" + "\n"; // берем данные в переменную {{!COL1}}
    macro += "URL GOTO=https://www.youtube.com/?hl=ru&gl=RU" + "\n"; // заходим на ютуб
    macro += "TAG POS=1 TYPE=INPUT:TEXT FORM=ID:masthead-search ATTR=ID:masthead-search-term CONTENT={{!COL1}}" + "\n"; // вбиваем в поиск данные из переменной
    macro += "TAG POS=1 TYPE=BUTTON FORM=ID:masthead-search ATTR=ID:search-btn" + "\n"; // нажимаем поиск
    iimPlay(macro) // вызываем переменную запуская тем самым код, который туда вписали.
    }
    Буду благодарен за помощь, напишите вк пожалуйста IvanVig94@mail.ru.

  9.  

    Подскажите пожалуйста как исправить Imacros что бы с каждым циклом ввод цифр увеличивался на 1 ?

    VERSION BUILD=8970419 RECORDER=FX

    TAB T=1

    URL GOTO=http://probnik/login.php

    TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:pas.php ATTR=NAME:login CONTENT=12345

    SET !ENCRYPTION NO

    TAG POS=1 TYPE=INPUT:PASSWORD FORM=ACTION:pas.php ATTR=NAME:password CONTENT=00001 (В этой строчке +1 с каждым циклом )

    TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:pas.php ATTR=NAME:submit

    И когда пароль совпадет цикл остановился .
    Заранее благодарен !

    •  

      я не пишу макросы в таком формате как у вас, я пишу сразу скрипты в файл .js
      Это легче и удобнее.
      В вашем случае код будет примерно такой:
      iimPlayCode(‘URL GOTO=http://probnik/login.php’)
      iimPlayCode(‘TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:pas.php ATTR=NAME:login CONTENT=12345’)
      for(i=0; i<1000000 ; i++){
      iimPlayCode('SET !ENCRYPTION NO')
      iimPlayCode('TAG POS=1 TYPE=INPUT:PASSWORD FORM=ACTION:pas.php ATTR=NAME:password CONTENT='+i)
      iimPlayCode('TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:pas.php ATTR=NAME:submit')
      }
      в этом случае будет в поле прописываться порядковое число от 0 до 1000000
      если вам нужно еще нули добавлять перед этим числом, то нужно дописать еще одно условие с использованием переменной i
      если вам нужно чтоб цикл останавнивася после того как пароль подойдет, нужно поставить дополнительную проверку.

  10.  

    У меня постоянно пишет ошибку
    SyntaxError: missing ; before statement, line 3 (Error code: -991). мой скрипт
    for (var i = 1; i ;
    macro+=»URL GOTO=https://www.youtube.com»+»\n»;
    macro+=»SET !DATASOURCE C:\\bd\\login.txt»+»\n»;
    macro+=»SET !DATASOURCE_LINE»+i+»\n»;
    macro+=»ADD !EXTRACT {{!COL1}} «+»\n»;
    macro+=»TAG POS=1 TYPE=INPUT:TEXT FORM=ID:masthead-search ATTR=ID:masthead-search-term CONTENT={{!COL1}}»+»\n»;
    macro+=»TAG POS=1 TYPE=BUTTON FORM=ID:masthead-search ATTR=ID:search-btn»+»\n»;
    iimPlay(macro)
    }
    в чем прблема?

Добавить комментарий