К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Сохранить кодовую часть веб-страницы в файл - как?

Гость
0 - 16.04.2018 - 17:52
Привет всем!
С 13 апреля 2018г обнаружилось, что контур-фокус закрыл доступ к веб-запросам (общался с ними), но есть доступ
к серверу контур-фокус командой:
ЗапуститьПриложение(СтрокаЗапроса);
- На экран выходит экранная форма ответа.
- Нужно сохранить кодовую часть полученной веб-страницы в текстовый файл - как?
- Вручную - через сохранить как - и перекодировкой в кириллицу 1251 - можно, но непроизводительно.
К тому же - хотелось бы не открывать экранную форму - она затратна, а сразу перейти в режим сохранения.
- У кого есть опыт?
:-)



1 - 16.04.2018 - 18:02
Microsoft.XMLHTTP
Гость
2 - 16.04.2018 - 18:49
1-Ирли Бёрд >???
Имеется в виду вот это?
СтрокаHTTPЗапроса="https://focus.kontur.ru/search?query="+Наименование_+"&region="+?(ВыбРегио н.Выбран()=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Запроса);
Но в таком случает ответ выходит в виде экранной формы, а нужно кодовую часть сохранить в файл, не открывая экранную форму.
Гость
3 - 16.04.2018 - 22:48
К тому же - хотелось бы не открывать экранную форму - она затратна, а сразу перейти в режим сохранения.
Но в таком случает ответ выходит в виде экранной формы, а нужно кодовую часть сохранить в файл, не открывая экранную форму.
экранная формa в вашем случае это что, о чем речь? - желательно скрин
Гость
4 - 17.04.2018 - 04:24
3-migi >Без скрина, просто запросом в строке браузера Google Chrom:
https://focus.kontur.ru/entity?query=5067746794671
Здесь "5067746794671" = ОГРН организации, для примера.
Посмотреть кодовую часть при этом, можно в режиме "Просмотр кода страницы". Нужно перехватить ответ по запросу к серверу focus.kontur.ru и сохранить в файл, или текстовый образ.
Гость
5 - 17.04.2018 - 04:52
7.7-ка?
6 - 17.04.2018 - 04:54
Функция ПрочитатьСтраницуВФайл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(XMLHTTPReque st.ResponseBody)");


//скидываем во временный файл
ИмяФайла = СтрЗаменить(стрАдресСтраницы, "://", "_");

Если Найти(ИмяФайла, "%") <> 0 Тогда
//url-кодировка детектед!
ИмяФайла = РаскодироватьURL(ИмяФайла);
КонецЕсли;

ИмяФайла = ЗаменитьЗарезервированныеСимволы(ИмяФайла);
ИмяФайла = КаталогВременныхФайлов() + ИмяФайла+".xml";

Попытка
ADODBStream.SaveToFile(ИмяФайла, 2);
Исключение
Сообщить("Не удалось записать файл "+ИмяФайла+РазделительСтрок+ОписаниеОшибки(), "!!");
Возврат "";
КонецПопытки;

//закрываем поток
ADODBStream.Close();

//деструкторы
ScriptControl = "";
ADODBStream = "";
oleXM = "";

Возврат ИмяФайла;

КонецФункции //ПрочитатьСтраницуВФайлXML
Гость
7 - 17.04.2018 - 05:14
Цитата:
Сообщение от migi Посмотреть сообщение
7.7-ка?
Да, 7.7. :-)
8 - 17.04.2018 - 05:51
во-первых, прекращай палиться
во-вторых, посмотри пример, он рабочий
Гость
9 - 17.04.2018 - 06:01
ЗапуститьПриложение
Выполняет запуск внешнего приложения.
Синтаксис:
ЗапуститьПриложение(<СтрокаКоманды>)
Англоязычный синоним:
RunApp
Параметры:
<СтрокаКоманды>
Строковое выражение, содержащее строку команды запуска внешнего приложения или имя файла, чтобы открыть его с помощью ассоциированного для данного вида файлов приложения.
Описание:
Процедура ЗапуститьПриложение вызывает запуск внешнего приложения. В отличие от функции КомандаСистемы запуск приложения выполняется непосредственно, минуя командный интерпретатор. При выполнении команды исполняемый файл загружается как «верхняя», активная программа.
Процедура, кроме того, может открыть файл с помощью ассоциированного для данного вида файлов приложения. (При условии, что таковое установлено на данном компьютере).
Если загружается Windows-приложение, то управление немедленно возвращается в систему 1С:Предприятие на следующий за оператором ЗапуститьПриложение оператор и система продолжает выполняться как фоновая прикладная программа. Пользователь может возвратиться в запускающую программу или закончив выполнение запущенной, или переключившись обратно посредством списка задач Windows.
Если в параметре <СтрокаКоманды> не содержится путь к загружаемой программе в файловой системе к программе, то поиск происходит в следующей последовательности:
текущий системный каталог;
каталог Windows;
системный каталог Windows;
все каталоги, указанные в переменной PATH;
Пример:
* В данном примере запускается редактор текста notepad.exe и в него загружается файл textl. txt.
ЗапуститьПриложение("notepad textl.txt");

намек ясен?
Гость
10 - 17.04.2018 - 06:03
Цитата:
Сообщение от Ирли Бёрд Посмотреть сообщение
во-первых, прекращай палиться во-вторых, посмотри пример, он рабочий
д/с ладушки
Код:
Код:
*
Гость
11 - 17.04.2018 - 06:09
Цитата:
Сообщение от Ирли Бёрд Посмотреть сообщение
во-первых ... он рабочий
подарок
Код:
[code]*[/code]
Гость
12 - 17.04.2018 - 06:28
8-Ирли Бёрд > 3430км.
Гость
13 - 17.04.2018 - 06:44
Цитата:
Сообщение от migi Посмотреть сообщение
ЗапуститьПриложение("notepad textl.txt"); намек ясен?
:-)
Об этом я уже писал в 2-perpetum >
Цитата:
Работает только: ЗапуститьПриложение(СтрокаHTTPЗапроса);
Но в таком случает ответ выходит в виде экранной формы, а нужно кодовую часть сохранить в файл, не открывая экранную форму.
КонецЦитаты
Дело в том, что ассоциированное приложение - интернетексплорер, который возвращает экранную форму...
Гость
14 - 17.04.2018 - 06:55
скайп? 1С++
Гость
15 - 17.04.2018 - 07:04
Цитата:
Сообщение от Ирли Бёрд Посмотреть сообщение
//получили текст страницы в XMLHTTPRequest.ResponseBody
- на этом и затыкается, потому как, при обращении к контур-фокус, метод GER-send не работает (перестал работать с 13.04.2018г - общался со спецами контур-фокус - не хотят бесплатной раздачи), а именно:
XMLHTTPRequest.Open("GET", стрАдресСтраницы, 0);
XMLHTTPRequest.Send();
- возвращает пустое значение...
Попытка
ТекстОтвета=XMLHTTPRequest.ResponseBody;
Исключение
Сообщить("Ошибка вывода XMLHTTPRequest.ResponseBody");
КонецПопытки;
- вылетает на сообщение "ошибка".

Может я неправильно интерпретирую структуру XMLHTTPRequest ?
Гость
16 - 17.04.2018 - 07:15
15-perpetum > - описка, читать: GER-send = GET-send

Отредактировано perpetum; 17.04.2018 в 07:18. Причина: правка
Гость
17 - 17.04.2018 - 07:40
16-perpetum > в базовых конфигурациях подсмотреть
Гость
18 - 17.04.2018 - 08:12
CHECK_KA.ERT
Гость
19 - 17.04.2018 - 08:18
запрос к
Цитата:
Сообщение от perpetum Посмотреть сообщение
https://focus.kontur.ru/entity?query=5067746794671
успешно возвращает
Код:
<!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>
Гость
20 - 17.04.2018 - 08:33
Цитата:
Сообщение от migi Посмотреть сообщение
CHECK_KA.ERT
Спасибо, попробую, но это будет обращение к другому серверу (не контур-фокус) и там запросы только по готовым ИНН, КПП, а можно ли по наименованию контрагента, ОГРН и можно ли в ответе получить адрес и другие реквизиты контрагента?
- Как получить список всех возможных реквизитов в ответе?
Гость
21 - 17.04.2018 - 08:34
ответ на запрос, файл полностью - http://rgho.st/76FmWnnWw
Гость
22 - 17.04.2018 - 08:41
19-migi > - имеется в виду чтение кода из экранной формы через меню по правой кнопке мыши "Просмотр кода страницы" ? - это да...
Или каким образом была получена кодовая часть "успешно возвращает"?
Гость
23 - 17.04.2018 - 08:42
Цитата:
Сообщение от perpetum Посмотреть сообщение
Спасибо, попробую, но это будет обращение к другому серверу (не контур-фокус) и там запросы только по готовым ИНН, КПП, а можно ли по наименованию контрагента, ОГРН и можно ли в ответе получить адрес и другие реквизиты контрагента? - Как получить список всех возможных реквизитов в ответе?
предлагаете все это расписывать здесь? - скайп
Гость
24 - 17.04.2018 - 08:45
значения для
Код:
https://focus.kontur.ru/search?query="+Наименование_+"&region="+?(ВыбРегио н.Выбран()=1,Число(ВыбРегион.Код),"")+"&industry=" +"&state=081077917";
                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                                                                       ???
пример?
Гость
25 - 17.04.2018 - 09:00
уважаемый, это https://in***art.ru/public/336256/ не серьёзно.
Гость
26 - 17.04.2018 - 12:51
25-migi > - это пока на редактировании, если удастся исправить ситуацию с запросом - выложу.
Гость
27 - 20.04.2018 - 11:22
26-perpetum >https://fo***ru/forum9/topic190853/
Гость
28 - 20.04.2018 - 16:07
27-migi >Для желающих подключиться на форуме инфостарт:
https://forum.infostart.ru/forum9/topic190853/
Гость
29 - 23.04.2018 - 03:32
На текущий момент нашел, что если запрос сделать командой:
1. - ЗапуститьПриложение(СтрокаЗапроса),
то в одностраничном ответе по запросу, сразу в строке браузера получим URL. Затем, можно ввести URL в качестве строки запроса, получим ответ сервера в нужном формате для парсинга по реквизитам контрагента.
Если строка запроса в команде:
2. - ЗапуститьПриложение(СтрокаЗапроса) является многостраничной - содержит множество ссылок на URL, тогда можно копировать конкретный URL со страницы для последующего поиска - как в одностраничном запросе.
Собственно, всё сводится к получению списка URL веб-страницы.
- Таким образом, нужен скрипт для чтения URL из веб-страницы.


К списку вопросов






Copyright ©, Все права защищены