помогите разобратся с WebBrowser

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
medvedinyatko
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 18.12.2010 (Сб) 19:53

помогите разобратся с WebBrowser

Сообщение medvedinyatko » 18.12.2010 (Сб) 20:06

Как реализовать клик по ссылке в компоненте WebBrowser?
viewtopic.php?f=1&t=38404
Был такой топик а мне надо тоже самое только не по ссылке а по кнопке и выбор выпадающей вкладки.
на примере http://www.mail.ru
выпадающая вкладка @mail.ru/@list.ru/@bk.ru/inbox.ru
кнопка "Войти"

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: помогите разобратся с WebBrowser

Сообщение Vova_2581 » 19.12.2010 (Вс) 20:23

Код: Выделить всё
Const READYSTATE_COMPLETE = 4

Private Sub Command1_Click()
With WebBrowser1.Document
  .getElementById("Domain").Value = "mail.ru" 'выпадающая вкладка @mail.ru/@list.ru/@bk.ru/inbox.ru
  .getElementById("Login").Value = "Login"
  .getElementById("Password").Value = "Password"
  .Forms(2).submit 'Войти
End With
End Sub

Private Sub Form_Load()
Show
WebBrowser1.Navigate "http://mail.ru"
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
   DoEvents
Wend
End Sub

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: помогите разобратся с WebBrowser

Сообщение Invader » 19.12.2010 (Вс) 21:23

Vova_2581 писал(а):
Код: Выделить всё
Const READYSTATE_COMPLETE = 4

Private Sub Command1_Click()
With WebBrowser1.Document
  .getElementById("Domain").Value = "mail.ru" 'выпадающая вкладка @mail.ru/@list.ru/@bk.ru/inbox.ru
  .getElementById("Login").Value = "Login"
  .getElementById("Password").Value = "Password"
  .Forms(2).submit 'Войти
End With
End Sub

Private Sub Form_Load()
Show
WebBrowser1.Navigate "http://mail.ru"
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
   DoEvents
Wend
End Sub


на странице в коде www.mail.ru я не нашел .getElementById("Password") как в прочем и других элементов
пример рабочий и хороший, но как можно вызвать дерево элементов формы и конкретной формы
а также было бы интересно узнать как например список входящие письма вывести в свой textbox на своей форме а не через WebBrowser
умён и жаден,
характер отсуствует

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: помогите разобратся с WebBrowser

Сообщение Vova_2581 » 22.12.2010 (Ср) 21:03

Invader писал(а):на странице в коде http://www.mail.ru я не нашел .getElementById("Password") как в прочем и других элементов


Плохо искал значит. MSDN указывает, что в методе getElementById можно использовать, как ID так и NAME элементов. В данном случаи выполнилось обращение к объекту Password в тэге TD формы авторизации. У этого объекта есть имя = "Password". И все остальные также.

Вызвать все элементы конкретной формы можно так --
Код: Выделить всё
For Each MyObject In WebBrowser1.Document.Forms(2).getElementsByTagName("*")
   Debug.Print MyObject.innerHTML
Next
или конкретных тэгов -- getElementsByTagName("TD") ‘("DIV") ‘("SPAN") и т.д.

Перейти во «Входящие» можно по ссылке указатель на которую получаем по ID "folderLink_0" --
Код: Выделить всё
WebBrowser1.Navigate WebBrowser1.Document.getElementById("folderLink_0").href
Другие -- «Сомнительные», «Отправленные» и т.д. соответственно ID -- «folderLink_950», «folderLink_500000».

Поставить отметку «Чужой компьютер» можно тоже по ID «alien» --
Код: Выделить всё
WebBrowser1.Document.getElementById("alien").Checked = 1


Ну а получить список писем, например, полей -- «Автор» и «Тема» можно через тэг “U” --
Код: Выделить всё
For Each MyObject In WebBrowser1.Document.getElementsByTagName("U")
   List1.AddItem CStr(MyObject.innerText)
Next

Короче, внимательно изучай HTML листинг и JavaScript.

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: помогите разобратся с WebBrowser

Сообщение Invader » 24.12.2010 (Пт) 20:29

ОГРОМНОЕ спасибо ЗА СТОЛЬ ПОДРОБНОЕ РАЗЪЯСНЕНИЕ...
Правда forms(2) в листинге страницы (mail.ru), среди html с совокупностью с Java script так и не обнаружил :(
просматривал страницу mail.ru через firefox от туда же и открывал код страницы - возможно не корректное отображение, исходного кода

во всём коде одно только упоминание закрывающего тега </form>
либо это правило заполнения
Код: Выделить всё
WebBrowser1.Document.Forms'...

а) почему тогда forms(2) -откуда индекс?
б)что является forms(1)?
за совет спасибо: "внимательно изучай HTML листинг ..."
p.s. буду учить примеры
умён и жаден,
характер отсуствует

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

Re: помогите разобратся с WebBrowser

Сообщение Хакер » 24.12.2010 (Пт) 20:55

Invader писал(а):p.s. буду учить примеры

Чтобы потом наизусть на ночь читать детям?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: помогите разобратся с WebBrowser

Сообщение Invader » 25.12.2010 (Сб) 1:21

Хакер писал(а):
Invader писал(а):p.s. буду учить примеры

Чтобы потом наизусть на ночь читать детям?


Не"а ....
чтоб дядю - спеЦиалиста по перфокартам, запугать, современными текнолоджи

p.s. ' vb6 - microSOFT forever
и да пребудет с нами терпение
умён и жаден,
характер отсуствует

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: помогите разобратся с WebBrowser

Сообщение Vova_2581 » 25.12.2010 (Сб) 14:18

Invader писал(а):а) почему тогда forms(2) -откуда индекс?

Любой браузер является интерпретатором команд HTML-кода. Иными словами, HTML – это набор инструкций, выполняя которые он «рисует» на странице то, что ты указал в тэгах. Так вот, читая инструкции последовательно, он также последовательно индексирует одноименные объекты в HTML.

Можешь узнать, к примеру, количество объектов формы на странице --
Код: Выделить всё
Debug.Print WebBrowser1.Object.Document.Forms.Length
(отсчет ведется с нуля)

Прочитать их имена --
Код: Выделить всё
For Each MyObject In WebBrowser1.Document.getElementsByTagName("FORM") 'или WebBrowser1.Document.Forms
   Debug.Print MyObject.Name
Next 


И заполнить поля формы авторизации по индексу или имени формы --
Код: Выделить всё
With WebBrowser1.Document
  .Forms(2).Domain.Value = "mail.ru"
  .Forms(2).Login.Value = "Login"
  .Forms(2).Password.Value = "Password"
  .Forms(2).submit
  'тоже самое --
  .Forms("Auth").Domain.Value = "mail.ru"
  .Forms("Auth").Login.Value = "Login"
  .Forms("Auth").Password.Value = "Password"
  .Forms("Auth").submit
End With


Можешь выделить и отобразить в браузере только эту форму --
Код: Выделить всё
Dim HTML As String
HTML = WebBrowser1.Document.Forms("Auth").innerHTML
WebBrowser1.Document.Write HTML


Посмотри ссылку по Java, которую я дал вначале -- там все очень хорошо написано. Разбирайся и делай, что тебе надо.

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

Re: помогите разобратся с WebBrowser

Сообщение Хакер » 25.12.2010 (Сб) 14:21

Vova_2581 писал(а):Любой браузер является интерпретатором команд HTML-кода. Иными словами, HTML – это набор инструкций, выполняя которые он «рисует» на странице то, что ты указал в тэгах. Так вот, читая инструкции последовательно, он также последовательно индексирует одноименные объекты в HTML.

Ерунду говоришь. Учи разницу между императивными и декларативными языками.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: помогите разобратся с WebBrowser

Сообщение Vova_2581 » 25.12.2010 (Сб) 14:33

Хакер писал(а):Ерунду говоришь. Учи разницу между императивными и декларативными языками.

Ну вот и объясни человеку в чем разница.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: помогите разобратся с WebBrowser

Сообщение Vova_2581 » 25.12.2010 (Сб) 14:34

А на этом стало быть "ладушки"! Дальше пусть сам работает.

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: помогите разобратся с WebBrowser

Сообщение Invader » 25.12.2010 (Сб) 23:09

Vova_2581 писал(а):А на этом стало быть "ладушки"! Дальше пусть сам работает.


С превеликим рвением, СПАСИБО ТЕБЕ - всё доходчиво и внятно
и главное в примерах!!!!
умён и жаден,
характер отсуствует

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: помогите разобратся с WebBrowser

Сообщение Invader » 02.02.2011 (Ср) 14:02

возник вопрос,
обращаюсь я к странице http://www.google.ru
нашел поле ввода принадлежащей первой и единственной форме(0)
передал слово для поиска - "развлечения"
и определив кнопку submit
запустил поиск, получил список сайтов.
Заголовки которых лежат в тегах <h3 class="r"><a onmousedown="...')" class="l" target="_blank" собственно ссылка на страницу и сам заголовок</a></h3>
Другими словами,
получить список заголовок результатов, можно через тэг “а”
WebBrowser1.Document.getElementsByTagName("а")
но по тэгу “а” список другого рода - сервисы гугла.
Понимаю что тег "а" в контексте страницы используется часто
и что в моём случае, он вложен в дерево тегов, а именно <span class="tl"><h3 class="r"><a...> </a></h3></span> в тэг "span", но и .getElementsByTagName("span") не дал результата
мой код:
Код: Выделить всё
Option Explicit
Const READYSTATE_COMPLETE = 4

Private Sub Command1_Click()
Dim MyObject As Variant
With WebBrowser1.Document
  .getElementById("q").Value = "развлечения" 'слово вносимое в поиск
  .Forms(0).submit 'собсно кнопка поиск
End With
For Each MyObject In WebBrowser1.Document.getElementsByTagName("a")'вот здесь вопрос по передачи найденого
   List1.AddItem CStr(MyObject.innerText)
Next
End Sub



Private Sub Form_Load()
Dim MyObject As Variant

WebBrowser1.Navigate "http://google.ru"
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
   DoEvents
Wend
For Each MyObject In WebBrowser1.Document.getElementsByTagName("ID")
   Debug.Print MyObject.innerHTML
   
Next
End Sub

и ещё вопрос почему когда я пытаюсь скрыть-сделать не видимым WebBrowser1, и вся форма с контролами становится также не видимой
Последний раз редактировалось Invader 02.02.2011 (Ср) 15:25, всего редактировалось 1 раз.
умён и жаден,
характер отсуствует

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

Re: помогите разобратся с WebBrowser

Сообщение Antonariy » 02.02.2011 (Ср) 15:04

Ты перебираешь ссылки в том же самом документе, в котором вносил в поиск слово.
После submit нужно завершать все действия с текущим документом и ожидать READYSTATE_COMPLETE с новым документом, в котором будут результаты поиска. Или как минимум вставить цикл while readystate (как в form_load) между submit и перебором.
Лучший способ понять что-то самому — объяснить это другому.

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: помогите разобратся с WebBrowser

Сообщение Invader » 02.02.2011 (Ср) 15:41

спасибо за помощь, но не помогло ниже мой код на кнопке
Код: Выделить всё
Private Sub Command1_Click()
Dim MyObject As Variant
With WebBrowser1.Document
  .getElementById("q").Value = "развлечения" 'слово вносимое в поиск
  .Forms(0).submit 'собсно кнопка поиск
End With
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
   DoEvents
Wend
For Each MyObject In WebBrowser1.Document.getElementsByTagName("a") 'вот здесь вопрос по передачи найденого
   List1.AddItem CStr(MyObject.innerText)
Next
End Sub

по тэгу "а" выдаёт
по прежнему не то :cry:
...Расширенный поискЯзыковые инструментыЖивой поиск включенЖивой поиск Подробнее...› Включить› Отключить...
проблема как мне кажется что все сылки начинаются с тега "а"
весь вопрос сводится к пути вложенности...
тоесть скажем результатов 7 штук
я определил что их контейнеры начинаются с тега "li"
в нём же прячутся два контейнера один для заголовка другой для краткого описания
описания начинаются с тэга h3
ВСЁ ПОЛУЧИЛОСЬ, СПАСИБО ЗА ПОМОЩЬ
умён и жаден,
характер отсуствует

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: помогите разобратся с WebBrowser

Сообщение Invader » 02.02.2011 (Ср) 17:19

но вот вопрос
почему при первом нажатии
я передал значения, но данные не получил, а лишь при втором нажатии
данные получаю в text1.text
Код: Выделить всё
Private Sub Command1_Click()
Dim s As String
s = Text2.Text
Dim MyObject As Variant
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
   DoEvents

Wend
With WebBrowser1.Document
  .getElementById("q").Value = s 'слово вносимое в поиск
  .Forms(0).submit 'собсно кнопка поиск

End With
Text1.Text = Empty
For Each MyObject In WebBrowser1.Document.getElementsByTagName("h3") 'вот здесь вопрос по передачи найденого
   
   Text1.Text = Text1.Text + CStr(MyObject.innerText) + Chr(13) + Chr(10)
Next
End Sub

И ПОЧЕМУ ПРИ WebBrowser1.visible = false, а form1.visible=true
форма исчезает тоже
умён и жаден,
характер отсуствует

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

Re: помогите разобратся с WebBrowser

Сообщение Antonariy » 03.02.2011 (Чт) 11:38

почему при первом нажатии
Во-первых, потому что херня написана. Почему цикл While WebBrowser1.ReadyState внезапно переехал в начало процедуры? Во-вторых, броузеру нужно какое-то время на загрузку. Чтобы не возникало желаний тыкать кнопки когда не надо, перед циклом ReadyState нужно кнопку выключать, а после включать.

И ПОЧЕМУ ПРИ WebBrowser1.visible = false, а form1.visible=true
форма исчезает тоже
Глюк. Тестовый проект в студию.
Код: Выделить всё
Chr(13) + Chr(10)
В чем vbCrLf провинилось?
Лучший способ понять что-то самому — объяснить это другому.

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: помогите разобратся с WebBrowser

Сообщение Invader » 03.02.2011 (Чт) 13:59

вот сырой проект
Вложения
поиск.7z
(1.65 Кб) Скачиваний: 79
умён и жаден,
характер отсуствует

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

Re: помогите разобратся с WebBrowser

Сообщение Antonariy » 03.02.2011 (Чт) 14:19

Проблема была в том, что WebBrowser1.ReadyState = READYSTATE_COMPLETE сигнализирует об окончании загрузки html-текста, но новый документ на этот момент еще не сформирован. Так будет наверняка:
Код: Выделить всё
Command1.Enabled = False
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
   DoEvents
Wend
While WebBrowser1.Document.ReadyState <> "complete"
   DoEvents
Wend
Command1.Enabled = True


По поводу исчезающей формы в примере нет ни строчки, но форма не прячется вслед за броузером.
Лучший способ понять что-то самому — объяснить это другому.

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: помогите разобратся с WebBrowser

Сообщение Invader » 04.02.2011 (Пт) 12:57

Благодарю за помощь, вот только по поводу скрытия WebBrowser1....
код с исправлениями и с корректировкой видимости
'WebBrowser1.Visible = False
Form1.Visible = True
проблема в том, что WebBrowser1 прячется, форма видна.... НО при заполнении поля запроса и нажатия submint, вылетает ошибка object variable not set
в коде я пометил строчку
Код: Выделить всё
Const READYSTATE_COMPLETE = 4

Private Sub Command1_Click()
Dim s As String
s = Text2.Text
Dim MyObject As Variant

With WebBrowser1.Document
.getElementById("q").Value = s '(ошибка)здесь вылетает ошибка при WebBrowser1.Visible = False
  .Forms(0).submit 'собсно кнопка поиск

End With
Command1.Enabled = False
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
   DoEvents
Wend
While WebBrowser1.Document.ReadyState <> "complete"
   DoEvents
Wend
Command1.Enabled = True
Text1.Text = Empty
For Each MyObject In WebBrowser1.Document.getElementsByTagName("h3") 'вот здесь вопрос по передачи найденого
   
   Text1.Text = Text1.Text + CStr(MyObject.innerText) + vbCrLf
Next
End Sub



Private Sub Form_Load()
'WebBrowser1.Visible = False 'если включено выше строчка помечена (ошибка)
Form1.Visible = True
Dim s As String
s = Text2.Text
Dim MyObject As Variant

WebBrowser1.Navigate "http://google.ru"
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
   DoEvents
Wend
For Each MyObject In WebBrowser1.Document.getElementsByTagName("ID")
   Debug.Print MyObject.innerHTML
   
Next
End Sub
умён и жаден,
характер отсуствует


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

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

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

    TopList