Имя: Пароль:
1C
1С v8
как ограбить IE
,
0 red14_88
 
28.02.14
12:11
Всем доброго времени суток.
Столкнулся с задачей, аналогичной описанной здесь:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1246480886&n=4
решение в третьем посте - то, что нужно.
Вопрос - как можно подобное реализовать в 1С?
Отмечу, что сайт открывается только в IE, открывать по URL в эске не прокатит.
Всем заранее спасибо.
1 skunk
 
28.02.14
12:13
если правильно понял ... то как-то так
http://www.1c-club.kz/index.php?showtopic=765
2 red14_88
 
28.02.14
12:19
к сожалению, не оно. В примере мы получаем страницу по URL средствами 1С. А у меня условия иные - пользователь работает в IE, что-то там делает (работает ajax), видит некую табличку (просмотр html-кода её показывает). Мне надо добраться до того, что видит пользователь в IE в момент запуска обработки, а не до того, что доступно по некоторому URL в это время.
3 nesmen
 
28.02.14
12:26
а можно более подробно что тебе нужно сделать
(0)
4 nesmen
 
28.02.14
12:27
если получить кокоето значение то помогу
5 nesmen
 
28.02.14
12:40
ты открываешь ИЕ через 1С?
6 red14_88
 
28.02.14
12:53
Порядок работы примерно такой:
Пользователь открывает IE.
Заходит на сайт.
Там что-то делает (url не меняется, страница изменяется ajax'ом).
Открывает 1С.
Нажимает мою кнопку и получает содержимое страницы, открытой в IE.
7 nesmen
 
28.02.14
13:07
просто сделай в 1С клавишу запуск ИЕ там будет работать с сайтом все едет нормально и у тебя сразу оперативно будут все данные а по другой клавише получает инфу
8 nesmen
 
28.02.14
13:07
ты розберал сайты с  помощью ИЕ?
9 red14_88
 
28.02.14
13:43
(7) не понял
(8) - в (0) ссылка как в делфях разбирал
10 Infsams654
 
28.02.14
13:45
(0) а зачем IE? В 1С свой броузер есть (Поле HTML документа). На форме через обработчик ожидания периодически обновляешь, чтоб увидеть, что там ajax натворил.
11 red14_88
 
28.02.14
13:48
(10) Сайт отказывается работать во всех браузерах кроме ИЕ. Поле пробовал.
12 fvadim
 
28.02.14
13:54
(11) запускать скрипт на vbs, который перебирать страницы в ie и вытягивать содержимое в файл
(7) тоже вариант v8: COMОбъект "InternetExplorer.Application"
13 Fram
 
28.02.14
13:59
(11) ActiveX элемент Microsoft Web Browser попробуй. Если не УФ
14 nesmen
 
28.02.14
14:15
сделай кнопку с процедурой
ИЕ = Новый ComОбъект("InternetExplorer.Application");
    ИЕ.Visible=1;
    ИЕ.Navigate("http://10.1.100.16";);
    Пока ИЕ.ReadyState<4 Цикл

    КонецЦикла;
а потом вторая кнопка "разбор" в которую будет передаватся
ИЕ.Document
15 nesmen
 
28.02.14
14:16
ну эт если через ИЕ
16 Infsams654
 
28.02.14
14:22
(11) а во как. Вариант, без всякого притягивания IE через COM и других извращений.
Делаешь свою форму со значимыми данными этой странички (я так думаю, что насколько она будет похожа на то что в IE не суть важно) и обновляешь еЁ пока ajax еще работает.
17 Infsams654
 
28.02.14
14:23
(16)+ - разобрать html, я думаю догадаешься как
18 red14_88
 
28.02.14
14:37
Всем спасибо, но, думаю, стоит прояснить некторые моменты, не подллежащие изменению:
1) Сначала пользователь запускает IE, потом эску.
2) На форме эски сайт не работает.

В (14), я так понимаю мы из эски передаем URL, а в текущей задаче URL уже открыть пользователем в браузере. В отдельном браузере Microsoft Internet Explorer.

По (12) можно поподробее про скрипт?
19 Infsams654
 
28.02.14
14:41
(18) прочитал внимательно (16) ? Там же написано - никаких извращений
20 red14_88
 
28.02.14
14:50
(19) даже если речь идет о форме html с нужными данными - сайт меня посылает.
21 Infsams654
 
28.02.14
14:55
(20) я не про то, просто форма (не html). Она заполняется периодически данными, полученными через HTTPСоедиенение
22 fvadim
 
28.02.14
15:05
(18)

    Dim objShell : Set objShell = CreateObject("Shell.Application")
    Dim objWindow
    For Each objWindow In objShell.Windows
        if objWindow.LocationURL = "http://ya.ru/"; then
            WScript.Echo objWindow.Document.body.innerhtml
        end if
    Next
23 red14_88
 
28.02.14
15:06
(22) спасибо, будем пробовать, выглядит тем, что нужно.
24 fvadim
 
28.02.14
15:09
дубль два


Dim objShell : Set objShell = CreateObject("Shell.Application")
Dim objWindow
For Each objWindow In objShell.Windows
    if objWindow.LocationURL = "http://ya.ru/"; then
        WScript.Echo objWindow.Document.body.innerhtml
    end if
Next
25 fvadim
 
28.02.14
15:12
блин
locationURL = тут  то, что после ru/" дописывает миста,
т.е. должен быть просто урл из адресной строки
26 fvadim
 
28.02.14
15:31
напрямую из одноэса тоже получилось


шелл = Новый COMОбъект("Shell.Application");
Для индекс = 0 по шелл.Windows().Count - 1 Цикл
    Если шелл.Windows().item(индекс).LocationURL = "http://ya.ru/"; Тогда
    Сообщить(шелл.Windows().item(индекс).Document.body.innerhtml);
прервать;
    КонецЕсли;
КонецЦикла;
27 nesmen
 
28.02.14
15:32
(18) можем не передавать урл из 1С просто запуск ие проводить.
28 red14_88
 
28.02.14
15:39
Всем спасибо. Наваял такую штуку, работает.

Функция ПолучитьСтрокуHTML(ИнтересующийURL)
    Shell=Новый COMОбъект("Shell.Application");
    Окна = Shell.Windows();
    Для Каждого Окно ИЗ Окна Цикл    
        Если Найти(Окно.LocationURL,ИнтересующийURL)>0 Тогда
            Возврат = Окно.Document.body.innerhtml;
        КонецЕсли;
    КонецЦикла;        
КонецФункции
29 nesmen
 
28.02.14
15:47
слушай просто вопрос, а что там должен пользователь вводить что ты програмно не введешь? (28)
30 miron25
 
28.02.14
15:52
(29)У него бизнес по распознаванию капч...Рабы трудяться.)
31 fvadim
 
28.02.14
15:57
(29) тут вроде обратная задача - утянуть со страницы в 1с то, что пользователь наоткрывал
32 fvadim
 
28.02.14
15:58
(28) ещё можно попробовать innertext
33 nesmen
 
28.02.14
15:59
не ну если там определенные операции делать одинаковые только с разными данными то лучше сделать робота
34 nesmen
 
28.02.14
16:00
ну если найдешь елемент то док.ел.value(31)
35 red14_88
 
28.02.14
16:44
(29) подбирает автоработы по электронному каталогу. Слева - графическая составляющая. Справа обычная таблица.

С выводами я поторопился, что все работает. Вернее работает, только страничка с фреймами и хз как нужный достать из com-объекта. innerhtml дает только фреймсет. На да, думаю, победю.
36 nesmen
 
28.02.14
17:06
у тебя ком обьект InternetExplorer.Application? (35)
37 nesmen
 
28.02.14
17:06
если да тогда просто попробуй цыклом обойти
38 nesmen
 
28.02.14
17:08
Для Каждого обьекта из   ИЕ.Document.all.tags("НайменованияТега") Цикл
39 red14_88
 
28.02.14
17:17
(38) объект  IDispatch, получен как в (28).
40 fvadim
 
28.02.14
17:17
или попробовать так
Окно.Document.Frames("название фрэйма").Document.body.innerhtml
41 nesmen
 
28.02.14
17:22
ну или док.getbyid() или док.getbyname() вроде так пишется
42 fvadim
 
28.02.14
17:28
или пойти уже домой :) пятница же
43 red14_88
 
28.02.14
17:40
ах-ха-ха-ха, дряхлые немецкие программисты, я Вас наебал!

Возврат Окно.Document.Frames("mainFs").document.Frames("contentFs").document.Frames("infomediaFr").document.Frames("loTreeFr").document.Frames("jobContent1").document.Frames("jobSummaryBody").Document.body.innerhtml;
44 red14_88
 
28.02.14
17:41
у нас в институте за такой код отчисляли
45 nesmen
 
28.02.14
17:41
я бы тебя сам прибил
46 nesmen
 
28.02.14
17:42
слушай а ид нету у елементов?
47 fvadim
 
28.02.14
17:50
(43) чото бред какой-то. там вёрстка на фрэймах что-ли?
48 red14_88
 
28.02.14
17:59
(45) верстка не моя. ИД есть, но поиск по ИД работает только внутри фреймов.