Обращение по индексу к подчинённым элементам в Поле HTML Документа

1. soulner 359 29.02.20 18:34 Сейчас в теме
Коллеги, доброе время суток.
Может кто сталкивался с таким хитрым поведением элемента Поле HTML документа (платформа 8.3.16.1148 и 8.3.15 тоже).
Есть реквизит формы "Браузер" - строка неограниченной длины, есть элемент формы "Браузер" с видом "Поле HTML документа".
Хочу загрузить сайт и получить имя тэга первого подчинённого элемента (это пример для демонстрации), т.е. выполнить:
Сообщить(Элементы.Браузер.Документ.documentElement.childNodes[0].tagName);

Если web-страница получена путём присваивания реквизиту "Браузер" адреса страницы, то будет ошибка, что "tagName" не найден, а если реквизиту "Браузер" присваивается html-код всё будет хорошо и получим тэг "HEAD".
Естественно я пробовал и через Элементы.Браузер.defaultView и перебором в цикле Для Каждого Из... Везде поведение похожее.
Прошу совета у знающих.
Найденные решения
4. SlavaKron 04.03.20 10:28 Сейчас в теме
Проблема, видимо, в специфике сайта яндекса и WebKit (движок, используемый с 8.3.14 вместо IE). У меня ошибка повторяется на сайте ya.ru, но с google.com и mail.ru, к примеру, всё в порядке.
В случае с ya.ru, у сформированного документа недоступны никакие методы (в отладке они кстати почему-то стали доступны в виде свойств).
В качестве костыля могу посоветовать рекурсивно перебрать подчиненные элементы свойства "children".
Обращение к элементу сделать через строковое представление индекса элемента, например, Элемент.children["0"].
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sergitax 01.03.20 21:28 Сейчас в теме
Смотрел на платформе 8.3.15.1869 (32 бита). Оба метода отрабатывают одинаково (присвоение текста страницы и присвоение адреса).
Более того, получить элемент можно и методом:
Элементы.Браузер.Документ.getElementsByTagName("Имя_тэга");

либо:
Элементы.Браузер.Документ.getElementById("Идентификатор");

при наличии идентификатора у него.
Получите сам элемент (типа "Внешний объект").

Я не веб-разработчик, но мы в своих решениях часто работаем с HTML-страницами (как со своими, так и с чужими). Дело это неблагодарное (имею ввиду парсинг страниц).

И второй момент - вы дожидаетесь события "ДокументСформирован()" для поля HTML-страницы?
3. soulner 359 03.03.20 18:10 Сейчас в теме
Спасибо, что откликнулись.
Сразу скажу, что событие "ДокументСформирован()" я жду.
Напишу подробнее:
1.1 процедура загрузки сайта, реквизит "Сайт" - строка, связанная с полем HTML документа
Соединение = Новый HTTPСоединение("ya.ru",,,,,5,Новый ЗащищенноеСоединениеOpenSSL(
	        Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
	        Новый СертификатыУдостоверяющихЦентровWindows));
Запрос = Новый HTTPЗапрос();
ОтветHTTP = Соединение.Получить(Запрос);
Сайт = ОтветHTTP.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);

1.2 в процедуре "СайтДокументСформирован(Элемент)"
Тэг = Элементы.Браузер.Документ.getElementsByTagName("HEAD")[0];
Сообщить(Тэг.tagName);

получаем, как и положено "HEAD"
2.1 процедура загрузки сайта,
Сайт = "ya.ru";

2.2 в процедуре "СайтДокументСформирован(Элемент)" получаем ошибку "Метод объекта не обнаружен (getElementsByTagName)"
Я уже голову сломал.
4. SlavaKron 04.03.20 10:28 Сейчас в теме
Проблема, видимо, в специфике сайта яндекса и WebKit (движок, используемый с 8.3.14 вместо IE). У меня ошибка повторяется на сайте ya.ru, но с google.com и mail.ru, к примеру, всё в порядке.
В случае с ya.ru, у сформированного документа недоступны никакие методы (в отладке они кстати почему-то стали доступны в виде свойств).
В качестве костыля могу посоветовать рекурсивно перебрать подчиненные элементы свойства "children".
Обращение к элементу сделать через строковое представление индекса элемента, например, Элемент.children["0"].
5. soulner 359 04.03.20 20:48 Сейчас в теме
(4)
Обращение к элементу сделать через строковое представление индекса элемента, например, Элемент.children["0"].
- вы меня спасли! Я обращался через числовой индекс. Спасибо!!!
Оставьте свое сообщение

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