![]() |
Сохранить кодовую часть веб-страницы в файл - как? Привет всем! С 13 апреля 2018г обнаружилось, что контур-фокус закрыл доступ к веб-запросам (общался с ними), но есть доступ к серверу контур-фокус командой: ЗапуститьПриложение(СтрокаЗапроса); - На экран выходит экранная форма ответа. - Нужно сохранить кодовую часть полученной веб-страницы в текстовый файл - как? - Вручную - через сохранить как - и перекодировкой в кириллицу 1251 - можно, но непроизводительно. К тому же - хотелось бы не открывать экранную форму - она затратна, а сразу перейти в режим сохранения. - У кого есть опыт? :-) |
Microsoft.XMLHTTP |
1-Ирли Бёрд >??? Имеется в виду вот это? СтрокаHTTPЗапроса="https://focus.kontur.ru/search?query="+Наименование_+"®ion="+?(ВыбРегион.Выбран()=1,Число(ВыбРегион.Код),"")+"&industry="+"&state=081077917"; хHTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1"); хHTTP.open ("GET", СтрокаHTTPЗапроса,0); хHTTP.send(); ТекстHTTPОтвета = хHTTP.responsetext(); Текст.ДобавитьСтроку(СтрЗаменить(ТекстHTTPОтвета,"utf-8","windows-1251")); Текст.Записать(Каталогпользователя() + "otvet32.htm"); - Не работает - уже описал проблему в 0-perpetum >. Работает только: ЗапуститьПриложение(СтрокаHTTPЗапроса); Но в таком случает ответ выходит в виде экранной формы, а нужно кодовую часть сохранить в файл, не открывая экранную форму. |
К тому же - хотелось бы не открывать [em]экранную форму[/em] - она затратна, а сразу перейти в режим сохранения. Но в таком случает ответ выходит в виде [em]экранной формы[/em], а нужно кодовую часть сохранить в файл, не открывая экранную форму. экранная формa в вашем случае это что, о чем речь? - желательно скрин |
3-migi >Без скрина, просто запросом в строке браузера Google Chrom: [url]https://focus.kontur.ru/entity?query=5067746794671[/url] Здесь "5067746794671" = ОГРН организации, для примера. Посмотреть кодовую часть при этом, можно в режиме "Просмотр кода страницы". Нужно перехватить ответ по запросу к серверу focus.kontur.ru и сохранить в файл, или текстовый образ. |
7.7-ка? |
Функция ПрочитатьСтраницуВФайлXML(АдресСтраницы) Перем XMLHTTPRequest, ADODBStream; стрАдресСтраницы = СокрЛП(АдресСтраницы); Состояние("Чтение страницы "+стрАдресСтраницы); Попытка XMLHTTPRequest = СоздатьОбъект("Microsoft.XMLHTTP"); Исключение Сообщить("Ошибка создания Microsoft.XMLHTTP", "!!"); Возврат ""; КонецПопытки; XMLHTTPRequest.Open("GET", стрАдресСтраницы, 0); Попытка XMLHTTPRequest.Send(); Исключение Сообщить("Ошибка выполнения метода SEND объекта Microsoft.XMLHTTP", "!!"); Возврат ""; КонецПопытки; //получили текст страницы в XMLHTTPRequest.ResponseBody Попытка ADODBStream = СоздатьОбъект("ADODB.Stream"); Исключение Сообщить("Ошибка создания ADODB.Stream", "!!"); Возврат ""; КонецПопытки; //тип и режим потока ADODBStream.Mode = 3; ADODBStream.Type = 1; ADODBStream.Open(); //объект для управления скриптами Попытка ScriptControl = СоздатьОбъект("MSScriptControl.ScriptControl"); Исключение Сообщить("Ошибка создания MSScriptControl.ScriptControl", "!!"); Возврат ""; КонецПопытки; ScriptControl.Language = "vbscript"; //добавим созданные объекты ScriptControl.AddObject("ADODBStream", ADODBStream); ScriptControl.AddObject("XMLHTTPRequest", XMLHTTPRequest); //скриптом запишем в поток ADO данные из объекта XMLHTTPRequest, то есть содержимое страницы ScriptControl.Eval("ADODBStream.Write(XMLHTTPRequest.ResponseBody)"); //скидываем во временный файл ИмяФайла = СтрЗаменить(стрАдресСтраницы, "://", "_"); Если Найти(ИмяФайла, "%") <> 0 Тогда //url-кодировка детектед! ИмяФайла = РаскодироватьURL(ИмяФайла); КонецЕсли; ИмяФайла = ЗаменитьЗарезервированныеСимволы(ИмяФайла); ИмяФайла = КаталогВременныхФайлов() + ИмяФайла+".xml"; Попытка ADODBStream.SaveToFile(ИмяФайла, 2); Исключение Сообщить("Не удалось записать файл "+ИмяФайла+РазделительСтрок+ОписаниеОшибки(), "!!"); Возврат ""; КонецПопытки; //закрываем поток ADODBStream.Close(); //деструкторы ScriptControl = ""; ADODBStream = ""; oleXM = ""; Возврат ИмяФайла; КонецФункции //ПрочитатьСтраницуВФайлXML |
[quote=migi;45511859] 7.7-ка? [/quote] Да, 7.7. :-) |
во-первых, прекращай палиться во-вторых, посмотри пример, он рабочий |
ЗапуститьПриложение Выполняет запуск внешнего приложения. Синтаксис: ЗапуститьПриложение(<СтрокаКоманды>) Англоязычный синоним: RunApp Параметры: <СтрокаКоманды> Строковое выражение, содержащее строку команды запуска внешнего приложения или имя файла, чтобы открыть его с помощью ассоциированного для данного вида файлов приложения. Описание: Процедура ЗапуститьПриложение вызывает запуск [b]внешнего приложения[/b]. В отличие от функции КомандаСистемы запуск приложения выполняется непосредственно, минуя командный интерпретатор. При выполнении команды исполняемый файл загружается как «верхняя», активная программа. Процедура, кроме того, может открыть файл с помощью ассоциированного для данного вида файлов приложения. (При условии, что таковое установлено на данном компьютере). Если загружается Windows-приложение, то управление немедленно возвращается в систему 1С:Предприятие на следующий за оператором ЗапуститьПриложение оператор и система продолжает выполняться как фоновая прикладная программа. Пользователь может возвратиться в запускающую программу или закончив выполнение запущенной, или переключившись обратно посредством списка задач Windows. Если в параметре <СтрокаКоманды> не содержится путь к загружаемой программе в файловой системе к программе, то поиск происходит в следующей последовательности: текущий системный каталог; каталог Windows; системный каталог Windows; все каталоги, указанные в переменной PATH; Пример: * В данном примере запускается редактор текста notepad.exe и в него загружается файл textl. txt. ЗапуститьПриложение("[b]notepad textl.txt[/b]"); намек ясен? |
[quote=Ирли Бёрд;45511875]во-первых, прекращай палиться во-вторых, посмотри пример, он рабочий[/quote]д/с ладушки [code][code]*[/code][/code] |
[quote=Ирли Бёрд;45511875]во-первых ... он рабочий[/quote]подарок [code][code]*[/code][/code] |
8-Ирли Бёрд > 3430км. |
[quote=migi;45511877]ЗапуститьПриложение("notepad textl.txt"); намек ясен? [/quote] :-) Об этом я уже писал в 2-perpetum > [u]Цитата:[/u] Работает только: ЗапуститьПриложение(СтрокаHTTPЗапроса); Но в таком случает ответ выходит в виде экранной формы, а нужно кодовую часть сохранить в файл, не открывая экранную форму. [u]КонецЦитаты[/u] Дело в том, что ассоциированное приложение - интернетексплорер, который возвращает экранную форму... |
скайп? 1С++ |
[quote=Ирли Бёрд;45511861]//получили текст страницы в XMLHTTPRequest.ResponseBody[/quote] - на этом и затыкается, потому как, при обращении к контур-фокус, метод GER-send не работает (перестал работать с 13.04.2018г - общался со спецами контур-фокус - не хотят бесплатной раздачи), а именно: XMLHTTPRequest.Open("GET", стрАдресСтраницы, 0); XMLHTTPRequest.Send(); - возвращает пустое значение... Попытка ТекстОтвета=XMLHTTPRequest.ResponseBody; Исключение Сообщить("Ошибка вывода XMLHTTPRequest.ResponseBody"); КонецПопытки; - вылетает на сообщение "ошибка". Может я неправильно интерпретирую структуру XMLHTTPRequest ? |
15-perpetum > - описка, читать: GER-send = GET-send |
16-perpetum > в базовых конфигурациях подсмотреть |
CHECK_KA.ERT |
запрос к [quote=perpetum;45511855]https://focus.kontur.ru/entity?query=5067746794671[/quote] успешно возвращает [code] <!doctype html> <!--[if IE]><![endif]--> <!--[if lt IE 7]><html class="ie-lt7 ie-lt8 ie-lt9 ie-lt10" lang="ru"><![endif]--> <!--[if IE 7]><html class="ie-lt8 ie-lt9 ie-lt10" lang="ru"><![endif]--> <!--[if IE 8]><html class="ie-lt9 ie-lt10" lang="ru"><![endif]--> <!--[if IE 9]><html class="ie-lt10" lang="ru"><![endif]--> <!--[if !IE]><!--><html lang="ru"><!--<![endif]--> <head> <meta cha ... ){d.addEventListener("DOMContentLoaded",f,false);**else{f();****)(document,window,"yandex_metrika_callbacks");</script><noscript><div><img src="//mc.yandex.ru/watch/14324677?ut=noindex" style="position:absolute;left:-9999px;" alt=""/></div></noscript> <script type="text/javascript">$(document).on("ym-reach-goal",function(d,c,b){yaCounter14324677.reachGoal(c,{label:b**)**);</script> </body> </html> [/code] |
[quote=migi;45512022]CHECK_KA.ERT[/quote] Спасибо, попробую, но это будет обращение к другому серверу (не контур-фокус) и там запросы только по готовым ИНН, КПП, а можно ли по наименованию контрагента, ОГРН и можно ли в ответе получить адрес и другие реквизиты контрагента? - Как получить список всех возможных реквизитов в ответе? |
ответ на запрос, файл полностью - [url]http://rgho.st/76FmWnnWw[/url] |
19-migi > - имеется в виду чтение кода из экранной формы через меню по правой кнопке мыши "Просмотр кода страницы" ? - это да... Или каким образом была получена кодовая часть "успешно возвращает"? |
[quote=perpetum;45512075]Спасибо, попробую, но это будет обращение к другому серверу (не контур-фокус) и там запросы только по готовым ИНН, КПП, а можно ли по наименованию контрагента, ОГРН и можно ли в ответе получить адрес и другие реквизиты контрагента? - Как получить список всех возможных реквизитов в ответе?[/quote]предлагаете все это расписывать здесь? - скайп |
значения для [code] https://focus.kontur.ru/search?query="+Наименование_+"®ion="+?(ВыбРегио н.Выбран()=1,Число(ВыбРегион.Код),"")+"&industry=" +"&state=081077917"; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ??? [/code] пример? |
уважаемый, это [url]https://in***art.ru/public/336256/[/url] не серьёзно. |
25-migi > - это пока на редактировании, если удастся исправить ситуацию с запросом - выложу. |
26-perpetum >[url]https://fo***ru/forum9/topic190853/[/url] |
27-migi >Для желающих подключиться на форуме инфостарт: [url]https://forum.infostart.ru/forum9/topic190853/[/url] |
На текущий момент нашел, что если запрос сделать командой: 1. - ЗапуститьПриложение(СтрокаЗапроса), то в одностраничном ответе по запросу, сразу в строке браузера получим URL. Затем, можно ввести URL в качестве строки запроса, получим ответ сервера в нужном формате для парсинга по реквизитам контрагента. Если строка запроса в команде: 2. - ЗапуститьПриложение(СтрокаЗапроса) является многостраничной - содержит множество ссылок на URL, тогда можно копировать конкретный URL со страницы для последующего поиска - как в одностраничном запросе. Собственно, всё сводится к получению списка URL веб-страницы. - Таким образом, нужен скрипт для чтения URL из веб-страницы. |
Текущее время: 03:30. Часовой пояс GMT +3. |