Récupérer code HTML d'une page internet

Résolu
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 - 12 mars 2016 à 17:59
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 - 2 avril 2016 à 13:27
Bonjour à tous, :)

J'ai une fonction qui récupère le code HTML d'une page internet :
Private Function Html(WUrl As String) As String

WebBrowser.Navigate (WUrl)
Do Until WebBrowser.ReadyState = READYSTATE_COMPLETE
        DoEvents
Loop
Html = WebBrowser.Document.documentElement.innerHtml

End Function


Le problème est que le code HTML retourné est tronqué, limité à environ 240 caractères.

Je ne pense pas que ce soit un problème de variable car si je mets un espion sur
WebBrowser.Document.documentElement.innerHtml
, déjà le code est tronqué.

Y a-t-il une limitation ? Est-il possible de récupérer le code complet de la page internet ?

Merci d'avance votre aide :)

15 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 13/03/2016 à 11:39
Bonjour,
Il te faut à mon sens attendre que tout "soit là" et le récupérer par outerHTML dans l'évènement qui le constate.
Essaye donc ceci :
Private Sub WebBrowser1_DocumentComplete()
html = WebBrowser1.Document.documentElement.outerHTML
End Sub


EDIT : ah oui ... Gaffe toutefois, si ton webbrowser affiche plusieurs Frames distincts dans une page (mais tu ne nous as rien dit à ce sujet ...)

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
13 mars 2016 à 11:55
Merci pour ta réponse.

En effet pas de frame dans ma page à afficher, seulement un tableau.

J'ai mis le code que tu me proposes, mais le résultat est le même, le code est tronqué au même endroit que avec mon code (vu avec l'espion de variables) :(
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 mars 2016 à 13:24
Bon ...
Mets ici le lien de la page Web concernée ...
On y verra peut-être plus clair en ce qui concerne les raisons de cette "étrangeté" ....
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
Modifié par yoanpg le 13/03/2016 à 15:12
A la base c'est une page PHP dont le contenu dépend des paramètres passés en barre d'adresse. J'ai créé une page HTML qui contient le même contenu mais statique : http://www.sportingclubplaisance.org/formulaires/test.htm

Quand je teste avec cette page dans VB, j'ai le même comportement, l'élément outerHtml prend la valeur :
<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type></HEAD>
<BODY>
<TABLE cellSpacing=0 border=1>
<TBODY>
<TR>
<TH bgColor=lightgrey>Time</TH>
<TH bgColor=lightgrey>ID</TH>
<TH bgColor=lightgrey>NOM</TH>
<TH bgColorl
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 mars 2016 à 17:28
On dirait que le body n'est pas lu (et donc non plus le tbody)
Essaye (juste pour voir) de tout "embarquer" avec .DocumentText

0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
13 mars 2016 à 18:18
Je comprends pas bien ce que tu me proposes.
C'est mon code VB que je dois modifier ? Comment ?
Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 13/03/2016 à 18:38
Désolé. Cette propriété n'existe pas sous VB6.
Va falloir essayer autrement
Peut-être en invoquant d'abord l'objet Body
WebBrowser1.Document.body.innerHTML
????

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
16 mars 2016 à 11:41
Avec cette propriété ça me retourne la même chose, le code HTML tronqué :(
0
herman291 Messages postés 6 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 29 mars 2016
26 mars 2016 à 18:49
Salut, on est en train de faire la même chose...


Tape dans google Grossamer... il y a une fct de post et get secure avec u dirve virtuel et possibilité de bd perl etc...

Code complet mais fait attention il y a plusieurs zip de revision
http://www.vbforums.com/showthread.php?532752-VB6-Yet-Another-Web-Server
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
1 avril 2016 à 19:20
Ca me parait bien compliqué tout ça !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 avril 2016 à 19:59
C'est exactement ce que je me suis dit en découvrant la vraie recette du vrai homard à l'armoricaine. Et j'ai alors décidé de ne pas m'en mêler et d'aller déguster ce plat préparé par un bon chef dans un bon restaurant, en lieu et place.
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
Modifié par CGSI3 le 1/04/2016 à 20:11
Bonsoir a tous,

Je suis également sur ce genre de recherche,
je passe rapidement vous donner une piste a suivre vu que j'ai également trouvé très peu de réponse a mon problème.

La parade que j'ai trouvé est la suivante .. Attendre
A vous de régler et améliorer ce code

  
Try
WebBrowserTemp.ScriptErrorsSuppressed = True
Dim debutA As Long = Environment.TickCount ' millisec
WebBrowserTemp.Navigate(REMOTE_URL)
Do While WebBrowserTemp.ReadyState <> WebBrowserReadyState.Complete
System.Threading.Thread.Sleep(10)
Application.DoEvents()
If (Environment.TickCount - debutA) / 1000 > 1 Then Exit Do
Loop
'MsgBox("Chargement terminé !")
Catch ex As Exception
Console.WriteLine("HTML : error " & ex.Message)
End Try


' Récuperer les tables
Dim TableCollection As HtmlElementCollection = WebBrowserTemp.Document.GetElementsByTagName("table")



Harf VB6 ... Biensur ce code est du VB.NET Dsl

Bonne soirée
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
1 avril 2016 à 21:12
J'ai pensé au problème de temps en effet.
J'ai donc fait un test de charger la page grâce à un premier bouton, puis de récupérer son contenu grâce à un second bouton.
Mais le problème reste le même.

Je ne comprends pas pourquoi ça fonctionne pas alors que pour d'autres (d'après les recherches que j'ai faites) ça semble fonctionner :(
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 avril 2016 à 08:41
Re,
Vérifie quand même (sait-on jamais ?) que tu n'as pas un caractère null de terminaison chr(0) dans la chaîne importée
car sinon, ma foi ...
Regarde :
toto = "aaaaa" & Chr(0) & "bbbbb"
MsgBox toto
Text1.Text = toto

Essaye ce que tu obtiendrais en remplaçant chr(0) par "" avec la fonction replace
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 2/04/2016 à 11:40
Tout cela est assez curieux.
Je viens de lancer ton propre code sur le lien/test que tu as donné ===>>
voici ce que j'obtiens avec msgbox (affichage limlité) ===>>>

et voici ce que j'obtiens (non limité, donc) en textbox :
<HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type></HEAD>
<BODY>
<TABLE border=1 cellSpacing=0>
<TBODY>
<TR>
<TH bgColor=lightgrey>Time</TH>
<TH bgColor=lightgrey>ID</TH>
<TH bgColor=lightgrey>NOM</TH>
<TH bgColor=lightgrey>Prénom</TH>
<TH bgColor=lightgrey>Naissance</TH>
<TH bgColor=lightgrey>Age</TH>
<TH bgColor=lightgrey>Sexe</TH>
<TH bgColor=lightgrey>Ceinture</TH>
<TH bgColor=lightgrey>CeintureTxt</TH>
<TH bgColor=lightgrey>Club</TH>
<TH bgColor=lightgrey>Responsable</TH>
<TH bgColor=lightgrey>Vérification</TH>
<TH bgColor=lightgrey>NouveauClub</TH></TR>
<TR>
<TD name="Time">1457713325348</TD>
<TD name="ID">1</TD>
<TD name="NOM">TEST</TD>
<TD name="Prénom">Tést</TD>
<TD name="Naissance">2000</TD>
<TD name="Age">Cadet</TD>
<TD name="Sexe">M</TD>
<TD name="Ceinture">1</TD>
<TD name="CeintureTxt">Blanche-jaune</TD>
<TD name="Club">GIMNASIO TENDO</TD>
<TD name="Responsable">rest</TD>
<TD name="Vérification">ok 12345</TD>
<TD name="NouveauClub">0</TD></TR>
<TBODY>
<TR>
<TD name="Time">1457800662926</TD>
<TD name="ID">2</TD>
<TD name="NOM">TSR</TD>
<TD name="Prénom">Tree</TD>
<TD name="Naissance">2000</TD>
<TD name="Age">Cadet</TD>
<TD name="Sexe">M</TD>
<TD name="Ceinture">1</TD>
<TD name="CeintureTxt">Blanche-jaune</TD>
<TD name="Club">GIMNASIO TENDO</TD>
<TD name="Responsable">resp</TD>
<TD name="Vérification">ok 12345</TD>
<TD name="NouveauClub">0</TD></TR>
<TR>
<TD name="Time">1457800662926</TD>
<TD name="ID">3</TD>
<TD name="NOM">DSF</TD>
<TD name="Prénom">Sf</TD>
<TD name="Naissance">2000</TD>
<TD name="Age">Cadet</TD>
<TD name="Sexe">M</TD>
<TD name="Ceinture">2</TD>
<TD name="CeintureTxt">Jaune</TD>
<TD name="Club">GIMNASIO TENDO</TD>
<TD name="Responsable">resp</TD>
<TD name="Vérification">ok 12345</TD>
<TD name="NouveauClub">0</TD></TR></TBODY></TABLE></BODY>

J'ai fait cela depuis un userform Excel.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
2 avril 2016 à 13:27
Bon en fait effectivement le code HTML est extrait en entier.

Le problème venait de l'espion qui lui troque la valeur de la variable, mais si je l'écrit dans un fichier texte je retrouve bien tout mon code HTML.

Que de temps perdu pour un truc si bête :s

Merci beaucoup pour votre aide
0
Rejoignez-nous