>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >iMacros http://forum.mozilla-russia.org/viewforum.php?id=42 >[РЕШЕНО] Проблема с сохранением данных с сайта в файл http://forum.mozilla-russia.org/viewtopic.php?id=71174 |
inbev92 > 11-01-2017 12:34:33 |
Доброго времени, уважаемые. 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тхт. На сайте нужно извлечь Имя и эмеил заказчика: скрытый текст и сохранить их в файл, с каким либо разделителем. Для начала, я пытаюсь написать скрипт чтобы оно один раз его извлекало, а потом уже зациклить, но столкнулся с не понятной мне проблемой. скрытый текст Выделить код Код: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 |
EverythingForYou > 11-01-2017 12:45:22 |
Если копировать весь SPAN, тогда нужно отбирать ссылку регулярным выражением. Проще, на мой взгляд, EXTRACT=HREF. Насчет циклов: в iMacros есть loop - количество циклов, которое можно указать перед воспроизведением. Так же, можно воспользоваться циклом for() от JavaScript. |
inbev92 > 11-01-2017 12:52:52 |
EverythingForYou пишет
Спасибо за ответ. А как их можно совместить, чтобы имя брало со спан, ставило разделитель любой, и добавляло эмеил из хреф? Да, зацикливать я буду с помощью цикла for() от JavaScript. |
InfSub > 11-01-2017 14:44:04 |
inbev92 пишет
зачем? или ссылка на страницу должна быть в итоговом файле? inbev92 пишет
нет такого параметра у 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 `); |
EverythingForYou > 11-01-2017 16:09:22 |
inbev92 пишет
скрытый текст Выделить код Код:window.document.getElementsByClassName('o-user-info')[здесь_указывать_элемент_массива_по_счету].getElementsByTagName('a')[0].getAttribute('href'); |
InfSub > 11-01-2017 16:12:16 |
EverythingForYou inbev92 пишет
так что предполагаю, что href (ссылка) тут совсем не к чему |
EverythingForYou > 11-01-2017 16:16:45 |
InfSub пишет
Тогда, скорее всего, так: скрытый текст Выделить код Код:var info = window.document.getElementsByClassName('o-user-info')[здесь_указывать_элемент_массива_по_счету].getElementsByTagName('a')[0].innerHTML; |
InfSub > 11-01-2017 16:18:29 |
EverythingForYou пишет
в span'e находится имя и другая инфа, так что имя все равно придется извлекать регуляркой и соответственно брать все содержимое span'a |
EverythingForYou > 11-01-2017 16:21:55 |
InfSub пишет
Точно! Не заметил имя. Думал, что оно закрашено вместе с email'ом в теге <a>. |
inbev92 > 11-01-2017 16:39:35 |
InfSub пишет
таким образом я беру первую ссылку из файла. В итоговом не должна. Разве не так это делается? По поводу Вашего кода, спасибо, я практически разобрался как он работает, но при компиляции ошибку выдало:
Я весь Ваш код поместил в файл с расширением .js и запустил в imacros. Подскажете в чем дело? |
EverythingForYou > 11-01-2017 17:36:06 |
inbev92 пишет
Попробуйте поменять одиннадцатую строчку: скрытый текст |
InfSub > 11-01-2017 18:15:58 |
EverythingForYou inbev92 добавьте после: строку: и покажите ее вывод, лучше текстом а не скрином или дайте ссылку на страницу 11-01-2017 18:21:31 варианта ошибки - 2: 11-01-2017 18:26:37 inbev92 пишет
выбор номера строки делается с помощью: а командой: вы передаете значение из первой колонки в переменную {{!EXTRACT}} в результате, вы получаете в EXTRACT'e в первом столбце - ссылку, во втором содержимое span'a по этому я и спросил, зачем вам ссылка в результирующем файле |
inbev92 > 11-01-2017 19:56:39 |
InfSub пишет
результат текстом не могу показать, ибо текста нету. Результат alert-а и ошибку приведу ниже скриншотом скрытый текст Во время выполнения скрипта, вкладка с сайтом не открылась. 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 заказчика. Его так же нужно извлекать в таком виде как он есть, т. е. просто цифры. |
InfSub > 11-01-2017 20:08:14 |
отключите alertfox, или вы с ним работаете? |
inbev92 > 11-01-2017 21:00:21 |
InfSub пишет
Честно говоря, я пользуюсь хромом. Мозилла чистая, ничего кроме аймакрос не установлено. А что такое alertfox я даже и не знаю. InfSub пишет
Мне почему-то кажется что проблема в этом, так как при выполнении скрипта, даже новая вкладка не открылась. скрытый текст Выделить код Код: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> |
InfSub > 11-01-2017 21:22:41 |
inbev92 |
inbev92 > 11-01-2017 21:45:07 |
InfSub пишет
Последняя. Или вам номер нужен? |
InfSub > 11-01-2017 22:30:52 |
inbev92 |
inbev92 > 12-01-2017 02:11:47 |
InfSub пишет
Я не знаю, "то ли я тупой, то ли лыжи не едут". В упор 8.9.3 версии не вижу скрытый текст Установил 8.9.6, пробую запустить скрипт, выдает ошибку: скрытый текст TypeError: iMacros.player is undefined, line -491 (Error code: -991) |
inbev92 > 12-01-2017 03:15:48 |
В общем, установил я версию 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) ; } |
InfSub > 12-01-2017 08:45:25 |
inbev92 пишет
и inbev92 пишет
удалите, говорил же, зачем это здесь? inbev92 пишет
так сравните строку save as в js из моего поста и из вашего |
InfSub > 12-01-2017 10:35:32 |
inbev92 пишет
писал с телефона, опечатался, имелась ввиду действительно 8,9,7 |