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

VBScript Discussion :

Comment faire interpréter/reconnaitre les balises HTML par VBS?


Sujet :

VBScript

  1. #1
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut Comment faire interpréter/reconnaitre les balises HTML par VBS?
    Bonjour,

    Est il possible en interprétant les balises HTML de lire et d'extraire des données d'un document HTML depuis un fichier vbscript lirehtml.vbs ?
    Le fichier html est le code source d'une page web que je souhaite faire interpréter par VBS directement plutôt que repasser par un fichier texte (où est venu s'inscrire le code source de la page web) pour en extraire les données...en effet si les balises ne sont pas reconnues il faut avec le vbs depuis le fichier texte utiliser des split et autres pour pouvoir extraire les data souhaitées identifiées par leur id...

    Voici un exemple sous VBA qui marche bien pour extraire les données depuis le fichier textehtml (fichier avec les balises html: h1, span,tr, td...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim DocumentHTML As Object
    Dim test_elem As HTMLGenericElement
    Set DocumentHTML = CreateObject("htmlfile")
    DocumentHTML.body.innerHTML = textehtml
    Set test_elem = DocumentHTML.all("price")
    et là test_elem pointe directement sur les infos recherchées...

    en VBS j'arrive à faire interpréter/retravailler ce fichier textehtml mais uniquement sous forme texte sans reconnaissance des balises html, en effet le code suivant ne marche pas (vbs me demande de déclarer body) et en plus pas moyen de déclarer DocumentHTMl as Object et test_elem as HTMLGenericElement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    code = "Dim DocumentHTML" & vbCrLf
    code = code & "Dim test_elemHTML" & vbCrLf
    code = code & vbCrLf & "Set DocumentHTML = CreateObject(""htmlfile"")"
    code = code & vbCrLf & "DocumentHTML.body.innerHTML = textehtml" 'demande de déclarer body!!!
    code = code & vbCrLf & "Set test_elem = DocumentHTML.all(""price"")"
    Merci de votre aide...je parcours le forum mais je ne trouve pas...

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je ne comprend pas ton deuxième code ...

    Utilise l'objet "InternetExplorer.Application" (que je déconseille) ou un outil tiers.
    Sinon je ne sais pas.

  3. #3
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,

    en clair tu veux parser un fichier comportant des balises html pour en retirer des infos spécifiques
    la première méthode : écrire son propre parsing avec les expressions régulières pas si compliqué mais les regexps rebutent souvent...
    la seconde, utiliser un moteur de parsing prêt à l'emploi, celui de MS comme indiqué dans ton exemple
    sauf que VBS ne supporte pas nativement les objets COM autres que ceux de type IDispatch
    ton code VBA fonctionne car la variable objet test_elem peut être typé en liaison précoce HTMLGenericElement
    ce qui permet au composant de créer implicitement la structure minimum d'un fichier html
    en vbs, il faut faire le boulot à la mimine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim DocumentHTML
    Dim test_elem
     
    taghtml = "<html><body></body></html>" 
    textehtml = "<P>bretelles : <SPAN id=price>1200.20</SPAN></P><P>ceintures : <SPAN id=price>987.25</SPAN></P>"
     
    Set DocumentHTML = CreateObject("htmlfile")
    DocumentHTML.write taghtml
    DocumentHTML.body.innerHTML = textehtml
    Set test_elem = DocumentHTML.all("price")
    for i=0 to test_elem.length - 1
    	msgbox test_elem(i).innerText
    next
    ps : s'il n'existe qu'un seul élément "price", test_elem ne sera pas une collection mais seulement l'élément unique
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  4. #4
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut ok ok
    Bonsoir,

    ah oui t'accord il faut préparer le terrain pour vbs, ton explication est géniale...merci de ton exemple le temps de tester tout ca et je te dis si ca fonctionne à merveille

  5. #5
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut le double guillemet "
    Bonjour,

    Ton code fonctionne nickel et cela permet de passer l'étape création...par contre en ce moment correction +test (ca va venir) car en fait le textehtml rentrant à des " allant avec les id...
    exemple:
    ton texte html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'code = code & vbCrLf & "textehtml = ""<P>bretelles : <SPAN id=price>1200.20</SPAN></P><P>ceintures : <SPAN id=price>987.25</SPAN></P>"""
    'si pas de " avec id comme ici id=price cela marche nickel...
    'mais si " avec id cela bloque...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         'code = code & vbCrLf & "textehtml = ""<P>bretelles : <SPAN id=""price"">1200.20</SPAN></P><P>ceintures : <SPAN id=""price"">987.25</SPAN></P>"""
    'bloque au caractère 39 soit pour id="price"!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        'code = code & vbCrLf & "textehtml = <P>bretelles : <SPAN id=""price"">1200.20</SPAN></P><P>ceintures : <SPAN id=""price"">987.25</SPAN></P>"
    'dasn ce cas erreur de syntaxe manque les " du début et de la fin!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         code = code & vbCrLf & "textehtml = ""<P>bretelles : <SPAN id=""""price"""">1200.20</SPAN></P><P>ceintures : <SPAN id=""""price"""">987.25</SPAN></P>"""
    'ici marche nickel...donc l'idée retravailler légérement le fichier html rentrant pour supprimer les " des id...

  6. #6
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut ca marche nickel
    Bonjour,

    Merci Omen999 avec ton procédé tout marche nickel

    Mais grosse surprise l'interprétation des balises même si elle cible directement le bon élément et moins rapide que le décodage du format texte!!!

  7. #7
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    même si elle cible directement le bon élément et moins rapide que le décodage du format texte!!
    par principe la création d'un objet com à partir d'une bibliothèque consomme du temps
    la 1ère méthode avec une RegExp devrait être plus rapide
    et sinon il y a moyen de simplifier le code en utilisant directement la méthode write
    ce qui évite l'utilisation de la variable taghtml de mon exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim DocumentHTML
    Dim test_elem
     
    textehtml = "<P>bretelles : <SPAN id=price>1200.20</SPAN></P><P>ceintures : <SPAN id=price>987.25</SPAN></P>"
     
    Set DocumentHTML = CreateObject("htmlfile")
    DocumentHTML.write textehtml
    Set test_elem = DocumentHTML.all("price")
    for i=0 to test_elem.length - 1
    	msgbox test_elem(i).innerText
    next
    msgbox DocumentHTML.documentElement.outerHTML
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  8. #8
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    D'accord merci pour cette information, faut que je teste cela...sous peu

  9. #9
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour

    La version avec .write fonctionne elle aussi trés bien. Le gain de temps n'est pas évident mais cela vient surement de la connexion internet et du retour des requêtes...

    Merci pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Interprétation des balises html par word
    Par plante20100 dans le forum Word
    Réponses: 8
    Dernier message: 25/10/2014, 18h47
  2. [TinyMCE] Comment garder les balises HTML, HEAD et BODY ?
    Par sami_c dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 17/09/2007, 15h18
  3. comment insérer fichier en .js dans les balises html
    Par Kaotealc dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/10/2006, 09h38
  4. forcer xsl à interpréter les balises html
    Par canal68 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/07/2005, 15h02

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