[VBA-E] Boucle de traitement de codes sources de pages web
Bonjour,
J'ai envie d'apprendre à récupérer des infos dans les codes sources de pages web.
Mais je ne veux pas simplement traiter une page, mais des milliers... J'ai essayé avec le code suivant (j'ai juste un formulaire avec un bouton enregistrer et un webbrowser):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| Private g_f_Donn As Worksheet
Private Profil As Long
Private Donnees As Variant
Private chargement_ok As Boolean
Private Sub Enregistrer_Click()
Set g_f_Donn = ThisWorkbook.Worksheets("Profils")
Enregistrer_Profils
End Sub
Sub Enregistrer_Profils()
Dim Donnees As Variant
Profil = 1
While Profil <= 1000
chargement_ok = False
WebBrowser1.Navigate2 "http://www.XXX.Net/forums/member.php?u=" & Profil
Do Until chargement_ok
DoEvents
Loop
If Not WebBrowser1.document Is Nothing Then
Application.Wait Now + TimeValue("00:00:01")
Donnees = WebBrowser1.document.body.innerHTML
Else
Donnees = ""
End If
debut_nom = InStr(Donnees, "<STRONG>")
If debut_nom > 1 Then
Fin_Nom = InStr(debut_nom, Donnees, "</STRONG>")
Nom = LCase(Mid(Donnees, debut_nom + 8, Fin_Nom - debut_nom - 9))
Else
Nom = "Erreur"
End If
g_f_Donn.Cells(Profil, 1) = Profil
g_f_Donn.Cells(Profil, 2) = Nom
Profil = Profil + 1
Wend
End Sub
Private Sub WebBrowser1_DownloadComplete()
chargement_ok = True
End Sub |
Je rencontre 2 problêmes indépendants à l'éxécution :
- La plupart du temps, le prog marche pour les 10, 20 premières pages puis il semble rentrer dans une boucle infinie (comme si le prog s'arretait sur une page inchargeable et que chargement_ok ne passait plus jamais à true.
- Parfois le test If Not WebBrowser1.document Is Nothing réussit, mais le programme plante à la ligne d'initialisation de la variable Donnees. Si je rentre en mode debug et tente de continuer en pas à pas, je passe cette erreur sans problèmes et sans avoir à remodifier le code :?
Je semble donc avoir des problèmes de synchro... ou de surcharge mémoire... ou les deux...
Quelqu'un a-t-il déjà essayé de telles boucles ???
NB : le site sur lequel je teste mon code n'est pas xxx.net, ni developpez.net, mais c'est un forum php similaire.