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

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

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

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

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

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

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

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

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

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

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

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

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

Vova_2581
Постоялец
Постоялец
 
Сообщения: 377
Зарегистрирован: 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
Постоялец
Постоялец
 
Сообщения: 377
Зарегистрирован: 10.01.2010 (Вс) 18:08

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ХЯВП. :D

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

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

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

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

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

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

Сообщение hclubmk » 15.11.2024 (Пт) 1:46

Vova_2581
Как успехи с И-шаком? Перевел его в 'IE=edge' '?
Научились ли Вы радоваться трудностям?

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

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

Сообщение Vova_2581 » 15.11.2024 (Пт) 10:11

В каком смысле "перевел"??? :shock:

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

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

Сообщение Vova_2581 » 15.11.2024 (Пт) 11:21

Вот еще одна странность...
Как я уже писал ранее, в начале топика, при кликах в браузере и переходах по разным ссылкам возникает ситуация, когда Internet Explorer открывается в новом окне (видимо это как-то привязано к самой ссылке???) и такие окна плодятся по нескольку штук. Мне потом нужно все их закрыть. Так и тут какая-то хрень происходит. Для закрытия всех IExplorer и просто Explorer вместе с IE написал два кода... Вот, например, такой...
Код: Выделить всё
'References --> Microsoft Internet Controls (SHDOCVW.DLL)
'References --> Microsoft Shell Controls And Automation (SHELL32.DLL)
Private Sub Form_Load()
Dim shellApp As Shell32.Shell
Dim windows As SHDocVw.ShellWindows
Dim window As Object
Set shellApp = New Shell
Set windows = shellApp.windows
For Each window In windows
  'MsgBox windows.Count
If UCase(window.FullName) Like "*IEXPLORE.EXE" Then window.Quit
  DoEvents
Next window
Set shellApp = Nothing
Set windows = Nothing
End
End Sub

По задумке он должен закрыть все открытые IE, но нет... Если открыть, скажем, штук 5 IE, то при выполнении этого кода закрыто будет только часть, но обязательно 1 или 2 окна не закроются. Непонятно почему??? Хотя windows.Count показывает все правильно – количество всех открытых окон Проводника и Интернет Проводника.
Тогда решил сделать немного по-другому...
Код: Выделить всё
'References --> Microsoft Shell Controls And Automation (SHELL32.DLL)
Private Sub Form_Load()
On Error Resume Next
Show
Dim objShell As Object
Set objShell = CreateObject("Shell.Application")
  MsgBox "Количество открытых окон: " & objShell.Windows.Count
For i = 1 To objShell.Windows.Count - 1
  Print objShell.Windows(i).Document.Title
Next

MsgBox "Закрыть все окна?"
For i = 1 To objShell.Windows.Count - 1
  Set Explorer = objShell.Windows(i)
   Explorer.Quit
   DoEvents
Next
Set objShell = Nothing
Set Explorer = Nothing
End Sub

Тут objShell.Windows.Count показывает тоже все правильно, но в строке objShell.Windows(i).Document.Title возникает ошибка Run-time ‘438’ <Object doesn’t support this property or method>, а в строке Explorer.Quit ошибка Run-time ‘91’ < Object variable or With block variable not set> и только On Error Resume Next частично решает проблему, но и даже после этого такой код ведет себя точно так же как и предыдущий. Что не так в коллекции Windows или самом Shell не пойму??? :roll:

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

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

Сообщение Vova_2581 » 18.11.2024 (Пн) 12:54

Помогите решить задачу этого топика...
Как уже стало очевидно, этот топик породил такую вот математическую формулу Пуанкаре:
Formula.jpg
Formula.jpg (27.36 Кб) Просмотров: 223

где:
A – здесь нет субъектов.
B – субъекты есть, но мало.
С – субъекты не хотят отвечать.
D – субъекты колеблются... отвечать или не отвечать, типа лень.
K - никто из суммы субъектов не знает ответа.

Как решить эту задачу не знает даже Перельман. :( Что делать??? :(

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

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

Сообщение Vova_2581 » 04.12.2024 (Ср) 0:15

Пытаюсь запустить эти коды на win 10 выдает ошибку "класс не зарегистрирован!" <Run-time error -2147221164 (80040154)>
и скорее всего на этом месте...
Set Explorer = New SHDocVw.InternetExplorer
Что только не делал, ничего не помогает...
Regsvr32 ieframe.dll
Regsvr32 SHDOCVW.DLL
До пиз...ы! Пишет, типа, не нашел точку входа в ваш "анус"... ну, типа не нашел dllRegisterServer... не помню точно, да не важно, и всё на этом.
Ладно, думаю... умный в гору не пойдет, умный гору обойдет. Решил отключить обнаружения dllRegisterServer ключами /i /u ... тоже сейчас не помню точно, но это тоже не важно, потому что после этого Regsvr32 опять чего-то там не нашел, типа, dll... и сообщил мне, что он типа нетрадиционной ориентации, назвал меня "мой пупсик...". Это было уже слишком, извините меня! Запуск Regsvr32 под провами админа тоже ничего не дали, Regsvr32 сорвался с катушек в попытке найти точку входа во второй мой "анус", и я решил забросить эту затею пока он меня окончательно не за@б###л. Не помогли даже попытки запуска моей проги в portable версии, ошибка та же. Не помог мне и встроенный мастер создания setup_install в VB с ключами регистрации в lst файле. Короче, ничего не сработало. Хотя все нужные библиотеки находились там, где и положено...в System32 и SysWOW64. Может быть тут дело не в правах, а в разрядности??? Ну, типа... я пытаюсь зарегистрировать 32-ную dll 64 разрядным Regsvr32 или наоборот?? Не знаю уже, что и думать. В связи с чем у меня вопрос: какого х@##ра, библиотеки, которые разработали сами Microsoft не может зарегистрировать их же собственная Regsvr32 в их же собственной системе?? Кто знает ответ на эту загадку??? Это же не я изобрел SHDOCVW.DLL и другие такие же, это их продукт. Так какого лешего это все происходит, или я чего-то не понимаю???

Ладно... с этим Internet Explorer проехали, не получается ни хэра. Столько посуды перебил, сил уже нет. (

Тогда другой вопрос: сейчас очень много разных механизмов работы с интернетом, что можно потеряться.
Что мне нужно... Мне нужно послать POST запрос с регистрацией на почтовый сайт и выудить некую полезную мне тэгу с инфой. По требованию пользователя, открыть в браузере по умолчанию почту и показать список писем. Как мне это лучше всего сделать? Каким механизмом? Желательно без всех этих элементов управления OCX, ссылок на Dll и прочую хрень, которую нужно регистрировать и долбаться с этим потом. Нужно что бы мой код работал на всех системах и не дрыгался. Подскажите наилучший способ, если вам не трудно буду очень признателен.


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

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

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

    TopList