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 :

Erreur "Le membre public "GetElementByTagName" du type 'HTMLDocumentClass' est introuvable.


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Erreur "Le membre public "GetElementByTagName" du type 'HTMLDocumentClass' est introuvable.
    Bonjour,


    Je compte démarrer un projet pour le boulot afin d'aider les utilisateurs a récupérer certaines infos dans certains outils Web de l'entreprise .

    J'ai commencé il y a quelques mois a faire des macros en VBA pour des traitements Excel et pas mal de manipulation d'Internet Explorer.


    Cependant, afin d'avoir une meilleur ergonomie, je voudrais passer en VB afin de pouvoir créer une interface qui puisse être plus adéquat au besoin de l’utilisateur.


    Bref, je me heurte a un souci d'exploitation de donnée dans le HTMLDocument d'une page (je n'ai jamais eu de souci en VBA pour la dite-page pourtant.). Je cherche juste a lister tous les élement avec le tag "ID" dans une variable Objet.

    Voici l'erreur lorsque je compile et lance le programme (release):

    Erreur "Le membre public "GetElementByTagName" du type 'HTMLDocumentClass' est introuvable.


    Voici le code:

    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
     
            Dim IE As SHDocVw.InternetExplorer
            'Dim bacara As System.Windows.Forms.WebBrowser
            Dim IEdoc As mshtml.IHTMLDocument
     
            Dim colTD As HtmlElementCollection
     
    IE = CreateObject("InternetExplorer.Application")
     
            IE.Navigate("C:\Users\XXX\Desktop\XXXX\FETAP.htm")
            IE.Visible = True
     
            Wait(3)
            WaitIE(IE)
            Me.TXT_Qualif_RAP.Text = IE.Document.all("RAP").value
            MsgBox(Me.TXT_Qualif_RAP.Text)
            IE = IE.Document
     
            colTD = IE.GetElementByTagName("TD")
     
            For Each td As HtmlElement In colTD
                MsgBox(td.InnerText)
            Next
     
            MsgBox("Fini!")
     
    IE = Nothing

    Je m'excuse d'avance si le souci a déjà été rencontré ou est fréquent mais je n'ai malheureusement pas trouver de solution au problème.


    Merci d'avance.

  2. #2
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    C'est soit GetElementsByTagName (notons le 's') qui retourne plusieurs éléments, soit GetElementById qui en retourne un (car l'id est unique à l'inverse du tag).

    GetElementByTagName n'est donc pas un membre de HTMLDocumentClass
    http://msdn.microsoft.com/fr-fr/libr...(v=vs.95).aspx


    Pour te faciliter la tâche il existe déjà des parsers comme agility pack
    Aider les autres, c'est encore la meilleure façon de s'aider soi-même. Martin Gray

    ToDo : Faire une ToDo List

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je dirais que GetElementByTagName n'est pas supporté sous IE, peux tu lancer Firefox à la place?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci a tous pour vos réponses!

    J'ai testé en changeant les déclarations de mes variables par des mshtml.IHTML... et ça marche.


    Cependant je ne comprend pas vraiment quelle est la différence (hormis le fait que ça fonctionne) entre les déclarations HTMLDocument et IHTMLDocument...

    De plus, lorsque l'on veut explorer ces variables par un espion, les items ne sont pas affichés par exemple dans IEDoc.all . Alors qu'en VBA c'est beaucoup plus simple... Il y a-t-il un palliatif?

  5. #5
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Perso, comme le dit _Ez3kiel, j'utilise HTML Agility pack pour parser : http://www.nuget.org/packages/HtmlAgilityPack
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Perso, comme le dit _Ez3kiel, j'utilise HTML Agility pack pour parser : http://www.nuget.org/packages/HtmlAgilityPack
    Bonjour,

    Merci encore une fois de ta réponse. j'ai étudié un peu HAP et il semblerait qu'on ne puisse pas manipuler complétement la page Web. Par exemple ajouter des valeurs aux inputs, rentrer dans des iframes, cliquer sur un input etc...

    Au final, je voudrais manipuler des pages web en tache de fond (ouverture, fermeture, clic, remplissage de formulaire etc..). La méthode que j’utilisais en VBA était plutôt simple. Mais ça a l'air d'être plus compliqué en VB.NET. Je me retrouve un peu bloqué du coup.

  7. #7
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Ah oui, effectivement pour ce genre de choses, je ne pense pas que Agility Pack soit utile. C'est plutôt pour parser le html.

    J'ai vu que tu as mis une ligne qui instancie la classe WebBrowser, pourquoi ne pas utiliser le composant WebBrowser ? tu peux simuler un click avec (exemple : http://social.msdn.microsoft.com/For...=csharpgeneral)
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Ah oui, effectivement pour ce genre de choses, je ne pense pas que Agility Pack soit utile. C'est plutôt pour parser le html.

    J'ai vu que tu as mis une ligne qui instancie la classe WebBrowser, pourquoi ne pas utiliser le composant WebBrowser ? tu peux simuler un click avec (exemple : http://social.msdn.microsoft.com/For...=csharpgeneral)

    Bonjour,

    Alors j'ai aussi penser a utiliser un Webbrowser. Le souci est que lors de ma manipulation de page web j'en appel une nouvelle ( par un simple click d'un input) et donc scan des shells windows du coup, je ne pense pas que ce soit adéquat.


    De plus, j'ai avancé un peu dans mon projet, et je suis confronté a un souci:

    J'ai un page HTML contenant un frameset contentant deux frames comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <frameset rows="100,*" frameSpacing="0">
    <frame name="X" src="X.asp" >
    <frame name="Y" src="Y.jsp">
    Alors ça se complique, je voudrait avoir les éléments présents dans la frame Y. J'arrive bien a capturé mon HTMLFrameElement, le souci est qu'il ne contient RIEN. En effet, le .innertext est vide, je n'ai pas à disposition un .document ou un .contentdocument... J'ai pensé à un souci de sécurité?! Ou peut être la nécessité d'un refresh sur la frame?! Mais je n'ai rien trouvé sur le net.

    Je suis un peu désespéré...

    PS : Pour rappel, je fais exactement les manipulations en VBA et ça marche nickel.

Discussions similaires

  1. Réponses: 26
    Dernier message: 17/01/2012, 13h59
  2. [débutant] erreur "indice de liste hors limites(1)"
    Par lidouka dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 14h31

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