Использование WebBrowser

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Использование WebBrowser

Сообщение $Yastrebov$ » 04.08.2007 (Сб) 14:20

Подскажите, пожалуйста, как при использовании объекта WebBrowser симитировать нажатие по определенному месту страницы?

Например: есть страница, на ней расположен елемент, нажав на который, он закрашивается в синий цвет. Видимо выполняется какой-то скрипт.

Как симитировать нажатие или выполнить этот скрипт? Скрипт выполняется внутри фрейма. Как узнать какой скрипт выполняется? Спасибо!!!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 04.08.2007 (Сб) 16:31

И еще в догонку вопрос. Как получить поддерживаемые методы кнопки, зная ее ID?
На click и submit выдает ошибку!

Пишу так!

WB.Document.Frames("General").Document.Buttons("test").click

Возникает ошибка, что мол метод или свойство не поддерживается!
Что не верно делаю?
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 04.08.2007 (Сб) 17:33

Никак не выходит нажать кнопочку в фрейме по ее ID
Ошибка 91 Object .... no set
Может ли форма быть защищена?! Помогите, пожал!!!

Antonariy приходи на помощь!!!!!!!!!!!!!!!!!!!!!!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 04.08.2007 (Сб) 18:09

Нормально ли что
For Each mm In Browser.Document.frames(1).Document.All
MsgBox mm
Next

Возвращает только слово: [object], причем много раз???
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.08.2007 (Сб) 18:30

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 04.08.2007 (Сб) 23:49

Нормально ли что
For Each mm In Browser.Document.frames(1).Document.All
MsgBox mm
Next

Возвращает только слово: [object], причем много раз???


интерестно, а что возвращать по твоему?

ты ласково просишь VB показать сообщение в качестве текста оного указываешь объект и ему ничего не остаеться, кроме как высказать тебе это..
Попробуй может это:
Код: Выделить всё
MsgBox mm.Value


думаю результат быдет интерестнее...
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 05.08.2007 (Вс) 0:07

Да, я уже разобрался. Я сделал так mm.Id
А еще решил проблему с фреймами. Там просто оказался фрейм во фрейме, вот он мне и мешал)))

Последний вопрос. Как симитировать нажатие кнопки в диалоговом окне WebBrowser? Как получить к нему доступ. Я даже не могу посмотреть его HTML-код!!!

Кто знает отзовитесь!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 05.08.2007 (Вс) 0:19

WebBrowser1.Ducument.outerhtml вроде.
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 05.08.2007 (Вс) 0:36

Что за диалоговое окно WebBrowser ещё?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 05.08.2007 (Вс) 0:53

WebBrowser1.Document.outerhtml - ??? Это явно не отсюда)

Диалоговое окно, которое строется посредством скрипта (наверное), оно есть на многих страницах в Интернете) туда еще часто пихают занудную рекламу.

...в WebBrowser оно открывается не как отдельное окно в браузере системы по умолчанию, а как мини окошко в WebBrowser. Вопрос в том, как получить к нему доступ!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 05.08.2007 (Вс) 10:12

Сколько можно писать, что WebBrowser1.Document.documentElement.outerhtml?

Документ (не)модального диалога или попапа получается этим способом.
Таки оно открывается как отдельное окно, но в ShellWindows не регистрируется.
Лучший способ понять что-то самому — объяснить это другому.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 05.08.2007 (Вс) 17:07

2Antonariy - Спасибо, я знал, что ты лучший))))

:( Только не могу понять все равно, как нажать кнопку на этом диалоговом окне((( id кнопки я знаю!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 05.08.2007 (Вс) 20:05

кнопка.click
Лучший способ понять что-то самому — объяснить это другому.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 05.08.2007 (Вс) 21:20

2Antonariy - WebBrowser1.Document.documentElement.outerhtml показывает код не модального окна, а родительского, а мне нужно именно выполнение нажатия на модальном окне!!!

WebBrowser1.Document.documentElement.<id моей кнопки>.click вызывает ошибку.

При обработке:
For each obj in WebBrowser1.Document.documentElement.All
If obj.Id <> "" Then MsgBox obj.Id
Next

Выдает список всех объектов родительского окна, впрочем как и в случае: For each obj in WebBrowser1.Document.All

Что не так?
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.08.2007 (Пн) 7:38

Есть такая замечательная вещь как getElementById
I don't understand. Sorry.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.08.2007 (Пн) 9:23

2$Yastrebov$
Документ (не)модального диалога или попапа получается этим способом.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.08.2007 (Пн) 12:17

Хакер писал(а):Что за диалоговое окно WebBrowser ещё?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.08.2007 (Пн) 14:12

Хакер
Окно, открытое с помощью window.showModal(Modeless)Dialog.
Лучший способ понять что-то самому — объяснить это другому.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 08.08.2007 (Ср) 18:03

Уважаемый Antonariy и все, кто в этом понимают.
По приведенной Antonariy ссылке создал модуль (в приложении).
Но на этапе выполнения процедуры GetWindowModal, VB вылетает с критической ошибкой.
Помогите пожалуйста!!! Возможно это у меня VB не работает нормально или все же причина в кривоватых ручках :oops: ...
Вложения
IH.rar
Модуль для обработки модальных окон WebBrowser.
(1.2 Кб) Скачиваний: 271
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

Nazarey
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 120
Зарегистрирован: 29.06.2007 (Пт) 0:04

Сообщение Nazarey » 08.08.2007 (Ср) 22:52

Ну раз сдесь говорят о WebBrowser я думаю Вы не будете против если я сдесь задам вопрос?Хотел в WebBrowser вывести GIF-анимацию,выдаёт ошибку.Своих знаний маловато-подскажите пожалуйста!

Код: Выделить всё
WebBrowser1.Navigate @about:<html>" & _
    "<body scroll='no'><img src='путь к файлу'>" & _
    </img></body></html>"

Может он только для пятой версии пригоден?
Хакер спасибо-сейчас буду пробовать :)!


Да,я нашел где была ошибка в коде :)
Код: Выделить всё
WebBrowser1.Navigate "about:<html>" & _
    "<body scroll='no'><img src='путь к файлу'>" & _
    "</img></body></html>"

Вот этот правильный-нехватало кавычек.
(Нужно больше спать :))
Последний раз редактировалось Nazarey 08.08.2007 (Ср) 23:28, всего редактировалось 2 раз(а).
И так,во всём,как хотите,чтобы люди поступали с вами,так и вы поступайте с ними...
Матфея 7:12

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 08.08.2007 (Ср) 22:55

Код: Выделить всё
Wb.navigate "about:blank"
wb.document.write "твой-хтмл-код"


Не знаю, нужно ли ждать рэди-стэйт при навигации на about:blank.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 09.08.2007 (Чт) 8:57

Хакер писал(а):Не знаю, нужно ли ждать рэди-стэйт при навигации на about:blank.
Нужно.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 09.08.2007 (Чт) 9:06

$Yastrebov$
Скорее всего активным окном не является IE.
Код: Выделить всё
      If Not IsIEServerWindow(hWnd) Then
     
         ' Get 1st child IE server window
         EnumChildWindows hWnd, AddressOf EnumChildProc, hWnd
         
      End If
Если сюда попало окно, в иерархии которого не встречается Internet Explorer_Server, то дальше идет то же hwnd, что и пришло. А потом идет попытка выдернуть из него документ. Вполне вероятно, что для каких-то окон это действие может вызвать критическую ошибку.
Лучший способ понять что-то самому — объяснить это другому.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 09.08.2007 (Чт) 17:11

Модуль работать отказывается напрочь :(

2Antonariy
Вы бы не могли привести рабочий пример с изъятием данных с модального окна (любого). Все мои попытки бузуспешны. Не просил бы Вас, если не был бы в таком тупике. Наверняка еще кому-то на форуме пригодится этот пример. Надо ведь довести дело до решения!!!

С надеждой, заранее благодарен!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 09.08.2007 (Чт) 21:36

Уже заканчивая делать пример, понял в чем дело. В функции EnumChildProc параметр lParam должен передаваться ByVal. VB вылетал при попытке присвоить ему значение. Так что вернуть через него найденное hWnd не удастся.
Вложения
ih2.rar
(2.66 Кб) Скачиваний: 330
Лучший способ понять что-то самому — объяснить это другому.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 10.08.2007 (Пт) 13:51

2Antonariy
Огромное спасибо, Ваш код работает великолепно. Без Вас бы я не справился. Вы мне очень помогли! :!:

Применил код, в своей программе, получил доступ к диалоговому окну и тут... еще один подводный камень: при отображении окна визуально на нем есть кнопка, а в коде этого окна, объект кнопка вообще отсутствует (никак не описан). Подозреваю, что это как-то связано с тегом <IFRAME>, который видимо скрывает в себе этот объект. Остается вопрос.
Каким образом тогда достучаться до этой проблемной кнопки?
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.08.2007 (Пт) 14:46

document.frames(x).docment...
Лучший способ понять что-то самому — объяснить это другому.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 10.08.2007 (Пт) 16:32

Вот из Вашего примера получаю доступ к нужному диалоговому окну:

EnumWindows AddressOf FindDlgs, 0
Dim doc As HTMLDocument
DomhWnd = 0
EnumChildWindows DFhWnd, AddressOf EnumChildProc, 0
If DomhWnd <> 0 Then
Set doc = IH.IEDOMFromhWnd(DomhWnd)

doc.documentElement.outerHTML - возвращает:

<HTML><HEAD><TITLE>...</TITLE></HEAD>
<BODY><IFRAME style... ...name=newfrm src="тут URL" frameBorder=0></IFRAME></BODY></HTML>

При обращении:
doc.frames(x).document... - ошибка

Пробую обращаться так:
doc.frames("newfrm").document.outerHTML - ошибка

Если обращаюсь так:
doc.All("newfrm").outerHTML - получаю:
<IFRAME style... ...name=newfrm src="тут URL" frameBorder=0></IFRAME>

doc.All("newfrm").document.all("название нужной кнопки") - ошибка

Более чем doc.All("newfrm").outerHTML у меня дойти не получается.
Сразу оговорюсь, что все привязано к одному домену и данные во фрейм загружаются только с него.

А как найти кнопку так и непонятно... Вы уж меня простите, что я такой бестолковый. Просто что тут уж слишком запутано :( я сам уже утомился и Вас наверное утомил... Но чувствую розгадка близка...
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 10.08.2007 (Пт) 17:05

Ура! Получилось!

Доступ кнопке из <IFRAME> нужно было получить так:
doc.All("newfrm").contentWindow.Document.All("НУЖНАЯ КНОПКА").Click

contentWindow - вот в чем загвоздка была!

Всем спасибо, а особенно Antonariy без него бы я не справился!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 43

    TopList