Доброго времени, уважаемые.

2 дня назад появилась надобность в скрипте, и начал разбираться в imacros. Но так как я зашел в тупик и не могу догнать в чем проблема, прошу помощи у вас.

Суть задачи:

Имеется два файла. order.txt, который содержит ссылки вида:

скрытый текст

Выделить код

Код:

https://lk.********.org/order/120019
https://lk.********.org/order/120021
https://lk.********.org/order/120022
https://lk.********.org/order/120027
https://lk.********.org/order/120033
https://lk.********.org/order/120034
https://lk.********.org/order/120042
https://lk.********.org/order/120044
https://lk.********.org/order/120045


И есть файл вывода 111.txt.
Скрипт должен взять ссылку из файла ордер, открыть её, скопировать определенную информация с сайта и сохранить её в файл 111тхт.
На сайте нужно извлечь Имя и эмеил заказчика:
скрытый текст
RI5kZGBGMl0.jpg

и сохранить их в файл, с каким либо разделителем.

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

скрытый текст

Выделить код

Код:

SET !DATASOURCE C:\iMacros\Datasources\order.txt
SET !EXTRACT {{!COL1}}
TAB OPEN
TAB T=2
URL GOTO={{!COL1}}
TAG POS=1 TYPE=SPAN ATTR=class:o-user-info  EXTRACT=SPAN
SAVEAS TYPE=EXTRACT FOLDER=C:\iMacros\Datasources\ FILE=111.txt
TAB CLOSE


код публикуется в тегах code внутри спойлера
и в итоге в файле 111.тхт я получаю такой результат:
скрытый текст
"https://lk.*****/order/120019","Заказчик: Татьяна,Заказчик: Татьяна,L_***_A@mail.ru(Заказчик: Татьяна,Заказчик: Татьяна,L_***_A@mail.ru(Заказчик: Татьяна,Заказчик: Татьяна,L_***_A@mail.ru(4/ 9)"

Если кто сможет помочь, буду признателен. А если зациклить поможете - вообще будет супер, так как эту операцию мне предстоит сделать 8708 раз.
Заранее спасибо.

InfSub

Если копировать весь SPAN, тогда нужно отбирать ссылку регулярным выражением. Проще, на мой взгляд, EXTRACT=HREF.

Насчет циклов: в iMacros есть loop - количество циклов, которое можно указать перед воспроизведением. Так же, можно воспользоваться циклом for() от JavaScript.

EverythingForYou пишет

Если копировать весь SPAN, тогда нужно отбирать ссылку регулярным выражением. Проще, на мой взгляд, EXTRACT=HREF. Насчет циклов: в iMacros есть loop - количество циклов, которое можно указать перед воспроизведением. Так же, можно воспользоваться циклом for() от JavaScript.

Спасибо за ответ.
Как раз когда оформлял пост, заметил свою ошибку. Я считываю весь <SPAN> но адрес то у меня находится в <A>.

А как их можно совместить, чтобы имя брало со спан, ставило разделитель любой, и добавляло эмеил из хреф?
Так же, не могу понять как убрать ссылку из первого файла, её так же извлекает во второй файл. Насколько я могу понимать, мне после 5-й строчки нужно как то очистить переменную EXTRACT?

Да, зацикливать я буду с помощью цикла for() от JavaScript.

inbev92 пишет

SET !EXTRACT {{!COL1}}

зачем? или ссылка на страницу должна быть в итоговом файле?

inbev92 пишет

EXTRACT=SPAN

нет такого параметра у extract'a, читайте

inbev92 пишет

А как их можно совместить, чтобы имя брало со спан, ставило разделитель любой, и добавляло эмеил из хреф?

скрытый текст

Выделить код

Код:

iimPlayCode(`
    SET !DATASOURCE C:\iMacros\Datasources\order.txt
    TAB OPEN
    TAB T=2
    URL GOTO={{!COL1}}
    TAG POS=1 TYPE=SPAN ATTR=class:o-user-info EXTRACT=HTM
    TAB CLOSE
`);
var str=iimGetExtract();
var rx=/:\s(.*?),\s<a[^>]+>(.*?)</i;
str=str.match(rx);
str.shift();
str=str.join('[EXTRACT]');
iimPlayCode(`
    SET !EXTRACT ${str}
    SAVEAS TYPE=EXTRACT FOLDER=C:\\iMacros\\Datasources\\ FILE=111.txt
`);

inbev92 пишет

Я считываю весь <SPAN> но адрес то у меня находится в <A>.

скрытый текст

Выделить код

Код:

window.document.getElementsByClassName('o-user-info')[здесь_указывать_элемент_массива_по_счету].getElementsByTagName('a')[0].getAttribute('href');

EverythingForYou

inbev92 пишет

На сайте нужно извлечь Имя и эмеил заказчика

так что предполагаю, что href (ссылка) тут совсем не к чему

InfSub пишет

так что предполагаю, что href (ссылка) тут совсем не к чему

Тогда, скорее всего, так:

скрытый текст

Выделить код

Код:

var info = window.document.getElementsByClassName('o-user-info')[здесь_указывать_элемент_массива_по_счету].getElementsByTagName('a')[0].innerHTML;

EverythingForYou пишет

скорее всего, так

в span'e находится имя и другая инфа, так что имя все равно придется извлекать регуляркой и соответственно брать все содержимое span'a

InfSub пишет
EverythingForYou пишет

скорее всего, так

в span'e находится имя и другая инфа, так что имя все равно придется извлекать регуляркой и соответственно брать все содержимое span'a

Точно! Не заметил имя. Думал, что оно закрашено вместе с email'ом в теге <a>.

InfSub пишет

зачем? или ссылка на страницу должна быть в итоговом файле?

таким образом я беру первую ссылку из файла. В итоговом не должна. Разве не так это делается?

По поводу Вашего кода, спасибо, я практически разобрался как он работает, но при компиляции ошибку выдало:

TypeError: str is null, line 12 (Error code: -991)

Я весь Ваш код поместил в файл с расширением .js и запустил в imacros.

Подскажете в чем дело?

inbev92 пишет

Подскажете в чем дело?

Попробуйте поменять одиннадцатую строчку:

скрытый текст

Выделить код

Код:

str=str.match(rx).join('');

EverythingForYou
это приведет к мусору (полному тексту из span) плюс искомый текст

inbev92

добавьте после:

Выделить код

Код:

var str=iimGetExtract();


строку:

Выделить код

Код:

alert(str);


и покажите ее вывод, лучше текстом а не скрином
или дайте ссылку на страницу

11-01-2017 18:21:31


варианта ошибки - 2:
- либо extract не сработал (т.е. на странице не найден объект)
- либо, регулярное выражение не совпало с текстом (т.к. писал его исходя из текста на скрине и мог чего-то не учесть)

11-01-2017 18:26:37


inbev92 пишет

таким образом я беру первую ссылку из файла.

выбор номера строки делается с помощью:

Выделить код

Код:

SET !DATASOURCE_LINE номер_строки


а командой:

Выделить код

Код:

SET !EXTRACT {{!COL1}}


вы передаете значение из первой колонки в переменную {{!EXTRACT}}
в результате, вы получаете в EXTRACT'e в первом столбце - ссылку, во втором содержимое span'a
по этому я и спросил, зачем вам ссылка в результирующем файле

InfSub пишет

и покажите ее вывод, лучше текстом а не скрином

результат текстом не могу показать, ибо текста нету. Результат alert-а и ошибку приведу ниже скриншотом

скрытый текст
7eeuqxqvyM8.jpg

Во время выполнения скрипта, вкладка с сайтом не открылась.

UPD

вот пример с другой ссылки:

скрытый текст

Выделить код

Код:

<span class="o-user-info">Заказчик: Ирина, <a href="/order/?search=alis_fox%40mail.ru"> alis_fox@mail.ru</a> (<b><font color="green">1</font> / 2</b>)</span>


Ещё возможен такой вариант:

скрытый текст

Выделить код

Код:

<span class="o-user-info">Заказчик: Егоров Борис, <a href="/order/?search=248435395"> 248435395</a> (<b><font color="green">3</font> / 3</b>)</span>


В данном случае, вместо email будет id заказчика. Его так же нужно извлекать в таком виде как он есть, т. е. просто цифры.

отключите alertfox, или вы с ним работаете?
проблема в нем,судя по ошибке

InfSub пишет

отключите alertfox, или вы с ним работаете?

Честно говоря, я пользуюсь хромом. Мозилла чистая, ничего кроме аймакрос не установлено. А что такое alertfox я даже и не знаю.

InfSub пишет

- либо extract не сработал (т.е. на странице не найден объект)

Мне почему-то кажется что проблема в этом, так как при выполнении скрипта, даже новая вкладка не открылась.
Я пробовал запускать кусочек скрипта:

скрытый текст

Выделить код

Код:

SET !DATASOURCE C:\iMacros\Datasources\order.txt
TAB OPEN
TAB T=2
URL GOTO={{!COL1}}
TAG POS=1 TYPE=SPAN ATTR=class:o-user-info  EXTRACT=HTM
TAB CLOSE
SAVEAS TYPE=EXTRACT FOLDER=C:\\iMacros\\Datasources\\ FILE=111.txt


но в данном случае результат получается таков:
скрытый текст
<span class="o-user-info" style="outline: 1px solid blue;">Заказчик: Татьяна, <a href="/order/?search=L_Tane4ka_A%40mail.ru"> L_Tane4ka_A@mail.ru</a> (<b><font color="green">4</font> / 9</b>)</span>

inbev92
какая версия iMacros?

InfSub пишет

какая версия iMacros?

Последняя. Или вам номер нужен?

inbev92
установите 8.9.3 и отключите обновление imacros'a
ссылки на все версии есть в FAQ раздела iMacros

InfSub пишет

установите 8.9.3

Я не знаю, "то ли я тупой, то ли лыжи не едут". В упор 8.9.3 версии не вижу

скрытый текст
4uR-UOYH-Os.jpg

Установил 8.9.6, пробую запустить скрипт, выдает ошибку:
скрытый текст
TypeError: iMacros.player is undefined, line -491 (Error code: -991)

В общем, установил я версию 8.9.7
Немного подправил код, и вот, что у меня вышло:

скрытый текст

Выделить код

Код:

SET !DATASOURCE C:\iMacros\Datasources\order.txt
SET !DATASOURCE_LINE {{!LOOP}}
ADD !EXTRACT {{!COL1}}
TAB OPEN
TAB T=2
URL GOTO={{!COL1}}
SET !EXTRACT NULL
TAG POS=1 TYPE=SPAN ATTR=class:o-user-info  EXTRACT=TXT
SAVEAS TYPE=EXTRACT FOLDER=C:\iMacros\Datasources\ FILE=111.txt
TAB CLOSE


Результат 5-ти циклов:
скрытый текст
"Заказчик: Татьяна,  L_Ta***ka_A@mail.ru (4 / 9)"
"Заказчик: Татьяна,  L_Ta***ka_A@mail.ru (4 / 9)"
"Заказчик: Татьяна,  L_Ta***ka_A@mail.ru (4 / 9)"
"Заказчик: Анастасия,  as***l@bk.ru (1 / 4)"
"Заказчик: Руслан,  alena****eeva1@mail.ru (9 / 10)"

Повторы приемлемы, есть случаи, когда заказчики в ссылках повторяются.

Формат вывода меня устроит, я в notepad++ приведу к виду, который мне нужен.

Выражаю ОГРОМНУЮ благодарность всем участникам переписки, в частности InfSub, что помогли мне разобраться и добиться результата.

P.S.

Пробовал зациклить через js, но в итоге у меня просто счетчик считает, и дальше команды не выполняются:

скрытый текст

Выделить код

Код:

for (i=1;i<=8710;i++){
var macro; 
macro = "CODE:"; 
macro += "SET !DATASOURCE C:\iMacros\Datasources\order.txt" + "\n";
macro += "SET !DATASOURCE_LINE "+i+ "\n";
macro += "ADD !EXTRACT {{!COL1}}" + "\n"; 
macro += "TAB OPEN" + "\n"; 
macro += "TAB T=2" + "\n"; 
macro += "URL GOTO={{!COL1}}" + "\n"; 
macro += "SET !EXTRACT NULL" + "\n"; 
macro += "TAG POS=1 TYPE=SPAN ATTR=class:o-user-info  EXTRACT=TXT" + "\n"; 
macro += "SAVEAS TYPE=EXTRACT FOLDER=C:\iMacros\Datasources\ FILE=111.txt" + "\n"; 
macro += "TAB CLOSE" + "\n"; 
iimPlay(macro) ;
}

inbev92 пишет

macro += "ADD !EXTRACT {{!COL1}}" + "\n";

и

inbev92 пишет

macro += "SET !EXTRACT NULL" + "\n";

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

inbev92 пишет

в итоге у меня просто счетчик считает, и дальше команды не выполняются:

так сравните строку save as в js из моего поста и из вашего

inbev92 пишет

Я не знаю, "то ли я тупой, то ли лыжи не едут". В упор 8.9.3 версии не вижу

писал с телефона, опечатался, имелась ввиду действительно 8,9,7