10.Облегчаем работу с JavaScript. Выводим данные на монитор.
Пришло время облегчить написание кода.
Во-первых, тот редактор для кода, который дает нам аймакрос по умолчанию не удобен. Я рекомендую установить Notepad++
После установки нужно указать аймакросу что бы он открывал наш нотепад вместо редактора по умолчанию.
Для этого зайдем во вкладку Manage, откроем опции, поставим галочку «Использовать внешний редактор» и нажмем на маленькую папочку напротив него, чтоб найти файл запуска устаноленного нотепада «notepad++.exe»
у меня путь такой
C:\Program Files (x86)\Notepad++\notepad++.exe
(можете просто скопировать путь, скорее всего и у вас будет такой же)
Затем нажимаем кнопку Apply внизу странички.
Теперь при нажатии при редактировании наших скриптов будет открываться удобный текстовый редактор нотепад++
Еще советую использовать такой ход. При разаработке очередного скрипта, создавайте отдельный файлик. В нем отрабатывайте, экспериментируйте, а потом переносите в основной код. Что мы сейчас и сделаем. Открываем папку C:\iMacros\Macros\Обучение и создаем там файл «тренировочный.js» Сразу он не появится у нас в каталоге на панели аймакроса. Нужно закрыть на крестик панель, потом заново открыть аймакрос по кнопке. Или перезагрузить браузер.
После нажимайте правой кнопкой на «тренировочный.js» и выбирайте «редактировать»
Всплывает пустой текстовый документ в нотепаде. Отлично. Пришло время познакомиться с парочкой очень важных команд.
Возможно вы заметили, что во время выполнения нашего скрипта, мы не совсем понимаем что происходит. А именно, что содоржит переменная, какую по счету строку мы выбрали из файла, и так далее. Желательно всю информацию выводить на монитор, это облегчит тестирование. Для этого в аймакросе доступна команда
1 |
iimDisplay("Этот текст мы увидим на мониторе") |
Если вы скопируете строку в наш тренировочный файл и сохраните ее, то при запуске скрипта вы увидите следующее:
Возможно вы увидите кракозябры. Это потому что аймакрос работает с UTF-8 кодировкой, а ваш файлик сохранился скорее всего в другой кодировке. Не беда, откройте еще раз скрипт, в меню нотепада выберите кодировки/преоброзовать в UTF-8 И сохраните файл
Это очень важная команда. Выводить на экран можно значения переменных, и циклов, и еще много чего. При этом аймакрос работает дальше. Но что делать если нам нужно остановить программу и прочитать значение? Для этого я использую такую команду:
1 |
alert("программа не будет работать дальше пока вы не прочитаете сообщение и не нажмете ОК") |
Можете скопировать эту команду в тренировочный файл и посмотреть результаты.
Ну и теперь вернемся к нашему ТЗ. Предлагаю доработать код таким образом, чтоб на мониторе отобразался счет цикла и запрос, который мы выбрали из файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
for (i=1;i<=3;i++){//создаем переменную i, цикл будем выполнять 3 раза var macro; // создаем переменную macro macro = "CODE:"; // говорим нашему скрипту что в нее впишем код аймакрос macro += "SET !DATASOURCE C:\\iMacros\\Macros\\Обучение\\zapros.txt" + "\n"; // подключаем текстовый файл macro += "SET !DATASOURCE_LINE "+i+ "\n";// из какой по счету строки брать данные macro += "ADD !EXTRACT {{!COL1}}" + "\n"; // берем данные в переменную {{!COL1}} iimPlay(macro) // вызываем переменную запуская тем самым код, который в нее вписали. var zapros = iimGetLastExtract(1) iimDisplay('строка '+ i +' запрос '+ zapros) // macro += "URL GOTO=https://www.youtube.com/?gl=UA&hl=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) // вызываем переменную запуская тем самым код, который туда вписали. } |
Весь код остался без изменений кроме 7 ,8 и 9 строк. Строка 8:
1 |
var zapros = iimGetLastExtract(1) |
означает что в этом месте мы создаем переменную
1 |
zapros |
в корорую помещаем
1 |
!EXTRACT {{!COL1}} |
Это такая заморочка аймакроса, если есть команда EXTRACT то вытащить ее в джаваскрипт нужно командой iimGetLastExtract(1), если бы EXTRACT-ов было больше, то для обращения к каждому из них нужно изменять порядковый номер в скобочках: iimGetLastExtract(2), и т.д. Мы вернемся к этому более глубже когда будем работать с таблицами. Именно для того чтоб вытащить данные в джаваскрипт, пришлось добавить и 7 строку:
1 |
iimPlay(macro) // вызываем переменную запуская тем самым код, который в нее вписали. |
Тоесть нужно вызвать работу аймакрос кода, который вытащит данные из файла, затем мы эти данные занесем в переменную zapros, и после этого продолжим добавлять код аймакрос в переменную macro.
строка 9:
1 |
iimDisplay('строка '+ i +' запрос '+ zapros) // |
выводит на наш зеленый дисплейчик такие знаки: «слово «строка», 3 пробела, значение переменной i, 3 пробела, слово «запрос» , пробел, значение переменной zapros»
Почему так? Как уже говорилось строка в джаваскрипте берется в кавычки. Тоесть то, что в кавычках выводится познаково, включая пробелы. Знаки + обозначачют сцепить элементы. Дальше вы к этому привыкните. А пока запустите наш код, посмотрите как это работает. Затем попробуйте изменть код так, чтоб на дисплее перед словом «запрос» выводилась запятая.
Мэр Киева , Кличко , просто отдыхает по сравнению с автором….ну и словоблудство….
стиль подачи конечно необычный, но автор по видимому разбирается в теме получше некоторых)
Есть команда что-то типа переноса строки, что бы выводить сообщения построчно? Использование пробелов вопрос не решает, бывает сдвиг из-за изменения разрядности чисел.
перенос строки — ‘/n’
чтоб массив вывести с переносом строки —
var arrEMAIL=[1,2,3,4,5]
var arrTxt = arrEMAIL.join(«\n»)
iimDisplay(arrTxt)
Чтобы увидеть только что созданный файл не нужно перезапускать iMacros, а тем более браузер
Достаточно нажать на кнопочку «Обновить список» во вкладке «Manage»
Здравствуйте.Подскажите, как задать условие, если скрипт доходит до определённой команды и она не выполняется, то он возвращается на предыдущую команду. Спасибо
Вариантов конечно же множество, нужно смотреть что в вашем случае лучше применить.к следующему уроку!
Как самый простой способ? это поставить условие на команду аймакроса. Оно работает по такому принципу: Если код аймакроса выполнился, то возвращается целое число >0, если не выполнился, то <0. Этот код макроса может быть - нажатие на кнопку, проверка на какой-нибудь элемент на странице и так далее
Например на этой странице есть ссылка под видео -"Перейти к следующему уроку" Нам нужно проверить можем ли мы ее нажать. Для этого:
Ставим аймакрос на запись и записываем нажатие на нее:
TAG POS=1 TYPE=A ATTR=TXT:Перейти
Затем с ее помощью составляем такую конструкцию:
if(iimPlayCode(‘TAG POS=1 TYPE=A ATTR=TXT:Перейтик следующему уроку!’)>0){
//тут пишем код который должен выполняться если ссылка на этой странице есть
}
else {
//тут пишем код если ссылки на этой странице нет
}
Для того чтоб было легче работать с таким условием, код который должен выполняться в том или ином случае лучше поместить в функции.
Спасибо за быстрый подробный ответ
Пока разбираюсь с вашим ответом, скажите, если FRAME при обновлении страницы постоянно изменяется, можно это как-то обойти imacros. Спасибо
FRAME имеет скорее всего имеет имя. Можно его выдернуть из кода страницы джаваскриптом, например:
win = window.document.documentElement.innerHTML.split('iframe name="')[2].split('"')[0]
и тогда далее уже работать с этим именем в аймакрос команде:
iimPlayCode('FRAME NAME="'+win+'"\nONDIALOG POS=1 BUTTON=OK CONTENT=\nEVENT TYPE=CLICK SELECTOR="#recaptcha-audio-button" BUTTON=0\nWAIT SECONDS=3')
С джаваскриптом плохо дружу, даже с предыдущим ответом запуталась. Спасибо вам за ответы. Хотя ваш пример похож на мой, но у меня почему то не работает. Выложить не могу, личная информация.
Извините, что надоедаю вам, вы бы не могли наглядно показать код макроса для вашего примера.Буду очень вам благодарна. Спасибо
Спасибо Вам огромное за уроки!
Здравствуйте!
Такой вопрос
иде по уроку
и под конец такая проблема
на экран выводит корректно только первый запрос
далее идет null
в чем проблема?