Как получить список тэгов каждой страницы в InternetExplorer

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

Как получить список тэгов каждой страницы в InternetExplorer

Сообщение Vova_2581 » 03.11.2024 (Вс) 2:37

Здравствуйте!
Подскажите, пожалуйста, как мне, используя, если я правильно выражаюсь, экземпляр класса InternetExplorer библиотеки SHDOCVW.DLL и, соответственно, для работы с текстом самой страницы HTML библиотека MSHTML.DLL, получать список тэгов, или определенного тэга, каждой новой(!) страницы, которую я открываю по ссылке в самом уже браузере. Написал такой код (URL взял просто для примера)...
Код: Выделить всё
'References --> Microsoft Internet Controls (SHDOCVW.DLL)
'References --> Microsoft HTML Object Library (MSHTML.DLL)
'Private Const READYSTATE_COMPLETE = 4
Dim WithEvents Explorer As InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument
Dim objElements As IHTMLElementCollection

Private Sub Form_Load()
Show
Set Explorer = New SHDocVw.InternetExplorer
    Explorer.Visible = True
    Explorer.Silent = True 'Тихий режим (никаких сообщений об ошибках сценария и прочее...)
    Explorer.Navigate "http://allapi.mentalis.org"
    'While Explorer.ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
End Sub

Private Sub Explorer_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Me.Cls
MsgBox "Страница загружена! --> " & URL & vbNewLine & "Получить список тэга <a>"

Set HTMLDoc = Explorer.Document
Dim objElement As IHTMLElement
Set objElements = HTMLDoc.All.tags("a")
For Each objElement In objElements
  Print objElement.innerText 'Me.AutoRedraw=True
Next
End Sub

Private Sub Form_Unload(Cancel As Integer)
Explorer.Quit 'Закрываем сам браузер
Set Explorer = Nothing
Set HTMLDoc = Nothing
Set objElements = Nothing
End Sub

Но как-то он непонятно работает. По логике... вроде бы событие Explorer_DocumentComplete должно срабатывать каждый раз как я перехожу по клику на новую страницу и она загрузится полностью, но почему-то так не происходит. Событие Explorer_DocumentComplete то срабатывает, то не срабатывает, то вообще возвращает URL --> about:blank. В общем, работает через раз, через два. И Explorer.Quit то закрывает созданный экземпляр браузера, то не закрывает почему-то, то плодятся несколько Explorer. Короче, какая-то хрень происходит не могу понять. Подскажите, что не так с этим кодом??? Где ошибка? Google спрашивал, он не знает. :(

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 239
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение hclubmk » 03.11.2024 (Вс) 22:44

1) Вместо DocumentComplete попробуй ProgressChange
При завершении загрузки Progress получает значение 10000
2) Не использовать, если возможно,
Dim WithEvents Explorer As InternetExplore
а воткнуть ишака в форму и работать с событиями WebBrowser1
Научились ли Вы радоваться трудностям?

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Vova_2581 » 04.11.2024 (Пн) 7:28

Хорошо, попробую, но ведь без WithEvents отлавливать события ProgressChange будет невозможно в данном контексте кода. И почему вас не устраивает Dim WithEvents Explorer As InternetExplore конструкция??? Что с ней не так? Насчёт "ишака"... Так ведь и таскать этого ишака тоже нужно будет везде с проектом, регистрировать его. Как-то не очень хотелось бы. Но если выхода другого не будет то тогда видимо придется.

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Vova_2581 » 04.11.2024 (Пн) 7:55

Да и известно, что такой ишак является урезанной версией самого браузера InternetExplore. Точнее не урезанной версией, а просто само окно браузера с ограниченными возможностями, как результат страницы отображаются в каком-то упрощенном виде, видимо в WebBrowser1 не работают какие-то механизмы отработки HTML или Java или PHP, еще что-то, хрен пойми. Одним словом страницы отображаются криво. Мне желательно полноценный браузер.

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Vova_2581 » 04.11.2024 (Пн) 11:18

Только что проверил... с ProgressChange точно такая же фигня, что и с DocumentComplete. Буквально один в один. Вот почему так происходит кто может сказать??? К тому же ProgressChange возвращает не всегда 10000, но и на некоторых страницах других сайтов целый 1000000! А иногда страница загрузится и вообще 0... Что происходит???

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Vova_2581 » 04.11.2024 (Пн) 17:19

Ау! Тут есть кто живой? Ни просмотров, ни ответов... Такое впечатление, что здесь уже давно никого нет. :( Люди, вы где?

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Хакер » 04.11.2024 (Пн) 19:51

Vova_2581 писал(а):Да и известно, что такой ишак является урезанной версией самого браузера InternetExplore. Точнее не урезанной версией, а просто само окно браузера с ограниченными возможностями, как результат страницы отображаются в каком-то упрощенном виде, видимо в WebBrowser1 не работают какие-то механизмы отработки HTML или Java или PHP, еще что-то, хрен пойми. Одним словом страницы отображаются криво. Мне желательно полноценный браузер.


Какая каша в голове... PHP и Java ни к каким браузерам вообще не имеют отношения. Это не механизмы, а языки, и код на них исполняется не в браузере, а на сервере за тысячу километров от браузера. Хотя на Java раньше можно было писать апплеты, да.

Вся проблема в том, что WebBrowser-контрол использует устаревший движок IE. Этот устаревший движок не поддерживает многие последние интернет-стандарты. А многие современые сайты требуют поддержки самых последних интернет-стандартов (зачастую, совершенно необоснованно). Вот наш форум, например, спокойно работает даже в IE6 и не требует ничего современного.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Vova_2581 » 04.11.2024 (Пн) 22:01

Понятно. Спасибо за разъяснения. Ну, я говорил условно... просто уже пробовал работать с WebBrowser-контролом и хотел сказать, что он мне не подходит в данной ситуации. Спасибо, что ответили, а то я уже думал, что никто не интересуется старым, добрым VB. Так по сути вопроса... Никак не могу понять, почему события, что DocumentComplete, что ProgressChange одинаково странно себя ведут?? Это глюк и где-то ошибка в моем коде?? Может у вас есть хоть какие-нибудь предположения??

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 239
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение hclubmk » 04.11.2024 (Пн) 22:10

Какая версия ишака-то у топик-стартера?
Научились ли Вы радоваться трудностям?

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Vova_2581 » 04.11.2024 (Пн) 23:13

Пользуюсь VB6 с установленными сервиспаками, какая версия именно WebBrowser не знаю. Ну, по умолчанию какая там идёт... ничего больше не обновлял.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 239
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение hclubmk » 05.11.2024 (Вт) 16:57

Vova_2581 писал(а):ничего больше не обновлял.

Плохо. Обновляй до последней (11 ЕМНИП)
Научились ли Вы радоваться трудностям?

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Vova_2581 » 05.11.2024 (Вт) 19:33

Хорошо, но что такое "ЕМНИП"???

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 239
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение hclubmk » 05.11.2024 (Вт) 20:56

Vova_2581 писал(а):Хорошо, но что такое "ЕМНИП"???

Если Мне Не Изменяет Память
Научились ли Вы радоваться трудностям?

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Vova_2581 » 05.11.2024 (Вт) 21:37

ХЯВП. :D

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

Re: Как получить список тэгов каждой страницы в InternetExpl

Сообщение Vova_2581 » 05.11.2024 (Вт) 21:39

Хорошо Я Вас Понял... :lol:


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList