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 6 et antérieur Discussion :

VB6: Récupération des meta d'une page HTML avec HTMLDocument


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut VB6: Récupération des meta d'une page HTML avec HTMLDocument
    Bonjour !

    Ceci est mon premier post alors je tiens à remercier ce site et ses animateurs qui en font une référence et une très bonne source d'infos. Je me sert très souvent de vos cours, tutoriels et faq pour en apprendre plus sur VB6.

    Je me suis décidé à m'inscrire sur les forums pour participer à la vie de ce site et vous exposer mes problèmes, remarques et idées (même si je débute mon apprentissage du VB6)

    En ce moment je suis en train de créer un soft dont le but est de tester si un site ou une page web est accessible (par l'objet winhttp) et dans le cas où elle l'est, je souhaite récupérer et afficher les informations de la page.

    J'ai bien réussi à utiliser winhttp pour tester le statut de la page par contre je n'arrive pas à récupérer toutes les infos que je veux dans cette page par l'objet HTMLDocument.

    J'ai fait quelques tests sur cet objet et j'arrive à récupérer le titre (pas dur), les liens de la page (pareil) et l'intégralité de la page. Par contre je n'arrive pas à récupérer les valeurs des attributs des metas de la page.

    Par exemple, je souhaiterais récupérer la valeur de l'attribut "content" de la meta description.

    Voici le code type du code qu'il faut que j'interprête :
    <meta name="description" content="ce site est le plus beau de tous les sites">

    Ceci est le début du code pour la partie utilisation de HTMLDocument.

    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
     
    Dim objLink As HTMLLinkElement
        Dim objMSHTML As New MSHTML.HTMLDocument
        Dim objDocument As MSHTML.HTMLDocument
     
        Set objDocument = objMSHTML.createDocumentFromUrl("http://www.google.fr", vbNullString)
     
        While objDocument.readyState <> "complete"
            DoEvents
        Wend
        Debug.Print objDocument.Title
     
        Debug.Print objDocument.documentElement.outerHTML
        Debug.Print objDocument.Title
     
        For Each objLink In objDocument.links
            Debug.Print objLink
            DoEvents
        Next
    Quelqu'un aurait une idée pour que je puisse récupérer la description d'un site ? Evidemment, je pourrais faire un découpage de chaîne mais cela ne sert à rien que je le fasse si HTMLDocument peut m'aider à le faire.

    Merci d'avance pour toute remarque ou aide.

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Essaies avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Dim HeadDoc As Object, metaList As Object, mElem As HTMLMetaElement
        Set HeadDoc = objDocument.all.tags("head")(0)
        Set metaList = HeadDoc.getElementsByTagName("meta")
        If metaList.Length > 0 Then
            For x = 0 To metaList.Length - 1
                Set mElem = metaList(x)
                Debug.Print x, mElem.content, mElem.httpEquiv
            Next
        End If

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci d'avoir répondu aussi rapidement. J'ai fait des tests et j'arrive bien à récupérer descriptions et mots-clés en faisant un test sur mElem.name.

    Maintenant je vais tester l'attribut lang de la meta name="description" (et pareil pour keywords) histoire de récupérer les metas françaises.

    Merci beaucoup !

  4. #4
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Bonjour, ce post est un peut ancien mais je pense que mon souci est un peut le même.

    Je doit récupérer des information contenu dans une page html.

    Actuellement j'ai fait mes essaies avec WebBrowser, sachant que la page web sera cachée, mon but est uniquement de récupérer les données et les afficher.
    En tombant sur ce post je me qu'il y a peut être moyen de faire quand même plus propre qu'une découpe de chaîne à la recherche de mes données.

    Voici ma page Html:
    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
    61
    62
    63
    64
    <html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <link rel="stylesheet" href="/style.css" type="text/css" />
    </head>
    <body>
    <div class="content" id="overviewPage">
    <h4 class="noUnderline">012402G291      </h4>
    <br>
    <table>
        <tbody>
        <tr>
            <th class="parName">État de l'onduleur:&nbsp;</th>
            <td class="parValue"><img src="/images/yellow_button.gif" width="20" height="20"></td>
        </tr>
        <tr>
            <th class="parName">Production actuelle:&nbsp;</th>
            <td class="parValue">0 W </td>
            <td  colspan="2">&nbsp;</td>
        </tr>
        <tr>
            <th class="parName">Production du jour:&nbsp;</th>
            <td class="parValue">0 Wh </td>
            <td  colspan="2">&nbsp;</td>
        </tr>
        <tr>
            <td colspan="4">&nbsp;</td>
        </tr>
        <tr>
            <th class="parName">Revenu total:&nbsp;</th>
            <td class="parValue">
                -
            </td>
            <td  colspan="2">&nbsp;</td>
        </tr>
        <tr>
            <th class="parName">Economies totales de CO2:&nbsp;</th>
            <td class="parValue">0.0 kg</td>
            <td  colspan="2">&nbsp;</td>
        </tr>
        <tr>
            <th class="parName">Rapport de performance:&nbsp;</th>
            <td class="parValue">
            -
            </td>
            <td  colspan="2">&nbsp;</td>
        </tr>
        <tr>
            <th class="parName">Production totale:&nbsp;</th>
            <td class="parValue">0.0 Wh</td>
            <td  colspan="2">&nbsp;</td>
        </tr> 
        <tr>
            <th class="parName">&nbsp;</th>
            <td class="parValue"></td>
            <td colspan="2">&nbsp;</td>
        </tr>
        <tr>
        	<th class="parName">Réglage du niveau de puissance:&nbsp;</th>
    		<td class="parValue">100.0 %</td>
    	</tr>
    </tbody></table>
    </div>
    </body></html>
    Il faut par exemple que je récupère "Production actuelle" et donc la valeur associée est ici de "0 W"
    Idem pour "Production du jour" qui est de "0 Wh" dans l'exemple et pour "Economies totales de CO2" C'est mes 3 valeurs que j'ai besoin.

    Pour le code émis plus haut j'ai ajouté winhttp dans VB6 mais il doit me manquer autre chose car il ne reconnait pas les fonctions.

    Actuellement pour accéder à ma page web qui contient les info, je me logue par:
    h t t p ://MonIp/cgi-bin/handle_login.tcl?user=admin&pw=admin

    J'arrive sur une page m'affichant ce que j'ai besoin mais contenu dans un cadre.
    Pour accéder au cadre je doit récupérer le numéro de connexion sid contenue dans l'adresse de la page ouverte.
    Puis je navigue vers
    h t t p://MonIp/cgi-bin/overview.tcl?sid=monnumerosid

    ce qui me donne la page html ci dessus.

    merci de votre aide

  5. #5
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Bonjour,
    Aucun tag (ou presque) ne dispose d'ID pour être identifié donc
    soit tu utilises HTMLTable(0) avec les références à la cellule concernée
    soit tu la parcoures pour identifier le TH correspondant
    mais dans tous les cas, si la source est modifiée ...

  6. #6
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Merci,


    Par contre est t'il possible d'appeler les pages sans passer par un WebBrowser, car je n'est pas besoin de visualisation. Je veux juste les variables.

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Oui, bien sur, c'est même beaucoup plus rapide.
    1/ tu télécharges le fichier avec les apis (ça ne manque pas)
    2/ tu affectes le contenu dans DOM
    set htmldocument.innerhtml=....

  8. #8
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Et-il possible de me guider un peut, si c'est possible.

  9. #9
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Pour télécharger le fichier voir
    AllApi>Internet : y a le choix
    sinon avec winhttp

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je te conseille la lecture de ce tuto :

    VBA et développement Web - tour d'horizon du développement Web en VBA, par Arkham46

    Bien qu'il soit fait pour du VBA tu devrais y trouver des choses à adapter.

    Philippe

  11. #11
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Merci, c'est sympa.

    Bonne continuation

Discussions similaires

  1. Récupérer des info dans une page html
    Par DORBRITZ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 06/03/2008, 11h13
  2. [RegEx] Comment extraire des données d'une page HTML ?
    Par taliesin26 dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2006, 12h39
  3. Réponses: 1
    Dernier message: 11/05/2006, 19h06
  4. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22
  5. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18

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