Bonjour,
je cherche depuis 3 jours une solution à mon pb mais en vain.
Je veux récupérer les sources HTML pour ensuite récupérer certaines informations dans le but de faire un logiciel de gestion de jeux vidéos. Bref je fais un simple :
me.txtSource.Text = Me.WebBrowser.DocumentText
txtSource est mon champ texte multiligne qui va contenir le code source.
Si je regarde le contenu de mon champ texte après chargement de ma page web, je n'ai aucun accent dans mon champ texte en multiligne. Par exemple , pour Jeu vidéo, je vais voir s'afficher Jeu vido. plus de é !! les à on disparut, etc...
J'ai même essayé de changer mon champ texte en RichTextBox au cas où mais bon, je n'y croyais pas trop.
Je ne sais pas si cela vient de l'encodage Charset qui n'est pas en UTF8 sur certain site. Mais ça m'étonnerais qu'on ne puisse pas récupérer le texte sans garder les accents...
De plus, ce pb est génant dans la mesure ou certains sites vont t'afficher 1 à 2 joueurs ou 1 à 3 joueurs. Pour tester ça, comme c'est très variable, c'est pas possible.
Pareil, bcp de site n'utilise pas les balise Div avec id donc la méthode HtmlDocument.GetElementById est inutilisable... Et comme je ne suis pas un pro du VB.net, je me casse un peu les dents dessus mais étant collectionneur de jeux vidéos et aimant le dev, c'est un beau défi :)
Essaie ça :
WebBrowser.Document.DomDocument.documentElement.outerHTML
Sinon, passe par les transformateurs d'encodage :
Avec "WebBrowser.DocumentStream", tu récupères le contenu HTML sous forme de tableau de Bytes, puis tu utiliser System.Text.Encoding pour tenter différentes converstion...
Pour trouver l'encodage :
- HEADERS
- BALISES META
- BALISE <?xml ?>
Note que si tu veux juste la source de la page, pas besoin d'utiliser un WebBrowser, ajouter MSXML2 à tes ressources de projet et crée une instance de XMLHttpRequest; ensuite, ca fonctionne comme AJAX ;-)
Document Stream :
- Voir System.IO.Stream [MSDN; Google; ...] et System.IO en général
- Ca fait longtemps que je n'ai plus utilisé de Stream, mais je crois que tu dois utilser StreamInstance.Read(ByRef_ResultAsArrayOfBytes, TheLenghthOfTheStream)
XMLHTTPREQUEST : Voir AJAX
- Tu devrais trouver très facilement plein de tutoriels sur le web, mais en JavaScript. Ca ne fait rien, ca marche aussi pour VB .NET !
- Voila un exemple de code :
Dim Xhr as new MSXML2.XMLHttpRequest()
Xhr.Open("POST", TheUrl, false)
Xhr.Send(PostDataAsStringOrNothing)
' Le resultat :
' Xhr.responseText : la source de la page en tant que String
' Xhr.responseBody : la source de la page en tant qu'Array(Of Bytes)
' Xhr.responseStream : une sorte de Stream mais "version JavaScript", eviter de l'utiliser
J'avais trouvé DocumentStream mais étant débutant je n'ai pas trouvé d'explication à cette méthode.
Sais-tu où je pourrais trouver des informations avec exemples pour DocumentStream et XMLHttpRequest ?
Je ne sais pas comment fonctionne tout ça et je suis très curieux :)
Et puis mon application pourrait en être que plus alléger au niveau code je pense si c'est plus rapide et moins de contrôle à utiliser !
Merci par avance à toi et merci encore pour cette réponse !
Salut j'aimerais recuperer dans un text box ou autre (label, variable..) le contenu d'une page web. J'ai charger ma page dans un webbrowser (webbrowser.navigate "http://....") et j'ai essayer la propiete webbrowser.document pour recuperer le contenu de la page html mais je n'optien a chque fois que [object]. Pouriez vous m'expliquer comment marche le controle. Merci
WebBrowser.documentText ==> Contenu HTML
WebBrowser.Document ==> Contenu "Wrappé" en .NET depuis COM du DOM (ou Document Object Model)
WebBrowser.Document.DomDocument ==> Contenu COM au format DOM (Comme n'importe quel javascript)
Donc,
''' PSEUDO-CODE
Protected Property DotNetDocument() as HTMLDocument = WebBrowser.Document
Protected Property Document() as Object = WebBrowser.Document.DomDocument
Document.getElementById('ID') ou Document.getElementsByName("NAME") ou Document.getElementsByTagName("INPUT") ou Document.all.xyz