IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Parser une page html en VB


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut Parser une page html en VB
    Bonjours à tous

    Pour introduire ma demande je vais vous expliquer pourquoi je souhaites parser une page web.
    Je joue fréquemment au jeux de simulation War Thunder. Le jeux renvoie sur une page web tout un tas de donné concernant l'appareil qu'on pilote. C'est donné sont : le régime du moteur, la température et pression d'huile, l'altitude et j'en passe.
    Le but est d'extraire certaine de ces données et de les transmettre plus tard à un arduino, qui ensuite fera tourner des servos moteurs.
    La première étape consiste a extraire les données de la page web en parsant le code HTML avec un programme en VB.

    Voici une capture d'écran de la page HTML

    Nom : Capture.JPG
Affichages : 2233
Taille : 89,1 Ko

    J'ai commencé a créer mon programme en VB.
    Pour expliqué rapidement mon programme, je lui demande de ce connecté à la page web et de récupérer l'id "ind-rpm" et de l'écrire dans un label.
    Ce qui m’intéresse surtout c'est donc de récupérer la valeur rpm=0 (cette variable est mise à jour en temps réel en fonction du régime moteur demandé dans le jeux)
    Point positif, c'est que lors du débogage il n'y pas d'erreur
    Point négatif, c'est qu'il ne ce passe rien lorsque j’appuie sur le bouton dans mon programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Imports HtmlAgilityPack
    Imports System.Xml.XPath
    Public Class Form1
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim web As New HtmlWeb
            Dim url As String = "http://x.x.x.x:8111"
            ' load du document html
            Dim doc As HtmlDocument = web.Load(url)
     
            ' Selection des nodes XPATH
     
            Dim MesNodes As HtmlNodeNavigator = doc.DocumentNode.CreateNavigator
            Dim xmlNodeIterator As XPathNodeIterator = MesNodes.Select("//div[@id='ind-rpm']")
            Dim rpm As String
            While xmlNodeIterator.MoveNext()
                ' la ligne ce dessous me génére l'erreur...
                rpm = xmlNodeIterator.Current.SelectSingleNode("rpm").Value
     
               Label1.Text &= "test" & vbCrLf
                Label1.Text &= rpm
            End While
        End Sub
    End Class
    PS : Les X qui apparaissent à la ligne 6 du code masque mon adresse IP

    Merci d'avance à ceux qui me liront

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    MesNodes.Select("//div[@id='ind-rpm']")
    Pas regarde en details, mais on voit que tu selectionnes un DIV, alors que tu devrais selectionner un LI.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Nouveau Candidat au Club Avatar de blaise mubadi
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    je suis intéressé. mais je ne pas compris ta difficulté?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    MesNodes.Select("//div[@id='ind-rpm']")
    Pas regarde en details, mais on voit que tu selectionnes un DIV, alors que tu devrais selectionner un LI.
    Donc à la place d'écrire
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    MesNodes.Select("//div[@id='ind-rpm']")

    je dois écrire
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    MesNodes.Select("//li[@id='ind-rpm']")

    C'est ça ?

    Citation Envoyé par blaise mubadi Voir le message
    je suis intéressé. mais je ne pas compris ta difficulté?
    Bah la difficulté c'est lors de l’appuie du bouton rien ne ce passe

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par VRVI44 Voir le message
    C'est ça ?
    En effet :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim rpmIndicatorLiNode = doc.DocumentNode.SelectSingleNode("//li[@id='ind-rpm']")
    Dim rpmIndidcatorValue = rpmIndicatorLiNode.InnerText ' La on recupere bien rpm=0
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Merci de m'aider c'est cool

    Alors j'ai modifier le programme comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Imports HtmlAgilityPack
    Imports System.Xml.XPath
    Public Class Form1
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim web As New HtmlWeb
            Dim url As String = "http://x.x.x.x:8111"
            ' load du document html
            Dim doc As HtmlDocument = web.Load(url)
     
            Dim MesNodes As HtmlNodeNavigator = doc.DocumentNode.CreateNavigator
            Dim rpmIndicatorLiNode = doc.DocumentNode.SelectSingleNode("//li[@id='ind-rpm']")
            Dim rpmIndidcatorValue = rpmIndicatorLiNode.InnerText ' La on recupere bien rpm=0
     
            Label1.Text = "test recup var."
        End Sub
    End Class
    Mais j'ai surement fais une erreur car lors du débogage quand j'appuie sur le bouton, voila ce qu'il ce passe

    Nom : Capture.JPG
Affichages : 2257
Taille : 115,6 Ko

    Je ne vois pas comment régler ce défaut car je comprend pas ce que me demande le logiciel (halala les débutants )

  7. #7
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Alors deja la ligne Dim MesNodes As HtmlNodeNavigator = doc.DocumentNode.CreateNavigator ne sert a rien donc tu peux la virer.

    Ensuite, met un point d'arret sur la ligne Dim rpmIndicatorLiNode = doc.DocumentNode.SelectSingleNode("//li[@id='ind-rpm']") et quand il est atteint, regarde la valeur de doc.DocumentNode.OuterHtml et copie-la ici. Ca nous permettra de verifier que la structure du HTML correspond au premier screenshot que tu as mis ici.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Merci bien pour le coup de main

    Je verrais ça demain car je n'est jamais entendu de la fonction "point d'arrêt". Je vais me renseigner la dessus
    Et j'ai bien virer la ligne inutile par contre

  9. #9
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Citation Envoyé par VRVI44 Voir le message
    Merci bien pour le coup de main

    Je verrais ça demain car je n'est jamais entendu de la fonction "point d'arrêt". Je vais me renseigner la dessus
    Et j'ai bien virer la ligne inutile par contre
    Salut,

    un "point d'arrêt" n'est pas une fonction. C'est une fonctionnalité du debugger.
    Dans ton code, au niveau d'une ligne de code, tu peux mettre un "point d'arrêt" (F9 sous VS).
    Ensuiste tu lances ton appli en mode debug (F5 sous VS) et juste avant que cette ligne soit exécutée, le debugger arrêtera ton programme dessus pour que tu puisses inspecter le code "à l'instant T".

    Pour ton bug a priori rpmIndicatorLiNode est null, du coup on peut penser que ton XPath n'a rien renvoyé (même s'il semble correct). Serait-il possible que le DOM ne soit pas totalement chargé lorsque tu cherches à le parcourir ?
    Plus je connais de langages, plus j'aime le C.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Merci pour la fonctionnalité du débogueur. En effet le programme s'arrête sur la ligne, mais comment puis-je faire pour inspecter le code afin de vérifier la valeur de doc.DocumentNode.OuterHtml

    Et concrètement qu'est ce que ça veut dire que rpmIndicatorLiNode est null ?

    Théoriquement le HTML est charger quand je cherche à le parcourir car je l'ouvre avant de lancer mon programme VB, et sur cette page j'ai tout en temps réel sans le moindre souci de latence par rapport au jeux. Donc selon moins elle est correctement charger quand je lance l'appli VB

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par VRVI44 Voir le message
    Merci pour la fonctionnalité du débogueur. En effet le programme s'arrête sur la ligne, mais comment puis-je faire pour inspecter le code afin de vérifier la valeur de doc.DocumentNode.OuterHtml
    http://plasserre.developpez.com/cours/vb-net/ voir le chapitre XII.

    Citation Envoyé par VRVI44 Voir le message
    Et concrètement qu'est ce que ça veut dire que rpmIndicatorLiNode est null ?
    Ca veut dire que la methode SelectSingleNode n'a pas ete en mesure de trouver le noeud indique.

    Citation Envoyé par VRVI44 Voir le message
    Théoriquement le HTML est charger quand je cherche à le parcourir car je l'ouvre avant de lancer mon programme VB, et sur cette page j'ai tout en temps réel sans le moindre souci de latence par rapport au jeux. Donc selon moins elle est correctement charger quand je lancer l'appli VB
    C'est pour cela que je te demande de nous poster le contenu de la variable doc.DocumentNode.OuterHtml. Comme indique par jopopmk, il peut y avoir des differences entre ce que tu vois quand tu charges la page dans ton navigateur, et ce que le web.Load(url) va charger.

    Ces differences sont potentiellement liees a des chargements asynchrones avec AJAX par exemple. Peut-etre que les info que tu veux recuperer ne sont pas chargees directement avec l'ensemble de la page, mais via un script JavaScript et une requete HTTP GET. Il faut donc s'assurer que ce qui est recupere en appellant web.Load(url) est bien ce qu'on attend.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Alors voila ce que me donne la table de variables locales lors du débogage :

    OuterHTML:

    Valeur OuterHTML.txt

    Dites moi si ses infos vous conviennent

    Merci

  13. #13
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Bingo ! Si on se concentre sur ce qui nous interesse ici :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      <div id="indicators-root">
        <div class="caption"><div id="draghandle"></div></div>
        <div id="indicators">
          <ul id="indicators0" class="connectedIndicators"></ul>
          <ul id="indicators1" class="connectedIndicators"></ul>
        </div>
      </div>
    On peut voir que la liste "indicators1" est vide, ce qui signifie que son contenu est charge apres le chargement initial de la page, en AJAX. Et ce n'est pas une mince affaire...

    La seule solution que je vois ici est la suivante :
    1 - Tu charges ta page comme tu le fais actuellement.
    2 - Tu recuperes chacun des scripts qui sont references dans la page, a savoir :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      <script src="jquery-1.10.1.min.js"></script>
      <script src="sylvester.src.js"></script>
      <script src="hammer.min.js"></script>
      <script src="jquery-ui-1.10.3.interact.min.js"></script>
      <!--script src="hammer.fakemultitouch.js"></script-->
      <!--script src="hammer.showtouches.js"></script-->
      <script src="cookies.js"></script>
      <script src="utils.js"></script>
     
      <script src="/loc/map/primary_objectives?fmt=js"></script>
      <script src="/loc/map/secondary_objectives?fmt=js"></script>
    3 - Tu telecharges chaque fichier dans un repertoire local
    4 - Tu mets a jour les chemins ci-dessus pour qu'ils pointent vers le repertoire en local.
    5 - Ensuite tu prends ce HTML modifie, et tu refais un chargement de cette page.

    En toute logique, ca devrait te charger ce dont tu as besoin, sauf s'il y a d'autres choses planquees dans les fichiers javascript et qu'on ignore...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Ca me parait pas évident a faire tout ça

    Mais si j'ai bien compris

    1-Ok je charge ma page donc je laisse le programme tel quel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Imports HtmlAgilityPack
    Imports System.Xml.XPath
    Public Class Form1
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim web As New HtmlWeb
            Dim url As String = "http://x.x.x.x:8111"
            ' load du document html
            Dim doc As HtmlDocument = web.Load(url)
    2-Si je copie le code tel que tu me l'a donné, je récupérés chacun des scripts qui sont références dans la page
    3-Un programme VB peut ce charger de télécharger chaque fichier dans un répertorie local ?
    4-Je met à jour les scripts et les envoies vers le répertoire local
    5-Je dois créer un page HTML qui est ni plus ni moins que le répertoire local

  15. #15
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par VRVI44 Voir le message
    Ca me parait pas évident a faire tout ça
    En effet, et encore une fois il n'est pas du tout garanti que ca fonctionne !

    Citation Envoyé par VRVI44 Voir le message
    1-Ok je charge ma page donc je laisse le programme tel quell
    Oui.
    Citation Envoyé par VRVI44 Voir le message
    2-Si je copie le code tel que tu me l'a donné, je récupérés chacun des scripts qui sont références dans la page
    Non, tu dois reconstituer l'URL du fichier et le telecharger a l'aide d'un WebClient par exemple. Une fois telecharge, il faut enregistrer le fichier dans un repertoire local.
    Citation Envoyé par VRVI44 Voir le message
    3-Un programme VB peut ce charger de télécharger chaque fichier dans un répertorie local ?
    Oui.
    Citation Envoyé par VRVI44 Voir le message
    4-Je met à jour les scripts et les envoies vers le répertoire local
    Tu dois mettre a jour le chemin des scripts vers ton repertoire local (point 2 ci-dessus). Tu dois mettre a jour l'attribut src de chaque balise <script...> pour que ca pointe vers le bon fichier dans le repertoire local.
    Citation Envoyé par VRVI44 Voir le message
    5-Je dois créer un page HTML qui est ni plus ni moins que le répertoire local
    Non, tu prends la page HTML du point 1, tu telecharges les fichiers et tu mets a jour les balises <script...>. Ensuite tu enregistres ce HTML par exemple dans C:\TEMP\test.html. Puis au lieu de pointer vers l'URL, tu vas charger ce fichier, un peu comme ceci :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim url As String = "C:\TEMP\test.html" ' Ici c'est le chemin vers
    ' load du document html
    Dim doc As HtmlDocument = web.Load(url)
    Ensuite, regarde le contenu de la propriete doc.DocumentNode.OuterHtml. Si tu vois la meme chose que dans le fichier texte que tu nous a envoye avant, alors ca ne fonctionne pas et on ne pourra pas t'aider plus loin.

    Si tu vois plus de choses, alors il y a des chances pour que ca marche. Poste nous le resultat et on verra.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Très bien merci pour les explications

    Je vais testé tout ça et dire ce qu'il en ais

    Si jamais ça ne fonctionne pas, je me rabattrais sur la solution Python avec lequel je n'arrive pas écrire une ligne de code avec la bonne syntaxe

    Bref pas de hors sujet, je me penche sur ce que tu m'a donné

    EDIT :

    Je viens de saisir un peut plus ce que tu ma dis. Donc si je récapitule plus clairement (en tout cas pour moi)

    1-Je me connecte à la page http://x.x.x.x:8111
    2-Je télécharge la page HTML et la sauvegarde dans un dossier sur mon PC par exemple (C:\Users\MonPc\Desktop\NomDuDossier)
    3-Je met a jour les scripts vers mon répertoire (C:\Users\MonPc\Desktop\NomDuDossier)
    4-Je viens lire l'html qui est dans mon dossier (C:\Users\MonPc\Desktop\NomDuDossier) pour récupérer ce que je veux

    EDIT 2 :

    Voila le programme grâce auquel je télécharge la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Imports HtmlAgilityPack
    Imports System.Xml.XPath
    Imports System.Net
    Public Class Form1
        Private Sub BtConnect1_Click(sender As System.Object, e As System.EventArgs) Handles BtConnect1.Click
            Dim web As New HtmlWeb
            Dim url As String = "http://x.x.x.x:8111"
            ' load du document html
            Dim doc As HtmlDocument = web.Load(url)
        End Sub
     
        Private Sub BtDownload1_Click(sender As System.Object, e As System.EventArgs) Handles BtDownload1.Click
            Dim pageHTML As New WebClient
            pageHTML.DownloadFile(URLRextBox1.Text, "C:\Users\HERVY\Desktop\Program_W-T\Test.html")
        End Sub
    End Class
    L'URLRextBox1.Text me sert a renseigner http://x.x.x.x:8111
    Je vais chercher maintenant pourquoi il n'y a rien quand j'ouvre la page télécharger.
    Mais je pense que c'est logique car je dois mettre à jour les scripts vers l'HTML qui est dans mon répertoire (enfin si j'ai compris )

  17. #17
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Je viens de penser a une seconde piste... Utilise un WebBrowser pour charger la page, et quand le state du WebBrowser est egal a "Completed" (il faut souvent attendre un peu), recupere le code HTML qu'il contient. Tu peux voir comment faire ici : htmlagilitypack and dynamic content issue, dans la reponse de Nick. C'est en C# mais tu peux utiliser un traducteur vers VB.NET.

    Poste le code HTML recupere.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Je vais tester ça dans la soiré
    Merci pour le tuyau

    Edit:
    J'ai intégrer un Webbrowser a mon programme et lors du débogage il m’indique ceci dans la fenêtre du webbrowser :

    "Please use a browser with canvas support"

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    J'ai repris le code du liens que tu ma donné DotNetMatt, mais aux lignes 20 et 21 j'ai 2 erreurs et j'arrive pas à les corriger
    Il me dis que mshtml.IHTMLDocument3 n'est pas défini et pareil pour StringReader

    Sinon je sais pas si la totalité du code est bon mais ce sont les 2 seul erreur qu'il y a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Imports HtmlAgilityPack
    Imports System.Xml.XPath
    Public Class Form1
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim web As New HtmlWeb
            Dim url As String = "http://x.x.x.x:8111"
            ' load du document html
            Dim doc As HtmlDocument = web.Load(url)
     
            Dim rpmIndicatorLiNode = doc.DocumentNode.SelectSingleNode("//li[@id='ind-rpm']")
            Dim rpmIndidcatorValue = rpmIndicatorLiNode.InnerText ' La on recupere bien rpm=0
     
            Label1.Text = "test recup var."
        End Sub
        Private Sub LoadHtmlWithBrowser(ByVal url As String)
            WebBrowser1.ScriptErrorsSuppressed = True
            WebBrowser1.Navigate("http://x.x.x.x:8111")
            waitTillLoad(Me.WebBrowser1)
            Dim doc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument
            Dim documentAsIHtmlDocument3 = CType(WebBrowser1.Document.DomDocument, mshtml.IHTMLDocument3)
            Dim sr As StringReader = New StringReader(documentAsIHtmlDocument3.documentElement.outerHTML)
            doc.Load(sr)
        End Sub
     
        Private Sub waitTillLoad(ByVal webBrControl As WebBrowser)
            Dim loadStatus As WebBrowserReadyState
            Dim waittime As Integer = 100000
            Dim counter As Integer = 0
     
            While True
                loadStatus = webBrControl.ReadyState
                Application.DoEvents()
                If ((counter > waittime) _
                            OrElse ((loadStatus = WebBrowserReadyState.Uninitialized) _
                            OrElse ((loadStatus = WebBrowserReadyState.Loading) _
                            OrElse (loadStatus = WebBrowserReadyState.Interactive)))) Then
                    Exit While
                End If
     
                counter = (counter + 1)
     
            End While
     
            counter = 0
     
            While True
                loadStatus = webBrControl.ReadyState
                Application.DoEvents()
                If ((loadStatus = WebBrowserReadyState.Complete) _
                            AndAlso (webBrControl.IsBusy <> True)) Then
                    Exit While
                End If
     
                counter = (counter + 1)
     
            End While
     
        End Sub
     
    End Class

  20. #20
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    Pour tes erreurs du moment :
    - StringReader est une classe de System.IO : il faut référencer l'assembler et faire un using (ou préfixer par le namespace),
    - IHTMLDocument3 : pareil sauf que là il faut référencer la DLL COM MSHTML et pas un assembly.

    Pour le WebBrowser :
    - je sais pas de quand date ce contrôle, mais l'est pas tout jeune (base IE9 ?) donc tu pourrais avoir d'autres soucis avec du HTML "moderne".

    Pour la finalité du truc :
    - d'après le JS les info que tu cherches sont listées par le endpoint http ://x.x.x.x:8111/indicators, as-tu essayé de le taper directement ?
    - question en sus : y'a besoin d'une connexion préliminaire ? Y'a un sessionId enregistré dans un cookie ?
    Plus je connais de langages, plus j'aime le C.

Discussions similaires

  1. Parser une page HTML avec du PHP
    Par Richard_Rahl dans le forum Langage
    Réponses: 9
    Dernier message: 19/08/2008, 15h36
  2. Parser une page html ?
    Par SimoX1 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/12/2006, 19h10
  3. Parser une page Html pour récuperer valeur
    Par Andry dans le forum Delphi
    Réponses: 5
    Dernier message: 01/12/2006, 17h10
  4. Parser une page html, quel outil ?
    Par ggnore dans le forum Linux
    Réponses: 5
    Dernier message: 28/11/2006, 11h48
  5. parser une page HTML pour en retirer de l'info
    Par belakhdarbts10 dans le forum ASP
    Réponses: 1
    Dernier message: 29/10/2006, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo