Команда iMacros EVAL Команда EVAL позволяет использовать возможности JavaScript в работе iim макроса. Также команда может быть использована для простого анализа и обработки извлеченных данных. Чаще
всего к данной команде обращаются, когда использование встроенного функционала iMacros проще, чем написание кода на js или использование чистого js невозможно, но в целом на JS можно реализовать более сложные проекты. Примеры использования:
Работает в: Синтаксис:SET !VAR1 EVAL("[JavaScript код]")
TAG ... CONTENT=EVAL("[JavaScript код]")
Доступен начиная с iMacros V7.5 и более поздних, дополнение iMacros для Firefox 7.4.0.1 и выше. Параметры:
Примечания:
Примеры:1. Случайное время задержки. Подождать случайно выбранное время (от 1 до 10 секунд), после загрузки страницы: SET !VAR1 EVAL("var randomNumber=Math.floor(Math.random()*10 + 1); randomNumber;")
URL GOTO=http://imacroshelp.ru
' ждать от 1 до 10 секунд
WAIT SECONDS={{!VAR1}}
2. Сгенерировать случайное число в определенном диапазона: SET randomNumber EVAL("var min = 50; var max = 100; var randomNumber = Math.floor(Math.random() * (max - min + 1)) + min; randomNumber;")
3. Получение и сравнение валют. Сохранить результат. Сохранить EUR-ставку в долларах USD, только если она выше определенного порога (1.3 USD). Если ставка ниже, остановить макрос и выдать сообщение об ошибке: URL GOTO=http://www.xe.com/ucc/convert/?Amount=1&From=EUR&To=USD
SET !EXTRACT_TEST_POPUP NO
TAG POS=1 TYPE=TD ATTR=TXT:*<SP>USD&&WIDTH:46%&&ALIGN:left EXTRACT=TXT
SET !VAR1 EVAL("var s = \"{{!EXTRACT}}\"; s.replace(\"USD\",\"\"); var d = parseFloat(s); if(d < 1.3){MacroError(\"Euro меньше 1.3 USD.\");} else {d};")
SET !EXTRACT NULL
SET !EXTRACT {{!VAR1}}
SAVEAS TYPE=EXTRACT FOLDER=* FILE=EuroRate.csv
4. Получение и сравнение даты/времени. Проверить: последнее сообщение старше нескольких часов (12 часов): CLEAR
URL GOTO=http://www.readwriteweb.com/
SET !EXTRACT_TEST_POPUP NO
TAG POS=1 TYPE=DIV ATTR=CLASS:submeta EXTRACT=TXT
SET !VAR1 EVAL("var h = 12; var s = \"{{!EXTRACT}}\"; var re = /\\w+\\s\\d{1,2},\\s\\d{4}\\s+\\d{1,2}\\:\\d{2}\\s[A|P]M/; var postDateStr = re.exec(s); var today = new Date(); var postAge = today.getTime() - Date.parse(postDateStr); var hInMilli = h*60*60*1000; if(postAge > hInMilli){MacroError(\"Сообщение старше 12 часов\");}")
5. Получить вчерашнюю дату. Ввести текст с вчерашней датой в ISO-формате (гггг-мм-дд), месяц меняется, високосный год, и так далее. Для сегодняшней даты можно использовать команду !NOW, но ее не получится преобразовать чтобы получить вчерашнее число, EVAL решает эту проблему: ... CONTENT=EVAL("var d = new Date(); d.setDate(d.getDate() - 1); var year = d.getFullYear(); var month = d.getMonth() + 1; var day = d.getDate(); year + '-' + month + '-' + day;") 6. Получить завтрашнюю дату. Создайте переменную с завтрашней датой в формате дд/мм/гггг: SET tomorrow EVAL("var today = new Date(); var tomorrow = new Date(); tomorrow.setDate(today.getDate() + 1); var day = tomorrow.getDate().toString(); if (day.length < 2) {day = \"0\" + day;} var month = (tomorrow.getMonth() + 1).toString(); if (month.length < 2) {month = \"0\" + month;} var year = tomorrow.getFullYear().toString(); var dateString = day + \"/\" + month + \"/\" + year; dateString;") PROMPT {{tomorrow}} 7. Редактировать извлеченный текст. Преобразование текста в строку верхнего регистра: VERSION BUILD=7400919 RECORDER=FX TAB T=1 URL GOTO=http://android-developers.blogspot.com/2011/09/preparing-for-handsets.html SET !EXTRACT_TEST_POPUP NO TAG POS=1 TYPE=P ATTR=TXT:Early<SP>this<SP>year,* EXTRACT=TXT SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; s.toUpperCase()") PROMPT {{!VAR1}} Удалить первые и последние пробелы: SET !EXTRACT " Эта строка имеет в начале и в конце пробелы " ' Отображается значение в кавычках со всеми пробелами PROMPT {{!EXTRACT}} SET trimmedValue EVAL("\"{{!EXTRACT}}\".replace(/^\\s*|\\s*$/g, \"\");") PROMPT "{{trimmedValue}} - без пробелов!" 8. DemoEval.iim: URL GOTO=http://www.iopus.com/imacros/demo/v7/eval.htm SET !VAR1 EVAL("Math.floor(Math.random()*5 + 1);") WAIT SECONDS={{!VAR1}} SET !EXTRACT_TEST_POPUP NO TAG POS=1 TYPE=B ATTR=TXT:* EXTRACT=TXT SET !VAR2 EVAL("var h = 20; var s = \"{{!EXTRACT}}\"; var today = new Date(); var postAge = today.getTime() - Date.parse(s); var hInMilli = h*60*60*1000; if(postAge > hInMilli){MacroError(\"Разница во времени более 20 часов\");}else null") SET !EXTRACT NULL TAG POS=1 TYPE=INPUT:TEXT FORM=ID:form1 ATTR=NAME:textfield EXTRACT=TXT SET !VAR2 EVAL("var s=\"{{!EXTRACT}}\"; var d = parseFloat(s); if((d > 99)&&(d < 101))d; else MacroError(\"Значение не в заданных пределах\");")
|
Команды >