Распарсить файл, формирующийся клиентским скриптом.

1. DWZ2 26.06.19 04:49 Сейчас в теме
Дано: чужой сайт, на сайте есть скрипт, который формирует на клиенте HTML-страницу с текстом, картинками, гиперссылками - всё, как положено.

Требуется: средствами 1С 8.3 получить список гиперссылок с данного сайта. Если сохранить страницу через браузер или средствами 1С - сохраняется скрипт. Можно ли как-нибудь извратиться, например, через DOM-модель? Или 1С в данной задаче "пролетает"?
Найденные решения
30. DWZ2 30.06.19 23:36 Сейчас в теме
В https://programmist1s.ru/rabota-1s-s-internet-explorer/ велят делать так

IE = Новый COMОбъект("InternetExplorer.Application");
	IE.Visible = Истина;
	IE.Navigate("https://site.com");
	
	Пока IE.readyState < 4 Цикл
	КонецЦикла;
	
	Ссылки=IE.Document.links;
	
	Для Каждого Ссылка из Ссылки Цикл
		ОбработатьСсылку(Ссылка.href); // а там опять IE.Navigate(Строка), если нужно
	КонецЦикла;
	
	
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Неопределено 91 26.06.19 05:19 Сейчас в теме
(1) Не совсем понял: в браузере строится DOM-модель, но при сохранении страницы виден только скрипт? Можно ссылку?

По идее примитивно можно так:
АдресСайта = "golikov.dev/";
ПутьНаСайте = "web/index.html";

НТТР = Новый HTTPСоединение(АдресСайта);
Запрос = Новый HTTPЗапрос(ПутьНаСайте);
Результат = НТТР.Получить(Запрос).ПолучитьТелоКакСтроку();

А дальше ищем элементы <a>
3. DWZ2 26.06.19 05:50 Сейчас в теме
(2) Так текст скрипта вернёт. Нужен какой-то эмулятор браузера, но под моим контролем.
4. Неопределено 91 26.06.19 06:03 Сейчас в теме
(3) А если создать форму с HTML полем и указать полученный текст в качестве его значения, содержимое поля изменится скриптом?
10. DWZ2 26.06.19 07:09 Сейчас в теме
11. Неопределено 91 26.06.19 07:32 Сейчас в теме
(10) Реквизит с типом Строка вынесите на форму. У реквизита формы укажите вид Поле HTML документа. Реквизиту присвойте значение полученной HTML вёрстки.
12. DWZ2 26.06.19 08:04 Сейчас в теме
(11) Значение присвоить в Конфигураторе или на этапе выполнения?
13. Неопределено 91 26.06.19 08:05 Сейчас в теме
(12)
РеквизитСТипомСтрока = НТТР.Получить(Запрос).ПолучитьТелоКакСтроку();
19. DWZ2 26.06.19 08:39 Сейчас в теме
(13)
НТТР.Получить(Запрос).ПолучитьТелоКакСтроку();


НТТР и Запрос - что за объекты?

Я сделал по-рабоче-крестьянски: присвоил строку со скриптом реквизиту. Хорошая новость - скрипт работает, плохая - выдаёт кучу ошибок в js, затем пишет "Oops! Please reload this page.", то есть ему что-то не нравится.
20. Неопределено 91 26.06.19 08:51 Сейчас в теме
(19)
НТТР и Запрос - что за объекты?

Это из (2).
Я так понял, в полеHTML страница не отображается?
21. DWZ2 26.06.19 08:57 Сейчас в теме
(20) И да, и нет. Её ПЫТАЕТСЯ отобразить скрипт, но у него что-то не получается. Если ты не ханжа - могу скинуть URL в личку. Будет челлендж - 1С-ник против Web-мастеров (или кто они там). :)))
22. Неопределено 91 26.06.19 08:59 Сейчас в теме
23. DWZ2 26.06.19 09:07 Сейчас в теме
24. DWZ2 26.06.19 09:17 Сейчас в теме
25. Неопределено 91 26.06.19 09:50 Сейчас в теме
(24) Да, там валятся ошибки потому что страница пытается подключить скрипты по неполным ссылкам, подразумевающим что они лежат в корне хостинга. Т.к. у вас этих скриптов в папке с 1С нет, появляются ошибки. При дополнении ссылок на скрипты адресом сайта, проблема не решается т.к. основной скрипт, заполняющий страницу, сделан максимально нечитабельным (даже beautifier не помог) и у меня есть такое подозрение, что его изначально писали чтобы усложнить парсинг. Это задача точно не для 1С. Если очень нужно, попробуйте php. Если принципиально важно через 1С, есть только один вариант: открыть страницу в браузере, пкм-просмотреть код, пкм по второй строке и выбрать пункт edit as html. Затем ctrl+a, ctrl+c, ctrl+v в каком-нибудь текстовом поле 1С и уже затем можно парсить. Основной контент лежит в блоке с классом thumbs.
26. DWZ2 26.06.19 10:04 Сейчас в теме
(25)
основной скрипт, заполняющий страницу, сделан максимально нечитабельным (даже beautifier не помог) и у меня есть такое подозрение, что его изначально писали чтобы усложнить парсинг


Так и есть.

открыть страницу в браузере, пкм-просмотреть код


Так вместо кода скрипт будет :(((( Если только в стилях ковыряться.
28. Неопределено 91 26.06.19 10:13 Сейчас в теме
(26) Скрипт будет если выбрать просмотр кода страницы, а не элемента на который был клик.

При нажатии edit as html появится поле с полной DOM-структурой страницы, включая все изображения и ссылки, сформированные скриптом.
5. bugagashenka 203 26.06.19 06:26 Сейчас в теме
Git-bash:
cat file.html|grep -E "<a href>"| sed -n s/<a href>/\n/g | sed -n s/</a href>.*$//g
8. DWZ2 26.06.19 07:06 Сейчас в теме
(5) Не пойдёт. У меня нет HTML и получить его я не могу, то есть как раз и пытаюсь.
6. bugagashenka 203 26.06.19 06:27 Сейчас в теме
В 1С, к сожалению, нет регулярных выражений
9. DWZ2 26.06.19 07:08 Сейчас в теме
(6) А зачем мне вообще регулярные выражения? Читайте вопрос, у меня проблема не в этом.
14. bugagashenka 203 26.06.19 08:12 Сейчас в теме
(9)А, тогда нужно сделать http request к скрипту и в response будет как раз нужная html страница
16. DWZ2 26.06.19 08:14 Сейчас в теме
17. bugagashenka 203 26.06.19 08:16 Сейчас в теме
(16) вот тут https://infostart.ru/public/255881/ очень подробно автор расписал, как работать с http
15. bugagashenka 203 26.06.19 08:13 Сейчас в теме
(9)чтобы понять, как это сделать в хроме Ctrl+I вкладка Network. Там запросы к серверу и его ответы. 1С умеет это
18. DWZ2 26.06.19 08:34 Сейчас в теме
(15) Это покажет файлы, которые грузит скрипт. По какому алгоритму он их грузит - навскидку неясно. Скорее всего, как-то взаимодействует с БД на сервере, поскольку скрипт на всех страницах один, а результат - разный. Поэтому я и хочу выполнять скрипт у себя, чтобы он думал, что он в браузере.
27. bugagashenka 203 26.06.19 10:04 Сейчас в теме
(18)грубо говоря есть таблица с файлами, скрипт генерит обращение через процедуру к этому файлу, это очевидно. По какому алгоритму он грузит надо смотреть уже сам скрипт, что он вызывает, скорее всего у Вас такой финт не пройдет, т.к. неизвестны идентификаторы файлов, которые передает сценарий. В строке ведь наверняка такая строка script?id=777
7. bugagashenka 203 26.06.19 06:27 Сейчас в теме
Можно даже так
cat file.html|grep -E "<a href>"| sed -ne s/<a href>/\n/g -ne s/</a href>.*$//g
29. DWZ2 30.06.19 11:05 Сейчас в теме
Найдена половина решения в стиле Жванецкого-Задорнова. Поскольку для каждой гиперссылки есть preview и имя *.jpg в preview совпадает с адресом ссылки, то просто:

1. Пускаем сайт через Апач.
2. Достаём из его лога имена файлов по определённому шаблону.
3. Генерим и открываем URL'ы
31. DWZ2 04.07.19 04:17 Сейчас в теме
Для последователей - тут есть засада: грузятся только те картинки, которые видны на экране, поэтому, чтобы получить их все, надо страницу пролистать всю.
30. DWZ2 30.06.19 23:36 Сейчас в теме
В https://programmist1s.ru/rabota-1s-s-internet-explorer/ велят делать так

IE = Новый COMОбъект("InternetExplorer.Application");
	IE.Visible = Истина;
	IE.Navigate("https://site.com");
	
	Пока IE.readyState < 4 Цикл
	КонецЦикла;
	
	Ссылки=IE.Document.links;
	
	Для Каждого Ссылка из Ссылки Цикл
		ОбработатьСсылку(Ссылка.href); // а там опять IE.Navigate(Строка), если нужно
	КонецЦикла;
	
	
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот