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

Obtenir le Code sourse d'une page Web en VBA

28 réponses
Avatar
Fredo P.
Bonjour
Tout est dans le titre
Est qu'il est possible de définir puis copier le code source d'une page Web.

10 réponses

1 2 3
Avatar
MichD
Bonjour,

Essaie comme ceci en adaptant l'adresse de la page Web que tu désires...

'-------------------------------------
Sub test()
Dim CodeSource As String, IE As Object
Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = False ' Ou True
IE.Navigate URL:="http://www.google.com"
While IE.Busy
DoEvents
Wend
CodeSource = IE.Document.body.innerHTML
IE.Quit
MsgBox CodeSource
End Sub
'-------------------------------------

--
MichD
---------------------------------------------------------------
Avatar
Fredo P.
Bonjour MichDenis
merci de prendre ce fil
j'ai un arrêt à la ligne CodeSource = IE.Document.body.innerHTML
et redémarre en forçant au pas à pas.
lorsque je veux copier le code en A1, j'ai une erreur 7, "mémoire
insuffisante".
Est ce qu'il serait possible d'avoir la même chose avec FireFox?

"MichD" a écrit dans le message de news:
jmamd0$kds$
Bonjour,

Essaie comme ceci en adaptant l'adresse de la page Web que tu désires...

'-------------------------------------
Sub test()
Dim CodeSource As String, IE As Object
Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = False ' Ou True
IE.Navigate URL:="http://www.google.com"
While IE.Busy
DoEvents
Wend
CodeSource = IE.Document.body.innerHTML
IE.Quit
MsgBox CodeSource
End Sub
'-------------------------------------

--
MichD
---------------------------------------------------------------



Avatar
MichD
A ) Cette procédure fut testée à partir d'Internet Explorer 9, Windows 7, 64 bits.
Est-ce que tu as essayé cette procédure telle qu'elle est écrite avec l'adresse
Internet qu'elle utilise?
À la procédure, je peux ajouter cette ligne de code sans problème :
Range("A1") = CodeSource

Ceci étant dit, j'ai une connaissance limitée de ce type de truc! Est-ce que tu peux
publier l'adresse de la page où tu éprouves une difficulté à extraire le codesource?
As-tu un message d'erreur, si oui, lequel?

B ) Je ne connais pas "Firefox" et ce Fureteur internet n'est pas installé sur mon ordi.

Une question toute bête, est-ce que le code est très différent d'un fureteur internet à
l'autre? Le langage lui est le même... non?


--
MichD
---------------------------------------------------------------
Avatar
Fredo P.
"MichD" a écrit dans le message de news:
jmbnic$mtg$
A ) Cette procédure fut testée à partir d'Internet Explorer 9, Windows 7,
64 bits.
Est-ce que tu as essayé cette procédure telle qu'elle est écrite avec
l'adresse
Internet qu'elle utilise? non

Ceci étant dit, j'ai une connaissance limitée de ce type de truc!
Est-ce que tu peux
publier l'adresse de la page où tu éprouves une difficulté à extraire le
codesource?


http://www.tierce-magazine.com/accueil/pid107-les-reunions-du-jour.html?day=tomorrow

As-tu un message d'erreur, si oui, lequel?

B ) Je ne connais pas "Firefox" et ce Fureteur internet n'est pas installé
sur mon ordi.


le code source sur FF est facile à copier manuellement mais on ne peut pas
le modifier sur l'interface FF


Une question toute bête, est-ce que le code est très différent d'un
fureteur internet à
l'autre? Le langage lui est le même... non?



Sub test()
Dim CodeSource As String, IE As Object
IE = CreateObject("InternetExplorer.Application") ' au second essai, j'ai
erreur automation erreur -214023706 (800704a6), aprés avoir placé un on
error resume next, elle n'en fini pas de boucler sur le While >Wend

IE.Visible = False ' Ou True
IE.Navigate URL:="http://www.google.com"
While IE.Busy
DoEvents
Wend
CodeSource = IE.Document.body.innerHTML 'à cette ligne la routine stop, elle
la passe en forçant pas à pas.
MsgBox CodeSource 'ok
Range("A1") = CodeSource ' § c'est ici que le message "Mémoire
insuffisante"(Erreur 7) ce produit.
End Sub
Ce à quoi ressemble une partie de se qui m' intérresse du code source sur
FF, il est au format texte et se
déploie sur une seule colonne dans Excel.
Je retire de ce code tous les "race_id":N° d'identification des liens
d'autres pages

href="/accueil/les-courses-avc/pid111-partants.html?race_id€6812">Prix de
Levallois</a></td>
<td class="col3">
</td>
<td class="col4"></td>
<td class="col4"></td> <td
class="col4">
</td>
<td class="col5"><strong>14h00</strong></td>
<td class="col6">
8 partants </td>
<td class="col7">
</td>
<td class="col8">
</td>
<td class="col9">
<div style="position:relative"><a href="javascript:void(0);"
class="pariez-link" rel="https://www.leturf.fr" title="Parier"><img
style="margin-left: 15px; position: relative; top: 1px;"
src="http://media.tierce-magazine.com/design/front_office_tiercemagazine/images/pict/parier_home.jpg"
alt="Parier"/></a>
<div class="bloc_pub_pariez">
<iframe src="" scrolling="no" frameborder="no" align="center" height
= "202px" width = "351px"></iframe>
</div>
</div>
</td>
</tr>
<tr class="statut_">
<td class="col1"><img
src="http://media.tierce-magazine.com/design/front_office_tiercemagazine/images/spacer.gif"
class="picto typeCourse course-GALOP" alt="Plat" title="Plat" /></td>
<td class="col2"><strong>3</strong>&nbsp;&nbsp;&nbsp;<a
href="/accueil/les-courses-avc/pid111-partants.html?race_id€6808">Prix de
Chaillot</a></td>
Avatar
MichD
Dans la fenêtre de l'éditeur de code, barre des menus / outils / référence /
décoche la bibliothèque suivante si elle est cochée : 'Microsoft Internet controls"

Le mieux teste cette procédure en utilisant un classeur tout neuf.

Il y a peut-être des nuances selon les différentes versions, mais je ne saurais te dire.
Tu devrais tenter ta chance sur des forums spécialisés sur cette application en
particulier.

Désolé.


--
MichD
---------------------------------------------------------------
Avatar
Yopop
Bonjour Denis et Fredo,

J'avais la même première erreur (Win7 32 bits et IE8) que Fredo sur :

CodeSource = IE.Document.body.innerHTML

Mais vu qu'en faisant F5, ca se termine bien, je soupçonne le IE.Busy de
rendre la main trop tot. En cherchant sur le net, j'ai remplacé par:

Do Until IE.readystate = 4
DoEvents
Loop

qui semble fonctionner. Pour la 2 eme erreur, ("Memoire insuffisante")
le code de ta page html fait plus de 105000 caractères. Un peu trop pour
une seule cellule ! Il faudrait découper avant.

j-p
Avatar
MichD
Merci pour toutes ces informations. J'espère que cela aidera Fredo P.


MichD
---------------------------------------------------------------
Avatar
Gloops
MichD a écrit, le 14/04/2012 16:29 :
Dans la fenêtre de l'éditeur de code, barre des menus / outils / ré férence /
décoche la bibliothèque suivante si elle est cochée : 'Microsoft Internet controls"

Le mieux teste cette procédure en utilisant un classeur tout neuf.

Il y a peut-être des nuances selon les différentes versions, mais j e ne saurais te dire.
Tu devrais tenter ta chance sur des forums spécialisés sur cette ap plication en
particulier.

Désolé.





Bonjour,

J'ai aussi pensé à un code trop long pour tenir dans une seule cellul e.

On pourrait afficher Len(CodeSource), pour avoir une idée ...

C'est vrai que cette explication mérite un peu de prudence : j'ai essay é
de mettre dans une cellule "début" + Space(40000000) + "fin" et tout ce
que je vois, c'est "début".
Alors j'affiche la longueur du contenu de la cellule : 32767.
Je ne me suis pas fait jeter, pourtant.

Si toutefois cette piste est la bonne, l'arborescence DCom a une
ramification suffisamment fine pour que ses éléments puissent tenir d ans
des cellules Excel. On peut décomposer de plusieurs manières, ce que
j'ai fait ci-dessous n'est qu'un exemple.

Ne pas trop se priver d'utiliser l'explorateur d'objets, que dans
l'environnement de développement d'Excel on peut ouvrir avec la touche F2.

Voici ci-dessous un exemple pour mettre chaque noeud dans une cellule.

Cet exemple utilise deux références :
1 - dans la liste, "Microsoft HTML Object Library", apparaîtra dans
l'explorateur d'objets sous le nom MSHTML, et se trouve dans le fichier
C:Windowssystem32mshtml.tlb

2 - dans la liste, "Microsoft Internet Controls", apparaîtra dans
l'explorateur d'objets sous le nom SHDocVw, et se trouve dans le fichier
C:Windowssystem32ieframe.dll

(le chemin de fichier ne sert que si vraiment on n'arrive pas à trouver
l'intitulé dans la liste)

Je rappelle qu'on sélectionne les références par Outils / Référ ences, à
partir de l'environnement de développement. Il s'agit de cocher les
références voulues, puis valider une fois que tout y est.


J'ai laissé une erreur d'incompatibilité de type, qui apparaît en
colonne C en face de l'élément concerné, de type img. J'ai l'impres sion
que cette erreur n'est pas bloquante, aussi je vais laisser creuser qui
voudra, ça serait dommage que je reste une heure dessus pour ne rien
sortir de plus.

===== Début module ======
Option Explicit

Dim L As Integer

Public Sub TestHtml()
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim CodeSource As String
Dim C As Range
Dim N As Integer
Dim Elt As HTMLDTElement
On Error GoTo ErrTestHtml
DoEvents
Range("A1") = ""
IE.Navigate2 "google.html"
MsgBox "Navigation effectuée"
Set IEDoc = IE.document
Debug.Print "IE"
CodeSource = IEDoc.body.innerHTML
Debug.Print CodeSource
MsgBox Len(CodeSource)
'Range("A1") = CodeSource
L = 1
Set Elt = IEDoc.body
TraitementElement Elt
Exit Sub
ErrTestHtml:
MsgBox Err.Description, , Err.Number
Resume Next
End Sub

Private Sub TraitementElement(ByVal E As HTMLDTElement)
Dim N As Integer
Dim C As Range
On Error GoTo ErrTraitementElement
L = L + 1
Set C = Cells(L, 2)
C = E.outerHTML
For N = 0 To E.ChildNodes.Length - 1
TraitementElement E.ChildNodes(N)
Next
Exit Sub
ErrTraitementElement:
Cells(L, 3) = Err.Description
Resume Next
End Sub

==== Fin module =====
Avatar
Gloops
Gloops a écrit, le 14/04/2012 20:25 :
IE.Navigate2 "google.html"
MsgBox "Navigation effectuée"



Pendant que je testais ça, Yopop proposait, à la place de ce message :

Do Until IE.readystate = 4
DoEvents
Loop
Avatar
Fredo P.
Bonjour Yopop

qui semble fonctionner. Pour la 2 eme erreur, ("Memoire insuffisante")
le code de ta page html fait plus de 105000 caractères. Un peu trop pour
une seule cellule ! Il faudrait découper avant.



Quand je le fais manuellement à partir d' IE, çà ne pose pas de pb, le code
s'inscrit sur plusieurs cellule sur une seule colonne, alors?
je pense que c'est comme l'interface du VBA comme d'autres par ailleurs,
quand il manque un "Endif" ou un "Next" et que l'erreur est en amont, il
nous dit «o't'chose qui faudrait'?»

"Yopop" a écrit dans le message de news:
4f89949f$0$12494$
Bonjour Denis et Fredo,

J'avais la même première erreur (Win7 32 bits et IE8) que Fredo sur :

CodeSource = IE.Document.body.innerHTML

Mais vu qu'en faisant F5, ca se termine bien, je soupçonne le IE.Busy de
rendre la main trop tot. En cherchant sur le net, j'ai remplacé par:

Do Until IE.readystate = 4
DoEvents
Loop

>
j-p
1 2 3