15.Выбор элементов из массива. Метод click().

 

Ну что же, самое страшное уже позади. Фактически мы написали с вами два рабочих куска кода:

Первый берет поисковые слова из файла и переходит по ним.

Второй собирает все ссылки на видео на странице выдачи.

Нам осталось написать третий кусочек, который будет вытягивать ссылки из нашего массива, переходить по ним, и добавлять видео в плейлист:

Отдельно этот кусочек не будет работать, потому что в нем мы используем массив arrUrl из прошлого фрагмента кода, но давайте сначала разберем по строкам, а потом обьеденим все воедино. Итак, 1 строка:

обычный цикл, какой мы использовали уже раньше. Но обратите внимание, длину массива arrUrl.length мы уже не заносим предварительно в переменную, а используем прям в условии.

И особо важно понять строку 4:

В аймакрос код мы вставили данные элемента массива. Для того чтоб вклеять, как всегда используем плюс. Но вот сам элемент массива мы вытягиваем таким способом:

Тут уже упоминалось о том, что мы мажем получать данные любого элемента массива по индексу.

Вот индекс(порядковый номер), как раз и указывается в квадратных скобках. В нашем случае это переменная i, но на ее месте может быть любая цифра(счет элементов начинается с 0). В нашем случае переменная i будет иметь значения в диапазоне от 0 до значения, которое меньше на 1 чем длина массива.

В строке 5 и 7 у нас новая команда аймакрос:

строка 6:

Повторюсь, как я добываю такие команды:

Открыл страницу ютуба, поставил аймакрос на запись.

Нажал на элемент на странице ютуба «Добавить в»

Закрыл запись, открыл файлик #Current.iim, в который пишутся действия

Скопировал команды, вставил в джаваскрипт.

Теперь очень важная строка 9:

Это клик на первой галоче в выпавшем списке. Эта галочка добавляет видео в плейлист «Посмотреть позже». Клик этот происходит посредством метода

Если раньше мы делали клики командами аймакроса, то тут используется джаваскрипт. В этом подходе есть свой плюс. Если в квадратных скобках поменяем ноль на другую цифру, то видео будет добавляться в другой плейлист. Мы вообще можем поставить простенький цикл, и видео добавится во все плейлисты. То есть мы оставляем себе возможность на будующее.

Но в этом способе есть так же и минус. Дело в работе расширения. Код аймакрос выполняется более правильно. Если какой-то элемент не найдется на странице, аймакрос поступит согласно настройкам программы, скорее всего пойдет дальше. А вот уже чистый джаваскрипт работает по-другому. Иногда, если элемент DOM не будет найден на странице, то работа скрипта прирвется с ошибкой. На такие случаи можно поставить проверку на наличие этого элемента, и этот вопрос мы позже затронем. А пока я дал по две секунды задержки после каждой команды, чтоб страница браузера нормально загрузилась.

Ну что же, пора объеденить весь код который у нас получился и запустить для тестирования:

У нас выходит что в цикл который берет слова из файла zapros.txt и переходит по запросам, мы вставили тот код который отвечает за сбор ссылок в массив, переход по ним и добавлением в плейлист. В итоге вышел скрипт, который будет работать пока есть поисковые запросы в файле. Обратите внимание, что в общем цикле я заменил переменную i на a. (строки с 1 по 19). Так бы была бы ошибка, потому что переменная используется и в других циклах.

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

  25 комментариев to “15.Выбор элементов из массива. Метод click().”

  1.  

    здравствуйте. у меня скрипт работает до строк:
    var arrUrl = [] //создаем массив в который будем добавлять ссылки на видосики
    var minKolvo =10000 //обозначаем минимальное количество просмотров

    потом вот такая ошибка:
    RuntimeError: Error loading page wyciwyg://9/https://www.youtube.com/?gl=UA&hl=ru, line 5 (Error code: -933)

    есть совет для начинающего? сижу несколько часов, мучаюсь 🙁

    •  

      Да, встречал я нечто подобное при работе с ютубом, причем ошибка эта берется из неокуда и ужодит в некуда… На нее не стоит обращать внимания.
      Для того чтоб скрипт ее игнорил и не останавливался, нужно вставить в аймакрос после
      macro = «CODE:»;
      строку
      macro = «SET !ERRORIGNORE YES»+ «\n»;
      Обратите внимание сайт каверкает двойные ковычки, поэтому подкорректируйте.
      ТЕРПЕНИЕ И ТРУД ВСЕ ПЕРЕТРУТ!

  2.  

    Спасибо. Всё заработало. Тоесть, скрипт отрабатывет без ошибок, только в плейлисты ничего не добавляет )
    Работаю-ищу решение дальше…. второй день пошёл))

  3.  

    «Иногда, если элемент DOM не будет найден на странице, то работа скрипта прирвется с ошибкой. На такие случаи можно поставить проверку на наличие этого элемента, и этот вопрос мы позже затронем. » расскажете подробнее про это столкнулся с этой проблемой

    •  

      самый простой способ ставить в том месте try{} catch () {}
      Что это такое можете загуглить. Но я стараюсь их избегать. В этом случае например вам нужно поставить клик на элемент
      тогда пишите
      if(content.document.getElementsByClassName(‘addto-playlist-item yt-uix-button-menu-item’)[0]){
      content.document.getElementsByClassName(‘addto-playlist-item yt-uix-button-menu-item’)[0].click()
      }
      а вообще я себе функцию такую организовал которая проверяет, но примера выше вам вполне хватит

  4.  

    эта ошибка появляется приодически, я грешу на не очень шустрый инет и дом не успевает прогрузиться, content.document.getElementsByClassName(‘addto-playlist-item yt-uix-button-menu-item’)[0].click() это клик на элемент, по чему то не работает, пошел гуглить по этому поводу

    •  

      я думал у вас свой скрипт, а если вы имеете ввиду конкретный случай, то статья писалась очень давно, ютуб менял после этого свой дизайн. Поэтому элемент может быть и другим.
      Если вы пользуетесь заходом аймакроса на ссылку (URL GOTO=), то он работает правильно. Следуйщая команда аймакроса(или джаваскрипта) не выполняется пока страница не загрузится полностью(по умолчанию на это уходит 60сек). Но именно в случае ютуба(такое бывает редко), после перехода по ссылке нужно ставить временную задержку хотя бы секунду(WAIT SECONDS=1). У него сама страница иногда глючно прогружается, и комнда (URL GOTO=) работает некорректно. Задержка в секунду компенсирует это

  5.  

    у меня свой этот кусок я взял из вашего коммента выше, работаю с разными сайтами) благодаря вам стал чуток разбираться) я не понял как работает проверка наличия элемента на странице, подробнее можете рассказать об этом?

    •  

      если элемента нет, то возвращается undefined. Когда вы джаваскрипту говорите кликнуть в undefined, он вам выбивает ошибку, так как это невозможно. Так же это касается того, если вы скажете джаваскрипту этот undefined разделить split, или прочитать из него textContent например, и т.п.
      но простая проверка на undefined:
      этот элемент поставить в if например:
      if (content.document.getElementsByClassName(‘addto-playlist-item yt-uix-button-menu-item’)[0])
      так if работает, если элемент undefined то условие не сработает. Если этот элемент не равен undefined, то в if вернется то, чем ваш элемент является, и условие сработает
      По хорошему еще бы проверять на null, но если в вашем случае будет нормально работать, то вам это не нужно.
      И так же наоборот, если вам нужно проверить чтоб этого элемента не было на странице поставьте перед ним восклицательный знак:
      if (!content.document.getElementsByClassName(‘addto-playlist-item yt-uix-button-menu-item’)[0])
      тогда условие сработает если его не будет

  6.  

    спасибо) сегодня попробую, и влпрос по профилям pale moon как вы посреством скриптов меняете акки? заходите выходите, или с помощью свичера както это делаете? заранее огромное спасибо)

  7.  

    for (i=0;1<5;i++)
    {
    if (content.document.getElementsByClassName(‘handle primary_copy_color pointer js-profile-tooltip’)[i]){
    var id = content.document.getElementsByClassName('handle primary_copy_color pointer js-profile-tooltip')[i].innerHTML //присваиваем переменной posts значение
    //alert(id)
    id=id.replace(/\@/g, "")
    вот часть кода, но не работает
    SyntaxError: illegal character, line 3 (Error code: -991) грешит на строку с условием

    •  

      у вас там ковычки кривые наверно. Вот строчкой ниже кавычки норм

      •  

        и еще вопрос) как вы меняете аккаунты? посредством удаления куки и входа в другой акк или сменой пользователя? есть еще такое интересное расширение multifox оно позволяет тоже пного пользователей, может его можно заюзать)

      •  

        как я понял если на одном браузере в разных окнах окнах запустить несколько процессов то они подтормаживают, у вас так же или у меня мой пылесос слабый?)

        •  

          я работаю с отдельными браузерами. Вам предстоит еще заморочиться чтоб ничего не подтормаживало. Я этот этап прошел, теперь на хороших машинах у меня до 80 потоков работает 24/7
          Работа с куками или прелогинивание — это по ситуации. Иногда за это можно в бан влетать. Но время конечно экономит

          •  

            надеюсь не достал))
            macroStart =»CODE:»;
            iimSet(«COUNT»,count); //пердаем в аймакрос меременную COUNT SET !DATASOURCE unfoll.csv CMDLINE !DATASOURCE vk.csv
            macroStart +=»CLEAR» + «\n»;// очищаем куки, тем самым выходим если залогинены;
            macroStart +=»SET !DATASOURCE_DELIMITER ;» + «\n»;// обозначаем разделитель в таблице ;
            macroStart +=»SET !DATASOURCE vk.csv » + «\n»; ////»+put+»\\»+tabVk+ «\n»;
            macroStart +=»SET !DATASOURCE_COLUMNS 2″ + «\n»; //iMacros количество колонок в этом файле
            macroStart +=»SET !DATASOURCE_LINE {{COUNT}} » + «\n»; //из какой строки по счету нужно извлечь информацию
            macroStart +=»ADD !EXTRACT {{!COL1}}»+ «\n»;//почта
            macroStart +=»PROMPT {{!EXTRACT}}» + «\n»;
            macroStart +=»ADD !EXTRACT {{!COL2}}»+ «\n»;//пароль
            macroStart +=»PROMPT {{!EXTRACT}}» + «\n»;
            iimPlay(macroStart);
            var login = iimGetLastExtract(1);//вытягиваем логин в джаваскрипт
            var pass = iimGetLastExtract(2);//вытягиваем пароль в джаваскрипт
            на последних строках выдает ошибку
            Downloads.getList is not a function (Error code: -1001)
            а в конце TypeError: path is undefined, line 12 (Error code: -991)
            в чем может быть проблема?

          •  

            нашел в старой версии ай макроса не работает) не получается корректно прочитать из файла, счачал опен офис и сделал но пока не удалось

          •  

            автовход работает)

  8.  

    синтаксис мать его))) изучал чуток в универе с++ и там было все четко с ним) а в ява чуть по другому if (content.document.getElementsByClassName(«handle primary_copy_color pointer js-profile-tooltip»)[i]){
    var id = content.document.getElementsByClassName(‘handle primary_copy_color pointer js-profile-tooltip’)[i].innerHTML //присваеваем переменной posts значение публик
    //alert(id)
    id=id.replace(/\@/g, «»)
    вот так все работает)
    спасибо) а то уже который день мучаюсь с этим)

  9.  

    Какими браузерами вы пользуетесь? Нашел портабельную pale moon 26.5.0 пока планирую ее использовать ту в ней и дет код авто входа куда либо

  10.  

    не могу нажать на елемент на сайте http://coincollecting.ws/index.php

    iimDisplay(content.document.getElementsByClassName (‘srcplc’).length)
    так ищет и показывает что он 1 на странице

    content.document.getElementsByClassName (‘srcplc’).click()
    а так выдает ошибку // TypeError: content.document.getElementsByClassName(…).click is not a function,

    content.document.getElementsByClassName (‘srcplc’)[0].click()
    а так ошибки нет но и нечего не далает (((

    •  

      вот вам клик:
      iimPlayCode('EVENT TYPE=CLICK SELECTOR="#scratchcard>CANVAS" BUTTON=0')
      не ищите сложных путей)

      •  

        Спасибо огромное!!!! Промучился 3 дня )))))

      •  

        вот только когда браузер открыт то все норм, а когда свернут то при нажатии на этот елемент зависает

        •  

          Не должно такого быть. Вариантов несколько. Может зависает перед другой командой. Можно поставиь временную задержку после команды. Можно поставить игнор ошибок. Можно поставить время на выполнение команды. Может так же меняться индефикатор элемента. Причин быть может много.

Добавить комментарий для Admin Отменить ответ