0
- 25.02.2016 - 11:56
|
Коллеги, может кто сталкивался. Как по OLE Word-ом открыть HTML-ссылку. Если сохраняю как автономную страницу, то все работает и извдекаю из файла все что нужно. Но хотелось бы обойтись без сохранения автономной страницы, тем более пока не знаю как это сделать из 1С 7.7, располагая лишь ссылкой. Если что, сильно не ругайте ) | |
1
- 25.02.2016 - 12:01
|
"Как по OLE Word-ом открыть HTML-ссылку" э-э-ээ... зачем? | |
2
- 25.02.2016 - 12:05
| (1)по ссылке открывается страница в которой данные тендера, их надо прочесть. | |
3
- 25.02.2016 - 12:25
|
(2) а ворд зачем?) погугли СоздатьОбъект("WinHttp.WinHttpRequest.5.1") | |
4
- 25.02.2016 - 12:37
| (3)спасибо, посмотрю, просто не знал. И сначала заказчик давал Word файл, вот мозги и зашорились. Но боюсь, что в твоем WinHttp все не так просто, у заказчика на этой странице по сути печатная форма, которая с маленькими нюансами прекрасно кушается Вордом, а тут как я логически свяжу данные этой печатной формы. А вообще сайт госзакупок делался уродами | |
5
- 27.02.2016 - 03:31
|
4-USSR > Не уродами он делался. А очень квалифицированными программистами. С целью максимально затруднить парсинг его. Регулярно (хоть раз в неделю) могут менять АПИ, формат и вообще все-все-все... С целью - чтобы все труды топикстартера были выкинуты на свалку. Лично мой табачный ларек, в котором я сейчас работаю, - именно так и поступает. | |
6
- 28.02.2016 - 06:12
|
Короче, коллеги, забудем тот бред, который я писал выше. Это классический пример ситуации, когда быстро и успешно решенная локальная задачка (извлечение нужных параметров закупки из УЖЕ имеющегося Word файла) при дальнейшем развитии потребовала других подходов, а мозги остались в старой логике. Продолжать решать задачу старым инструментом стало неправильно, вплоть до смеха известных кур в столице. Так вот, постановка становится по всей видимости классической, но у меня нет опыта работы с сайтами, поэтому требуется совет знающего человека. В инете покопался, можно утонуть, и не хотелось бы вооружаться всеми существующими инструментами, пусть там работают свои спецы, надо решить хоть и новую, но все-таки опять локальную задачу. Есть вся переписанная торговля и склад 7.7. В ней ведется учет тендерных заказов. Что сейчас надо. Есть некая страница конкретной закупки: http://new.zakupki.gov.ru/epz/order/...00009916000074 Из нее мы можем получить извещение (это по сути печатная форма, которую я в ворде и разбирал): http://new.zakupki.gov.ru/epz/order/...ormId=21309075 и что еще нужнее - реквизиты заказчика (тоже в виде простой таблички): http://zakupki.gov.ru/pgz/public/act...099&source=epz Хотелось бы скачать страничку закупки в локальный файл, превратить его в строку(это все умею, хотя может и неоптимально, но файлы маленькие, скорее всего эффективность некртична), пропарсить эту страничку закупки, получить ссылки на извещение и на реквизиты заказчика, затем пропарсить их и получить параметры закупки и реквизиты клиента. Инструментов парсинга вагон и тележка. Кто решал подобную задачу с учетом структуры данных. Что выбрать с учетом 7.7 и с учетом конкретной структуры html страниц. Снова не пинайте, если что не так | |
7
- 28.02.2016 - 10:28
| Обсуждаемые страницы в кодировке UTF-8. Пытаюсь читать как тестовый файл с помощью FSO, перепробовал все кодировки при открытии файла, выходит все равно ерунда ) | |
8
- 28.02.2016 - 13:57
| Преобразовал с помощью утилиты от Ромикса в 1251 страницу, все прекрасно прочиталось, обе странички (извещение и реквизиты) сумел самопально разобрать, читая как текстовый файл и выделяя необходимые теги. Сейчас еще надо понять как формируются ссылки на извещение и на реквизиты | |
9
- 28.02.2016 - 20:01
|
Кто-то из уважаемых тут выкладывал... Может вот так как-то? Процедура ПрочитатьДив(DIV) Для j=0 по DIV.length-1 Цикл A = DIV.item(j); nodeType = A.nodeType; Если nodeType = 3 Тогда Продолжить КонецЕсли; tagName = A.tagName; Если врег(tagName) <> "DIV" Тогда Продолжить КонецЕсли; innerText = A.innerText; innerHTML = A.innerHTML; Если Найти(innerHTML,"Извещение о проведении электронного аукциона") > 0 Тогда НачСсылки = Найти(innerHTML,"href="""); стрСсылка = Сред(innerHTML, НачСсылки + 6); КонСсылки = Найти(стрСсылка,""""); стрСсылка = Лев(стрСсылка, КонСсылки - 1); Сообщить(" == " + СокрЛП(стрСсылка)); //Сообщить(" == " + Лев(СокрЛП(innerText),250)); КонецЕсли; ПрочитатьДив(A.ChildNodes); КонецЦикла; КонецПроцедуры // ПрочитатьДив() //******************************************* Процедура Сформировать() Попытка objIE = СоздатьОбъект("InternetExplorer.Application"); objIE.Visible = 0; objIE.Silent = 0; objIE.offline = 0; objIE.Navigate(Адрес); Пока objIE.readyState < 4 Цикл // Ждем пока она загрузится Состояние("Ждем выполнения запроса..."); КонецЦикла; Док=objIE.document; Стр = Док.Body.innerText; // строку в файл Childs = Док.getElementsByTagName("Body").item(0).ChildNode s; Для i=0 по Childs.length-1 Цикл ПрочитатьДив(Childs); КонецЦикла; Исключение Предупреждение("Ошибка доступа к сайту " + Адрес); Возврат; КонецПопытки; Док = ""; objIE.Quit(); objIE = 0; КонецПроцедуры | |
10
- 29.02.2016 - 02:29
| (9)Спасибо, c извещением разобрался, все ок. Обошелся простым чтением c помощью FSO. Осталось добить ссылку на реквизиты заказчика. Тут что-то пока не врублюсь | |
11
- 29.02.2016 - 05:58
|
ссылку с реквизитами клиента тоже вроде победил Еще бы освоить запрос к поисковой системе сайта,чтобы найти страницу закупки по ее номеру. Что-то пока не могу найти как это делается. Подтолкните в нужную сторону, дальше сам пойду )) | |
12
- 29.02.2016 - 06:17
|
Извиняюсь торможу там проще намного. Вот ссылка на заказчика Процедура ПрочитатьТэги(Тэг = "") Попытка objIE = СоздатьОбъект("InternetExplorer.Application"); objIE.Visible = 0; objIE.Silent = 0; objIE.offline = 0; objIE.Navigate(Адрес); Пока objIE.readyState < 4 Цикл // Ждем пока она загрузится Состояние("Ждем выполнения запроса..."); КонецЦикла; Док=objIE.document; Узлы = Док.getElementsByTagName("td"); Для к=0 По Узлы.length-1 Цикл УзелЗаказа = Узлы.item(к); ТекстУзла = УзелЗаказа.innerText; Если ТекстУзла = "Размещение осуществляет" Тогда Сообщить(ТекстУзла); Сообщить("========="); // узел заказа - следующий td после этого td УзелЗаказа = Узлы.item(к + 1); Прервать; КонецЕсли; КонецЦикла; УзлыСсылок = Док.getElementsByTagName("a"); Для к=0 По УзлыСсылок.length-1 Цикл УзелСсылки = УзлыСсылок.item(к); УзелЗаказчика = УзелСсылки.ParentNode; ИмяЗаказчика = УзелСсылки.innerText; Если УзелЗаказа.innerText = УзелЗаказчика.innerText Тогда СсылкаНаЗаказчика = УзелСсылки.href; ТекстЗаказчик = УзелЗаказчика.innerText; Сообщить(ТекстЗаказчик); Сообщить("========="); Сообщить(СсылкаНаЗаказчика); КонецЕсли; КонецЦикла; Исключение Предупреждение("Ошибка доступа к сайту " + Адрес); Возврат; КонецПопытки; Док = ""; objIE.Quit(); objIE = 0; КонецПроцедуры результат: Размещение осуществляет ========= Заказчик КРАЕВОЕ ГОСУДАРСТ... ========= http://new.zakupki.gov.ru/controls/p...de=03382000099 | |
13
- 29.02.2016 - 06:27
|
(11) а так нельзя? Адрес = "http://new.zakupki.gov.ru/epz/order/notice/ea44/view/common-info.html?regNumber=" + НомерЗакупки ... objIE.Navigate(Адрес); | |
| Интернет-форум Краснодарского края и Краснодара |