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

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

```1c
    IE = Новый COMОбъект("InternetExplorer.Application");
    IE.Visible = Истина;
    IE.Navigate("https://site.com");

    Пока IE.readyState < 4 Цикл
    КонецЦикла;

    Ссылки=IE.Document.links;

    Для Каждого Ссылка из Ссылки Цикл
    ОбработатьСсылку(Ссылка.href); // а там опять IE.Navigate(Строка), если нужно
    КонецЦикла;
```
---
Не совсем понял: в браузере строится DOM-модель, но при сохранении страницы виден только скрипт? Можно ссылку?

По идее примитивно можно так:

```1c
    АдресСайта = "golikov.dev/";
    ПутьНаСайте = "web/index.html";

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

А дальше ищем элементы <a>
---
Так текст скрипта вернёт. Нужен какой-то эмулятор браузера, но под моим контролем.
---
А если создать форму с HTML полем и указать полученный текст в качестве его значения, содержимое поля изменится скриптом?
---
Как именно?
---
Реквизит с типом Строка вынесите на форму. У реквизита формы укажите вид Поле HTML документа. Реквизиту присвойте значение полученной HTML вёрстки.
---
Значение присвоить в Конфигураторе или на этапе выполнения?
---
```1c
    РеквизитСТипомСтрока = НТТР.Получить(Запрос).ПолучитьТелоКакСтроку();
```
---
НТТР.Получить(Запрос).ПолучитьТелоКакСтроку();

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

Я сделал по-рабоче-крестьянски: присвоил строку со скриптом реквизиту. Хорошая новость - скрипт работает, плохая - выдаёт кучу ошибок в js, затем пишет "Oops! Please reload this page.", то есть ему что-то не нравится.
---
НТТР и Запрос - что за объекты?
Это из (2).
Я так понял, в полеHTML страница не отображается?
---
И да, и нет. Её ПЫТАЕТСЯ отобразить скрипт, но у него что-то не получается. Если ты не ханжа - могу скинуть URL в личку. Будет челлендж - 1С-ник против Web-мастеров (или кто они там). :)))
---
Кидай.
---
Всё отправилось
---
Ну что, ссылка дошла?
---
Да, там валятся ошибки потому что страница пытается подключить скрипты по неполным ссылкам, подразумевающим что они лежат в корне хостинга. Т.к. у вас этих скриптов в папке с 1С нет, появляются ошибки. При дополнении ссылок на скрипты адресом сайта, проблема не решается т.к. основной скрипт, заполняющий страницу, сделан максимально нечитабельным (даже beautifier не помог) и у меня есть такое подозрение, что его изначально писали чтобы усложнить парсинг. Это задача точно не для 1С. Если очень нужно, попробуйте php. Если принципиально важно через 1С, есть только один вариант: открыть страницу в браузере, пкм-просмотреть код, пкм по второй строке и выбрать пункт edit as html. Затем ctrl+a, ctrl+c, ctrl+v в каком-нибудь текстовом поле 1С и уже затем можно парсить. Основной контент лежит в блоке с классом thumbs.
---
основной скрипт, заполняющий страницу, сделан максимально нечитабельным (даже beautifier не помог) и у меня есть такое подозрение, что его изначально писали чтобы усложнить парсинг

Так и есть.

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

Так вместо кода скрипт будет :(((( Если только в стилях ковыряться.
---
Скрипт будет если выбрать просмотр кода страницы, а не элемента на который был клик.

При нажатии edit as html появится поле с полной DOM-структурой страницы, включая все изображения и ссылки, сформированные скриптом.
---
Git-bash:
cat file.html|grep -E "<a href>"| sed -n s/<a href>/\n/g | sed -n s/</a href>.*$//g
---
Не пойдёт. У меня нет HTML и получить его я не могу, то есть как раз и пытаюсь.
---
В 1С, к сожалению, нет регулярных выражений
---
А зачем мне вообще регулярные выражения? Читайте вопрос, у меня проблема не в этом.
---
А, тогда нужно сделать http request к скрипту и в response будет как раз нужная html страница
---
А можно подробнее?
---
вот тут https://infostart.ru/public/255881/ очень подробно автор расписал, как работать с http
---
чтобы понять, как это сделать в хроме Ctrl+I вкладка Network. Там запросы к серверу и его ответы. 1С умеет это
---
Это покажет файлы, которые грузит скрипт. По какому алгоритму он их грузит - навскидку неясно. Скорее всего, как-то взаимодействует с БД на сервере, поскольку скрипт на всех страницах один, а результат - разный. Поэтому я и хочу выполнять скрипт у себя, чтобы он думал, что он в браузере.
---
грубо говоря есть таблица с файлами, скрипт генерит обращение через процедуру к этому файлу, это очевидно. По какому алгоритму он грузит надо смотреть уже сам скрипт, что он вызывает, скорее всего у Вас такой финт не пройдет, т.к. неизвестны идентификаторы файлов, которые передает сценарий. В строке ведь наверняка такая строка script?id=777
---
Можно даже так
cat file.html|grep -E "<a href>"| sed -ne s/<a href>/\n/g -ne s/</a href>.*$//g
---
Найдена половина решения в стиле Жванецкого-Задорнова. Поскольку для каждой гиперссылки есть preview и имя *.jpg в preview совпадает с адресом ссылки, то просто:

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

```1c
    IE = Новый COMОбъект("InternetExplorer.Application");
    IE.Visible = Истина;
    IE.Navigate("https://site.com");

    Пока IE.readyState < 4 Цикл
    КонецЦикла;

    Ссылки=IE.Document.links;

    Для Каждого Ссылка из Ссылки Цикл
    ОбработатьСсылку(Ссылка.href); // а там опять IE.Navigate(Строка), если нужно
    КонецЦикла;
```