Регистрация Правила Главная форума Поиск |
0
- 30.11.2018 - 13:14
|
Здравствуйте! Давно я здесь не появлялся однако ... :) Прошу помощь зала! Есть две версии решения одной и той же задачи 1) &НаСервере Функция ПолучитьАртикул() Возврат СокрЛП(ЭтотОбъект.СсылкаНаОбъект.Артикул); КонецФункции &НаКлиенте Процедура Расш1_Команда1После(Команда) url="http://jdparts.sovintel.ru/#T=parts&MKTPT="+ПолучитьАртикул(); htmlDoc=ПолучитьHtmlDoc(url); Сообщить(htmlDoc); КонецПроцедуры &НаКлиенте Функция ПолучитьHtmlDoc(url) Перем tRows,K; //Если НЕ ПривилегированныйРежим() Тогда //УстановитьПривилегированныйРежим(Истина); //КонецЕсли; Попытка appIE = Новый COMОбъект("InternetExplorer.Application"); appIE.Visible = Ложь; // не отображаем его (браузер) на экране // загружаем страницу из интернета appIE.Navigate(url); i=0; // ждем пока загрузится страница по url Пока appIE.readyState < 4 цикл КонецЦикла; // получаем html-страницу как DOM (объектная модель документа) htmlDoc=appIE.Document; Для К=0 По 500000 Цикл КонецЦикла; tRows = htmlDoc.getElementsByTagName("tr"); Для К=0 По 500000 Цикл КонецЦикла; Для K=0 По tRows.length - 1 Цикл row = tRows.item(K); Если row.cells.item(0).innerText="Рекомендуемая Цена (без НДС):" Тогда htmlDoc = row.cells.item(1).innerText; КонецЕсли; КонецЦикла; Исключение Сообщить("Ошибка создания документа html"); КонецПопытки; appIE.Quit(); appIE=""; //Если ПривилегированныйРежим() Тогда //УстановитьПривилегированныйРежим(Ложь); //КонецЕсли; Возврат htmlDoc; КонецФункции Этот код в принципе рабочий. Но чтобы обеспечить кроссплатформенность, решил не заморачиваться на COM и реализовать штатными средствами. Написал вот такое &НаСервере Функция ПолучитьАртикул() Возврат СокрЛП(ЭтотОбъект.СсылкаНаОбъект.Артикул); КонецФункции &НаКлиенте Процедура Расш1_Команда1После(Команда) АдресСайта="http://jdparts.sovintel.ru/#T=parts&MKTPT="+ПолучитьАртикул(); Элементы.HTML.Заголовок = АдресСайта; КонецПроцедуры &НаКлиенте Процедура Расш1_HTMLДокументСформированВместо(Элемент) Документ = ЭтаФорма.Элементы.HTML.Документ; Если Документ.URLUnencoded = "about:blank" Тогда Возврат; КонецЕсли; СтрокиДокумента = Документ.getElementsByTagName("tr"); Для К=0 По СтрокиДокумента.length-1 Цикл Строка = СтрокиДокумента.item(К); Если Строка.cells.item(0).innerText="Рекомендуемая Цена (без НДС):" Тогда Цена_Совинтел = Строка.cells.item(1).innerText; Сообщить("Рекомендуемая Цена (без НДС):"+Цена_Совинтел); КонецЕсли; КонецЦикла; КонецПроцедуры В общем, не взлетело! Вопрос почему? В документации на рсширение поля написано что реквизит Документ вернет ВнешнийОбъект. Так и получилось, в отладчике видно. Но метод getElementsByTagName("tr") возвращает пустую коллекцию. Что я делаю не так? :) | |
1
- 30.11.2018 - 13:16
| Да, поле отображает содержимое страницы корректно | |
| Интернет-форум Краснодарского края и Краснодара |