Имя: Пароль:
1C
1С v8
Доступ к существующему объекту InternetExplorer
,
0 ProgerLink
 
02.10.13
21:27
Привем коллегам.
Друзья, кто знает, как подключиться к существующему объекту "InternetExplorer.Application", и его свойству "Document" со всем содержимым страницы ???
Через COMОбъект("Shell.Application") можно получить все Эксплореры, но свойство document будет без содержимого страницы.

Приемлем любой вариант, в том числе используя WSH/WMI/Delphi/C
1 ProgerLink
 
02.10.13
22:33
Какие еще варианты
2 Asmody
 
02.10.13
22:36
Я так подозреваю, что доступ внешнего приложения внутрь браузера несколько противоречит концепции безопасности последнего. Хотя можно, наверно, чем-нибудь типа autoit'а скопировать содержимое страницы
3 ProgerLink
 
02.10.13
22:41
кто еще может предложить вариант, либо утвердить невозможность
4 ProgerLink
 
02.10.13
22:57
рассмотрю рабочий вариант за вознаграждение
5 Torquader
 
02.10.13
23:49
Скорей всего, никак - "ослик" создаёт нормальный OLE-интерфейс только по запуску с ключом -embedding, причём объект создаётся для одного сеанса - для остальных - создаются другие объекты.
Через Shell можно получить окна просмотра файловой системы, а не окна браузера (хотя, на самом деле, это одно и то же).
При доступе к браузеру работает ограничение безопасности такое же как и при доступе к iframe с содержимым другого домена (локальные файлы находятся в локальной зоне).
6 Jaap Vduul
 
03.10.13
00:57
Давно когда-то писал компоненту (ещё для 7.7) - как раз получал доступ к запущенному экзнмпляру IE через Shell.Application.Windows и проблем с получением содержимого не было.
Насколько знаю, она до сих пор у клиента работает (а это, как минимум, IE8).
7 ProgerLink
 
03.10.13
09:45
(6) Вы бы меня очень выручили своим решением, тем более если решение как внешняя компонента. Как с вами можно связаться ?
8 ProgerLink
 
03.10.13
09:48
Друзья, может кто еще имеет решение ?
9 ProgerLink
 
03.10.13
13:10
Ап
10 ProgerLink
 
03.10.13
13:24
Человек знающий ответ, зайди же уже на эту ветку, не проходи мимо, тебя здесь ждут пипец как
11 dk
 
03.10.13
13:33
пробовал через ПолучитьCOMОбъект?

П = ПолучитьCOMОбъект( , "Excel.Application");
Переменная П получит значение типа COMОбъект, соответствующее активному приложению MS Excel, если таковое имелось, или будет вызвано исключение, если активных экземпляров MS Excel не было
12 sikuda
 
03.10.13
13:35
(0) Ты определись зачем тебе IE нужен. Для данных есть ссылка на интернет ресурс. Для движка. А что именно. Может "htmlfile" достаточно.
13 ProgerLink
 
03.10.13
13:49
не написал ранее, пардон.
Для чего нужен IE либо его альтернатива, если предложите.
Необходимо анализировать содержимое страницы на таблица, ссылки, рисунки. На некоторых ссылках висят скрипты события, поэтому приходится вызывать метод ".Click()", но вновь открытое окно браузера, я словить не могу, мне его так же надо анализировать и работать с сылками, включая метод Click. Т.е. через Navigate не получится!
14 ProgerLink
 
03.10.13
14:33
(11) С Екселем работает, с IE пишет ошибку
15 ProgerLink
 
03.10.13
14:36
В общем вопрос открыт и никапли не продвинулся в решении.
Объект "HTML" 1С овский не подходит, нет возможности выполнять Click() для ссылок. ПолеHTMLДокумента тоже не поможет, вновь открытые страницы после перехода по некоторым ссылкам появляются как новые процессы "InternetExplorer". HTTP советовал кто то, но думаю что к моей задачи это слабо относится
16 smaharbA
 
03.10.13
14:40
shell.aplication - windows
17 ProgerLink
 
03.10.13
14:41
(16) Все что будет идти в document, полученный через shell.aplication - windows(), будет без данных
18 ProgerLink
 
03.10.13
15:35
Готов материально поощрить того кто найдет решение. Размер поощрения 10 000 руб
19 smaharbA
 
03.10.13
15:44
(17) щаз
20 smaharbA
 
03.10.13
15:45
(18) готов сделать за час с перекуром
21 ProgerLink
 
03.10.13
15:46
(19) Обрати внимание на коллекию "all" и "body" объекта document
22 ProgerLink
 
03.10.13
15:46
давай свой скайп, чего мусорить
23 smaharbA
 
03.10.13
15:57
smaharba.go

только у меня нет ни микрофона, ни камеры тут
24 ProgerLink
 
03.10.13
16:31
Как успехи ?
25 smaharbA
 
03.10.13
17:31
(24) дак я не понял, точно нужно ?
если да - стучись
26 smaharbA
 
03.10.13
17:44
нету времени много разглагольствовать, тупенько если

    ЗапуститьПриложение("explorer http://www.mista.ru";);
    Скрипт=Новый COMОбъект("MSScriptControl.ScriptControl");
    Скрипт.language="JScript";
    Скрипт.AddCode("function body(x){return x.document.body}");
    Шел=Новый COMОбъект("shell.application");
    Вопрос("ххх",РежимДиалогаВопрос.ОК,3);
    Окна=Шел.Windows();
    Для Каждого Окно Из Окна Цикл
        Скрипт.AddObject("Окно",Окно);
        Сообщить(Скрипт.Eval("Окно.document.body.innerText"));
        Скрипт.Reset();
    КонецЦикла;
27 smaharbA
 
03.10.13
17:45
Бабло когда ждать ?
28 ProgerLink
 
03.10.13
17:55
Я на работе пока, не могу по личным проектам отвлекаться. Вечером свяжусь, по скайпу!
29 ProgerLink
 
03.10.13
17:57
В скайп к тебе сразу постучался, только никто не открывает. Если не ошибаюсь ты "Олег" который
30 smaharbA
 
03.10.13
18:18
Да
31 smaharbA
 
03.10.13
18:19
Вариант

    ЗапуститьПриложение("explorer http://www.mista.ru";);
    ХТМЛ=Новый COMОбъект("htmlfile");
    ХТМЛ.Open("text/html");
    //<-- Подготовим нужные методы
    ХТМЛ.Write("<script>
    |var ХТМЛ;
    |Документ=function(x){return x.document};
    |Тело=function(x){return x.body};
    |Текст=function(x){return x.innerText};
    |ТекстХТМЛ=function(x){return x.innerHTML};
    |ЭлементыПоИмени=function(x,y){return x.getElementsByTagName(y)};
    |Длинна=function(x){return x.length};
    |</script>");
    Док=ХТМЛ.documentElement.document;
    // Внедрение объекта Скрипта в самого себя, для сохранности контекста
    Док.script.ХТМЛ=ХТМЛ;
    // Все подготовке -->
    Это=Док.script;
    Шел=Новый COMОбъект("shell.application");
    Вопрос("ххх",РежимДиалогаВопрос.ОК,3);
    Для Каждого Окно Из Шел.Windows() Цикл
        Документ=Это.Документ(Окно);
        Тело=Это.Тело(Документ);
        Текст=Это.Текст(Тело);
        ТекстХТМЛ=Это.ТекстХТМЛ(Тело);
        Ссылки=Это.ЭлементыПоИмени(Документ,"a");
        Сообщить(Текст);
        Сообщить(ТекстХТМЛ);
        Сообщить("Ссылок="+Это.Длинна(Ссылки));
    КонецЦикла;
32 smaharbA
 
03.10.13
18:23
к слову, можно сделать только встроенными средствами 1с
33 ProgerLink
 
03.10.13
18:36
Если можно только встроенными средствами, то это было бы гораздо удобнее в плане отладки кода!
34 smaharbA
 
03.10.13
19:21
Не совсем только встроенными, болванка тут

Перем Это,Шел;

Процедура ПолучитьДанныеИнтернетЭксплорера(Кнопка)
    ЗапуститьПриложение("explorer http://www.mista.ru";);
    Вопрос("Ждем",РежимДиалогаВопрос.ОК,3);
    Для Каждого Окно Из Это.Окна(Новый COMОбъект("shell.application")) Цикл
        Документ=Это.Документ(Окно);
        Тело=Это.Тело(Документ);
        Текст=Это.Текст(Тело);
        ТекстХТМЛ=Это.ТекстХТМЛ(Тело);
        Ссылки=Это.ЭлементыПоИмени(Документ,"a");
        Сообщить(Текст);
        Сообщить(ТекстХТМЛ);
        Сообщить("Ссылок="+Это.Длинна(Ссылки));
    КонецЦикла;
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
    ГСЧ = Новый ГенераторСлучайныхЧисел(Число(Формат(ТекущаяДата(),"ДФ=ггггММддччммсс")));
    Имя="ПолеХТМЛ"+Формат(ГСЧ.СлучайноеЧисло(9999, 429496729),"ЧГ=0");
    Пока Не ЭтаФорма.ЭлементыФормы.Найти(Имя)=Неопределено Цикл
        Имя="ПолеХТМЛ"+Формат(ГСЧ.СлучайноеЧисло(9999, 429496729),"ЧГ=0");
    КонецЦикла;
    ПолеХТМЛ=ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеHTMLДокумента"),Имя);
    ПолеХТМЛ.УстановитьДействие("ДокументСформирован",Новый Действие("ДокументСформирован"));
    ПолеХТМЛ.УстановитьТекст("<script>
    |Окна=function(x){return x.Windows()};
    |Документ=function(x){return x.document};
    |Тело=function(x){return x.body};
    |Текст=function(x){return x.innerText};
    |ТекстХТМЛ=function(x){return x.innerHTML};
    |ЭлементыПоИмени=function(x,y){return x.getElementsByTagName(y)};
    |Длинна=function(x){return x.length};
    |//alert(123);
    |</script>");
КонецПроцедуры

Процедура ДокументСформирован(Элемент)
    // Вставить содержимое обработчика.
    Документ=Элемент.Документ;
    Это=Документ.Script;
    ГСЧ = Новый ГенераторСлучайныхЧисел(Число(Формат(ТекущаяДата(),"ДФ=ггггММддччммсс")));
    Имя="ПолучитьДанныеИнтернетЭксплорера";
    Если ЭтаФорма.ЭлементыФормы.Найти(Имя)=Неопределено Тогда
        Кнопка=ЭтаФорма.ЭлементыФормы.Добавить(Тип("Кнопка"),Имя,Истина);
        Кнопка.Доступность=Истина;
        Кнопка.Видимость=Истина;
        Кнопка.Высота=30;
        Кнопка.Ширина=100;
        Кнопка.Верх=ЭтаФорма.Высота-Кнопка.Высота;
        Кнопка.Лево=10;
        Кнопка.Заголовок=Имя;
        Кнопка.УстановитьДействие("Нажатие",Новый Действие(Имя));
    КонецЕсли;
КонецПроцедуры
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс