Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment accéder au source du document d'un objet IE ?

9 réponses
Avatar
ZoroBozo
Salut à tous,

J'ai à faire évoluer une appli écrite en VB6 qui contient un objet IE
(venant de shdocvw.dll, les Microsoft Internet Controls).

L'évolution que j'ai à faire nécessite que je parse le contenu de la
page courante (celle actuellement chargée dans l'objet IE).

Je n'ai jamais utilisé cet objet avant et ne sais pas comment m'y
prendre. Est-ce possible d'accéder au source du document chargé
directement par cet objet IE ? Est-ce que je dois ajouter un objet
mshtml.tlb (non activé pour l'instant, mais vu dans la liste des
composants possibles) ? Si oui, et ensuite, comment relier l'ojet IE et
le mshtml ?

Bref, je patauge dans la choucroute là :) Heeeelp ;)

9 réponses

Avatar
Jacques93
Bonjour ZoroBozo,
ZoroBozo a écrit :
Salut à tous,

J'ai à faire évoluer une appli écrite en VB6 qui contient un objet IE
(venant de shdocvw.dll, les Microsoft Internet Controls).

L'évolution que j'ai à faire nécessite que je parse le contenu de la
page courante (celle actuellement chargée dans l'objet IE).

Je n'ai jamais utilisé cet objet avant et ne sais pas comment m'y
prendre. Est-ce possible d'accéder au source du document chargé
directement par cet objet IE ? Est-ce que je dois ajouter un objet
mshtml.tlb (non activé pour l'instant, mais vu dans la liste des
composants possibles) ? Si oui, et ensuite, comment relier l'ojet IE et
le mshtml ?

Bref, je patauge dans la choucroute là :) Heeeelp ;)



Un petit truc que j'avais fait sous Excel, quand j'avais des stock
options :-D , ici adapté en VB.

Nécessite comme tu l'indiques, une référence à Microsoft Html Object
Library (MsHtml.tlb) . C'est pas très didactique, mais ça marche encore,
la page du site semble être restée au même format (A chaque changement,
faut éventuellement ré adapter le code, ici basé sur un élément
"Anchor", c'est plus simple) :

Private Sub Command1_Click()
MsgBox "Taux de change Euro / US Dollar : " & GetEuroInfo
End Sub

Public Function GetEuroInfo() As String
Dim myUrl As String
Dim objMSHTML As New MSHTML.HTMLDocument
Dim objDocument As MSHTML.HTMLDocument
Dim a As MSHTML.HTMLAnchorElement
Dim e As MSHTML.HTMLGenericElement

myUrl = "http://www.boursorama.com/devises/devises.phtml"


Set objDocument = objMSHTML.createDocumentFromUrl(myUrl, vbNullString)
While objDocument.readyState <> "complete"
DoEvents
Wend

For Each e In objDocument.All
If e.tagName = "A" Then
Set a = e
If a.href =
"http://www.boursorama.com/cours.phtml?symbole=1xEURUS&quot; Then
GetEuroInfo = e.innertext
Exit For
End If
End If
Next
Set objDocument = Nothing
End Function



--

Cordialement,

Jacques.
Avatar
Jean-marc
ZoroBozo wrote:
Salut à tous,

J'ai à faire évoluer une appli écrite en VB6 qui contient un objet IE
(venant de shdocvw.dll, les Microsoft Internet Controls).

L'évolution que j'ai à faire nécessite que je parse le contenu de la
page courante (celle actuellement chargée dans l'objet IE).

Je n'ai jamais utilisé cet objet avant et ne sais pas comment m'y
prendre. Est-ce possible d'accéder au source du document chargé
directement par cet objet IE ? Est-ce que je dois ajouter un objet
mshtml.tlb (non activé pour l'instant, mais vu dans la liste des
composants possibles) ? Si oui, et ensuite, comment relier l'ojet IE
et le mshtml ?

Bref, je patauge dans la choucroute là :) Heeeelp ;)



Hello,

à toutes fins utiles, tu trouveras ici la doc du controle WebBrowser:
http://msdn.microsoft.com/en-us/library/aa752040.aspx

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
ZoroBozo
In article <ezlz#,
says...
Un petit truc que j'avais fait sous Excel, quand j'avais des stock
options :-D , ici adapté en VB.

Nécessite comme tu l'indiques, une référence à Microsoft Html Object
Library (MsHtml.tlb) . C'est pas très didactique, mais ça marche encore,
la page du site semble être restée au même format (A chaque changement,
faut éventuellement ré adapter le code, ici basé sur un élément
"Anchor", c'est plus simple) :




Merci Jacques. Là, je vois que te passe carrément de l'objet IE, tandis
que moi je l'ai déjà et dois accéder au source du document déjà dedans
(sachant que la page chargée est le résultat d'une navigation sur
plusieurs pages avant d'atteindre celle-ci, avec login et tout
l'tintouin)... Bref, pas sûr ça me soit utile just now pour cette appli,
mais je garde ton code sous le coude :)
Avatar
ZoroBozo
In article <48274e29$0$2951$,
says...
à toutes fins utiles, tu trouveras ici la doc du controle WebBrowser:
http://msdn.microsoft.com/en-us/library/aa752040.aspx





Merci Jean-Marc. Bon, donc, si je comprends bien la soluce se trouverait
en partant de la propriété "document" du web browser ? Peux pas essayer
sur l'instant, mais je verrai demain.

http://msdn.microsoft.com/en-us/library/aa752052(VS.85).aspx
Avatar
Jean-marc
ZoroBozo wrote:
In article <48274e29$0$2951$,
says...
à toutes fins utiles, tu trouveras ici la doc du controle WebBrowser:
http://msdn.microsoft.com/en-us/library/aa752040.aspx





Merci Jean-Marc. Bon, donc, si je comprends bien la soluce se
trouverait en partant de la propriété "document" du web browser ?
Peux pas essayer sur l'instant, mais je verrai demain.

http://msdn.microsoft.com/en-us/library/aa752052(VS.85).aspx



Oui, c'est bien l'idée. C'est en tout cas comme ça que je fais :-)

Bonne soirée,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
ZoroBozo
In article <48274e29$0$2951$,
says...
Hello,

à toutes fins utiles, tu trouveras ici la doc du controle WebBrowser:
http://msdn.microsoft.com/en-us/library/aa752040.aspx




Heu, je reviens à la charge, car j'ai lu un peu plus profondément le
MSDN que tu me pointais : bon, donc, si je comprends bien ("ie" étant
mon objet web browser), ie.document me donne un objet HTMLDocument dont
je peux retrouver les différents éléments DOM via un autre objet mshtml
qui me fournira l'interface IHTMLDocument2. Est-ce quelque chose comme
ça, selon toi ?
Avatar
Jean-marc
ZoroBozo wrote:
In article <48274e29$0$2951$,
says...
Hello,

à toutes fins utiles, tu trouveras ici la doc du controle WebBrowser:
http://msdn.microsoft.com/en-us/library/aa752040.aspx




Heu, je reviens à la charge, car j'ai lu un peu plus profondément le
MSDN que tu me pointais : bon, donc, si je comprends bien ("ie" étant
mon objet web browser), ie.document me donne un objet HTMLDocument
dont je peux retrouver les différents éléments DOM via un autre objet
mshtml qui me fournira l'interface IHTMLDocument2. Est-ce quelque
chose comme ça, selon toi ?



Par exemple, oui. Tout dépend de ce que tu veux faire.

Pour récupérer juste le code html du body, tu peux par exemple faire:

Dim doc As Object
Dim html As String

Set doc = WebBrowser1.Document
html = doc.body.innerhtml

Et voila! "html" contient maintenant tout le code html de la section
<body> de ta page. Tu peux faire la même chose avec head, etc.


Voir ici par exemple:
(toute la doc de body):
http://msdn.microsoft.com/en-us/library/ms535205(VS.85).aspx#
(faire scroller le tableau)


et par exemple pour InnerHtml:
http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx


Il y a beacoup de lecture, mais si tu dois juste faire un peu de
parsing du code html, ça peut etre très simple.

Un article de notre FAQ (ce n'est pas ce que tu recherches, mais
ça montre une utilisation possible de document):
http://faq.vb.free.fr/index.php?question7" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://faq.vb.free.fr/index.php?question7

Note : Si le besoin est simplement de récupérer le contenu (html) de la
page couramment chargéé et si tu connais l'URL de la ressource en question,
tu peux aussi peut etre directement charger dans une variable ou dans un
fichier la page en question, sans passer par un webbrowser.
Tu peux alors utiliser la fonction de l'API Windows: UrlDownloadToFile:
http://msdn.microsoft.com/en-us/library/ms775123(VS.85).aspx

PAr exemple comme ça:

Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA"
(ByVal pCaller As Long, ByVal szUrl As String, ByVal szFileName As String,
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Function DownloadPage(ByVal url As String, ByVal FileName As String) As
Boolean
Dim done As Boolean
Dim value As Long

On Error Resume Next

done = True
If Dir$(FileName) <> "" Then
Kill FileName
End If
value = URLDownloadToFile(0, url, FileName, 0, 0)
If Dir$(FileName) = "" Then
done = False
End If
DownloadPage = done
End Function


Puis comme ceci :

Dim bRet As Boolean
Dim sURL As String
Dim sFileName As String

sURL = "http://faq.vb.free.fr/index.php?rubrique=0&quot" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://faq.vb.free.fr/index.php?rubrique=0&quot;
sFileName = "c:test.dat"

bRet = DownloadPage(sURL, sFileName)
If bRet Then
MsgBox "Téléchargement réussi."
Else
MsgBox "Erreur lors du téléchargement"
End If

En fait, il y a des milliers de façon de faire, en fonction
de tes besoins précis.

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
ZoroBozo
In article <48275ee0$0$2947$,
says...
Par exemple, oui. Tout dépend de ce que tu veux faire.

Pour récupérer juste le code html du body, tu peux par exemple faire:

Dim doc As Object
Dim html As String

Set doc = WebBrowser1.Document
html = doc.body.innerhtml

Et voila! "html" contient maintenant tout le code html de la section
<body> de ta page. Tu peux faire la même chose avec head, etc.




Waow, c'est beaucoup plus clair comme ça. Donc le web browser se suffit
à lui-même et inutile d'ajouter un objet mshtml sauf à ne pas vouloir
d'UI visible : cool ! Bon, dodo...

Et un grand merci à toi, JM, je vais pouvoir avancer sur le parsing en
lui-même :)
Avatar
Jean-marc
ZoroBozo wrote:
In article <48275ee0$0$2947$,
says...



Waow, c'est beaucoup plus clair comme ça. Donc le web browser se
suffit à lui-même et inutile d'ajouter un objet mshtml sauf à ne pas
vouloir d'UI visible : cool ! Bon, dodo...

Et un grand merci à toi, JM, je vais pouvoir avancer sur le parsing en
lui-même :)



Merci du retour :-)

Et bon parsing!

Bonne journée,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;