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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16483
Зарегистрирован: 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
Постоялец
Постоялец
 
Сообщения: 383
Зарегистрирован: 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
Постоялец
Постоялец
 
Сообщения: 383
Зарегистрирован: 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
Постоялец
Постоялец
 
Сообщения: 383
Зарегистрирован: 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
Постоялец
Постоялец
 
Сообщения: 383
Зарегистрирован: 10.01.2010 (Вс) 18:08

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

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

ХЯВП. :D

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

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

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

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

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

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

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

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

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

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

Vova_2581
Постоялец
Постоялец
 
Сообщения: 383
Зарегистрирован: 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 и прочую хрень, которую нужно регистрировать и долбаться с этим потом. Нужно что бы мой код работал на всех системах и не дрыгался. Подскажите наилучший способ, если вам не трудно буду очень признателен.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

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

Сообщение ALX_2002 » 02.01.2025 (Чт) 0:26

Vova_2581, приветствую Владимир. Так может перед тем как ломать копья расскажете подробнее о том, что же это за сайт такой и зачем на нём регистрироваться таким образом ?
Мне нужно послать POST запрос с регистрацией на почтовый сайт и выудить некую полезную мне тэгу с инфой

И возможно тогда не потребуется тратить так много эмоций на негатив. :D

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

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

Сообщение Vova_2581 » 02.01.2025 (Чт) 9:56

Приветствую Вас, ALX_2002! Поздравляю всех участников форума и конечно же Администрацию этого замечательного сайта с наступившим Новым годом! Мира и добра нам всем!
По сути Вашего вопроса, как и по сути самого топика есть, что сказать много чего, но пока, к сожалению, на данный момент, не располагаю достаточным временем. Тут за 5 минут, как говорится, не расскажешь. Постараюсь немногим позже написать... Прошу меня извинить.

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

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

Сообщение Vova_2581 » 19.01.2025 (Вс) 12:34

Добрый день!
Итак, давайте по-порядку...
Вот эта проблема...
Vova_2581 писал(а):win 10 выдает ошибку "класс не зарегистрирован!" <Run-time error -2147221164 (80040154)>

...оказывается решается просто. Даже стыдно признаваться, что сразу до этого не додумался. Нужно было просто зайти в настройки системы, выбрать "Программы и компоненты" и включить компонент Internet Explorer 11. Ну или через Win+R "Выполнить" вызвать апплет appwiz.cpl тоже самое. После перезагрузки все заработало. Вот и всё! ))
Включение компонентов Windows.jpg
Включение компонентов Windows.jpg (219.23 Кб) Просмотров: 185

Теперь дальше... Отвечаю на Ваш вопрос, ALX_2002, насчёт сайта... Это обычный почтовый сайт. Мне нужно написать бота на VB, который будет на автомате выполнять авторизированный вход, проверять корреспонденцию и если будут новые поступления сообщать пользователю об этом и всё! Почему POST запрос??? Дело в том, что один мой знакомый товарищ посоветовал делать именно таким образом, через POST запрос на сайт и получать чистый HTTP без загрузки ненужных рекламных баннеров, каких-то фреймов, декоративных иллюстраций и тому подобное, ничего лишнего. К тому же скорость будет максимальной. Для реализации этой идеи немного погуглил и решил воспользоваться, например, объектными моделями XMLHTTP для авторизации и HTMLDocument для парсинга. Но для них нужны Reference. Или объявить: CreateObject("Microsoft.XMLHTTP") тогда Reference не нужен, но не важно, поскольку на всех системах и так... и так... работает. Набросал пару строк кода, но пока так... с переменным успехом. Да ещё и времени сейчас дефицит, особо заниматься некогда. Но(!), самое интересное то, что случайно нашел вот такой вот целый сайт!..
https://excelvba.ru/programmes/Parser
...где автор предлагает разработанный им макрос VBA упакованный в excel файл специально для парсинга различный сайтов. Сам файл excel можно скачать от сюда...
https://excelvba.ru/programmes/Parser/download
Правда жаль trial версия на 10 дней. Ну, ничего. (( Думаю воспользоваться этой разработкой, чтобы разобраться в своих ошибках. Понять как правильно сделать запрос. Пока особо не вникал, совершенно нет времени, просто почитал теорию. Ну, на этом пока всё.

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

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

Сообщение Хакер » 20.01.2025 (Пн) 1:27

А почему бы не проверять почту через почтовые протоколы IMAP/POP3?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

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

Сообщение Vova_2581 » 20.01.2025 (Пн) 8:14

Хм-хм!... Этот вопрос я тоже обсасывал в своё время. Но я не особо профессионал, поэтому больше искал примеры хоть какие-нибудь.
Что касается POP3...
Во-первых, очень скудно хоть что-то найти на VB. Во-вторых, из того, что находил... коды очень громоздкие. Много всего. Попал на один сайт, там товарищ как раз приводил пример как раз получение почты через POP3 и все бы ничего, можно было бы разбираться, но(!)... не все оказалось так просто. Автор топика опубликовал листинг и его было, скажем так, немало, но почему-то свой листинг он где-то в конце оборвал и дальше автор пишет: "ну, и так далее... там ещё много кода..." и всё на этом. То есть, как бы пример дал, но не весь. Почему? Непонятно. Получается, что дальше... нужно самому догадываться, дорабатывать. Не судите строго лично мне для этого не хватает знаний и опыта.
Если хотите, могу поискать ссылку на этот топик, где-то сохранял на всякий случай.

Что касается IMAP...
Не знаю, как именно работать с этим протоколом чисто через API, но если через контрол VB то, насколько понял, контрол работает не сам по себе, а взаимодействует с почтовой программой Outlook. То есть сначала нужно установить Outlook, настроить его, там... пароли, логины, порты, прописать SMTP/POP адреса серверов и т.д. и только потом использовать в VB два контрола: один для инициализации MAPISession, а второй для получения сообщений MAPImessage типа того. Но это не очень мне подходит.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

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

Сообщение ALX_2002 » 31.01.2025 (Пт) 16:59

Vova_2581, привет ! Поделюсь своими мыслями:
1) Согласен с Хакером - не рекомендую тратить силы на разработку автоматизации через веб-интерфейс. Причина - резкое cнижение стабильности работы кода т.к разработчики сайта в любой момент могут поменять дизайн и код тут же споткнётся с потерей нужных элементов. И даже не смотря на то, что многие сайты переводят на REST api, с которым гораздо проще взаимодейстовать, но опять же до тех пока оно не публичное, а их внутреннее, полагаться на его использование рисковано. Поэтому, всецело согласен, что раз это почтовый сайт, то лучше использовать стандаритизованные протоколы для работы - MAPI / POP3.

2) Я очень давно не садился за VB и честно говоря, без крайней необходимости, снова садиться не хочется. Думаю стоит взглянуть в сторону PowerShell / Python. Там уже накоплен багаж библиотек, которые закрывают эти потребности

К примеру, есть NET библиотеки пригодные для PowerShell:
OpenPop.NET работает с POP3
AE.Net.Mail работает с MAPI и POP3

Нашёл у себя старую заготовку кода даже с комментариями. Скрипт очень упрощённый. Всего лишь читает почту из ящика. Обработку вложений не добавлял. Логин и пароль в коде убрал, но в архиве рабочий пример с тестовой почтой. Пароль - "qaz"
Код: Выделить всё
$ErrorActionPreference = 'Stop'
# Очистка консоли
Clear-Host
# Подключение библиотеки OpenPop
Import-Module "$PSScriptRoot\lib\net40\OpenPop.dll"

# Настройки подключения
$hostName = 'pop.mail.ru'
$port     = '995'
$useSsl   = $true
$username = '***'
$password = '****' # (!) Для клиентских приложений пароль генерируется в ЛК почты.

# Создание инстанса клиента
$pop3Client = [OpenPop.Pop3.Pop3Client]::new()
# Подключение к серверу
$pop3Client.Connect($hostName,$port,$useSsl)
try {
    # Проверка успешности подключения
    if(!$pop3Client.Connected){
        throw "Unable to create POP3 client. Connection failed with server $server"
    }
    # Авторизация
    $pop3Client.Authenticate($username,$password)
    # Перебор сообщений в ящике
    for($i = 1;$i -le $pop3Client.GetMessageCount();$i++){
        # Получение сообщения по ID
        $message = $pop3Client.GetMessage($i)
        # Вывод от кого получени сообщений
        "From: $($message.Headers.From)"
        # Вывод темы сообщения
        "Subject: $($message.Headers.Subject)"
        # Так как тело сообщения в HTML, то придётся его парсить, чтобы получить текстовое представление
        $document = New-Object -Com "HTMLFile"
        $document.IHTMLDocument2_write($message.ToMailMessage().Body)
        $document.body.outerText
    }
# В любой непонятной ситуации отключаемся от сервера
} finally {
    if($pop3client.Connected){
        $pop3client.Disconnect()   
    }
}
Вложения
Pop3GetMail.zip
(56.22 Кб) Скачиваний: 4

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

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

Сообщение Vova_2581 » 01.02.2025 (Сб) 0:56

ALX_2002, любопытно... :roll: Ваш пост отправлен в обработку... :scratch:

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

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

Сообщение Vova_2581 » 02.02.2025 (Вс) 21:12

В общем, все скачал, посмотрел... Есть некоторые вопросы. Как обычно: давайте по-порядку...
1) С Хакером я не спорю. Изначально, когда все это задумывал, так и хотел сделать, как написал Хакер, но постом выше написал, что пошло не так и мне пришлось пойти другим путем.
2) Вот это... то, что Вы предложили. Это совершенно другой язык, толи C# толи NET?? ХЗ!? Я в нем вообще ноль!! :roll: Так... приблизительно отдаленно немного понимаю в коде, что происходит, но полноценно синтаксиса я не знаю, поэтому что либо менять не могу.
3) Будет не очень удобно проверять почту через PowerShell командами, как это автоматизировать??? Понятия не имею. К тому же будет постоянно вылетать черный экран консоли, непонятно, как его убрать вообще?
То, что Вы предложили... мне напомнило один из методов проверки почты вручную, через командную строку, используя утилиты типа: Telnet или PuTTY. Но это не упрёк, просто вспомнил, что где-то видел что-то подобное.
4) Из этого проекта библиотека OpenPop.dll это Native или ActiveX?? Ее нужно регистрировать в системе перед использованием? Тоже непонятно.
5) Потом Вы написали: «не рекомендую тратить силы на разработку автоматизации через веб-интерфейс. Причина - резкое cнижение стабильности работы кода т.к разработчики сайта в любой момент могут поменять дизайн и код тут же споткнётся с потерей нужных элементов».
Разрешите возразить! Все правильно, согласен, но(!)... дело в том, что из всех элементов в теле HTTP меня интересует всего только один(!) тэг и выглядит он вот так: <h2>Входящие: 38</h2>. Именно его мне нужно парсить. Делать авторизацию, получать ответ, находить <h2>, читать... Цифра указывает на количество непрочитанных (новых!) писем. Если новых писем нет, или они все прочитаны, то ответ сервера будет просто: <h2>Входящие: </h2> без цифры! Как я уже писал ранее, мне нужно только информировать пользователя о поступлении новой корреспонденции и все! Читать письма, а тем более вложения... не нужно! Ну и желательно такую сделать опцию для удобства, что раз уж моя программа авторизовалась и прочла, что есть новые письма, то по желанию пользователя, открыть в браузере по-умолчанию WEB станицу почты со списком писем. А дальше он уже сам... Как это сделать пока не знаю, но это уже второй вопрос. К тому же я видел, что автор VBA Parser проекта, о котором я писал выше, на видеоинструкции демонстрирует, как он это делает без проблем!
Так вот... для такой незначительной задачи, может будет достаточно веб-интерфейса? Вряд-ли разработчики так радикально могут поменять, что тэг <h2> Входящие:</h2> исчезнет вообще? Не думаю, что такое может быть. :roll:
6) А теперь самое интересное! Смотрите, что я нашел!!.. :) Вот по этому адресу: http://ostrosoft.com/ospop3.aspx
Там проект проверки почты протоколом POP3 с примерами в том числе и на VB!! :) Есть free версия. Это уже интересней!! Но(!)... пока еще не разобрался в нем. Там есть библиотека OSPOP3_Plus.dll и библиотека типов OSPOP3_Plus.tlb в описании написано: "if you are using the component from VB6 or other COM language, register OSPOP3_Plus.tlb on your system (with regtlib)". Что это за regtlib?? :drunken: Первый раз вижу.
Вложения
OSPOP3.zip
На всякий случай выложу здесь копию проекта по ссылке...
(109.59 Кб) Скачиваний: 2
Последний раз редактировалось Vova_2581 03.02.2025 (Пн) 20:05, всего редактировалось 1 раз.

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

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

Сообщение Vova_2581 » 03.02.2025 (Пн) 19:57

Я тут немного покопался в инете. Вот эта утилита regtlib вроде типа как альтернатива Regsvr32. Что то типа того? Хз. Ладно, буду пробовать.
Тут нашел, где скачать...
https://www.pconlife.com/viewfileinfo/regtlib-exe/


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

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

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

    TopList