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

Macros et VBA Excel Discussion :

[IE7] Double document html dans une page web inaccessible depuis vba [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Par défaut [IE7] Double document html dans une page web inaccessible depuis vba
    Bonjour,

    Je souhaite piloter depuis une macro vba une page internet qui n'est pas à ma main. Je me suis inspiré du (très bon) tuto que j'ai trouvé sur cette thématique.
    Le site web en question est un peu particulier :

    Nom : 2016-11-04_144112.png
Affichages : 417
Taille : 5,3 Ko

    En effet il y a 2 balises <html>. Du coup j'en conclu qu'il y a 2 documents imbriqués. Au final je n'arrive pas à récupérer les objets à partir des <id> ou des <name> qui sont présents après la deuxième balise <html> (alors que j'y arrive avec le frame name ="tittlebar" par exemple)

    Le code que j'utilise est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     'Initialisation des variables
       Set IE = New InternetExplorerMedium
       IE.navigate "https://xxx.fr"
       IE.Visible = True
       'attente du chargement de la page
       WaitIE IE
       'récupération du doc
       Set IEDoc = IE.document
       'récupération de la zone de texte
       Set InputECMZoneTexte = IEDoc.all("TitleBar_txtSearch")
       'récupération du bouton d'activation de la recherche
       Set InputECMSearch = IEDoc.all("TitleBar_go_button")
    VBA n'arrive pas à récupérer ces infos, du coup je ne suis pas en mesure de renseigner du texte dans le formulaire <input> qui va bien, ni activer le bouton de recherche <button> pour lancer le script sur la page internet depuis mon code vba :

    Nom : 2016-11-04_143635.png
Affichages : 318
Taille : 1,3 Ko

    Je ne vois pas trop quelle structure je dois adopter ? Déclarer un autre document une fois mon premier document lié ?

    [EDIT] En regardant, je trouve bien des items dans mon IEDoc. Sauf que celà s'arrête aux <frame> ! Comment pourrais-je de nouveau "rentrer" dans ce frame pour aller y récupérer ce que je cherche ?

    [EDIT2]

    On notera toutefois une exception pour l'élément <iFrame, dont la correspondance est en rouge. Le contenu de celui-ci, à savoir <html>, <head>, <title> et leurs balises de clôture respectives, n'apparaît pas dans l'objet all. Le composant iFrame est utilisé pour afficher dans le corps d'une page une autre page Web indépendante. Cette page indépendante a beau être affichée, son contenu n'est pas accessible dans l'arborescence VBA, il faudra charger cette page dans une fenêtre de navigation pour interagir avec elle.
    => Comment je charge cette page ? et surtout comment je récupère les valeurs que j'aurais injecté dedans dans ma première fenêtre IE ? et comment j'actionne le bouton (qui actionné dans la page IE de la frame seule ne sert à rien car il lance un script qui va chercher ailleurs ! )

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Bonsoir
    d'apres ta capture ce sont des frames
    des frames contiennent des document html
    en plus toujours d'apres ta capture il y a une balise form et je supose que tes elements sont dedans

    donc d'abords un getelementsbtytagname("frame")
    puis un sur les form
    puis sur ton élément recherché
    pourrait on avoir une url valide pour les tests
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Par défaut
    Merci pour ta réponse,

    Je ne suis pas en mesure de sortir l'url car c'est un site interne.

    Je comprends la structure dont tu parles mais j'avoue avoir du mal à la mettre en œuvre :

    Si je te fais la hiérarchie de la page internet :
    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
    <html>
    ... (il y a 2 frame, titlebar ci dessous est ainsi le 3eme item)
    <frame name ="titlebar" ..>
       <html>
        <body>
         <form name="TitleBar_0"..>
          <div class="Wrapper">
           <table class="floatLeft"...>
            <tbody>
             <tr><td>
               <input name ="TitleBar_txtSearch_0" -- C'est cet élément que j'essaye d'attraper">
        </toutes les fermetures>
    <frame = ... >
    <frame = ...>
    </html>
    [...]

    Du coup en transcription j'ai fait ce code mais qui n'est pas fonctionnel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set IEDoc = IE.document
    Set IEDoc_FenetreRecherche = IEDoc.frames.Item(3).document 'frame titlebar où on retrouve la recherche rapide
    Set InputECMZoneTexte = IEDoc_FenetreRecherche.all("TitleBar_txtSearch_0")

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut Re
    Re
    La ligne 4 c est pas.. All mais,'. Document. All''

    Et oui chaque frame. Contient un document
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Par défaut
    Merci pour ta réponse,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set IEDoc = IE.document
       Set IEDoc_FenetreRecherche = IEDoc.frames.Item(3).document 'frame titlebar où on retrouve la recherche rapide
       Set InputECMZoneTexte = IEDoc_FenetreRecherche.document.all("TitleBar_txtSearch_0")
    J'ai une erreur d'éxécution 438 (méthode non générée par cette objet).

    Pour moi le "document" du frame je l'avais déjà récupéré avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set IEDoc_FenetreRecherche = IEDoc.frames.Item(3).document 'frame titlebar où on retrouve la recherche rapide
    Car IEDoc.frames.Item(3) => J'ouvre ma frame
    .document => J'ouvre le document de ma frame,

    Je pense que c'est l'ouverture de la frame qui merderait car lorsque j'espionne ce qu'il y a dans la variable "IEDoc_FenetreRecherche", je trouve des items qui sont dans le premier document et pas dans la frame "titlebar" (Des éléments comme ligne 13 ou 14 de la structure de la page web)

    Pour info sur les déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim IEDoc As HTMLDocument
    Dim IEDoc_FenetreRecherche As HTMLDocument
    Dim InputECMZoneTexte As HTMLInputElement 'Bouton de recherche direct
    non ?

  6. #6
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Par défaut
    Désolé pour le double post :

    Problème résolu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim FrameTittleBar As HTMLFrameBase
    Dim IEDoc As HTMLDocument
    Set IEDoc = IE.document
    Set FrameTittleBar = IEDoc.frames.Item(2) 'frame titlebar où on retrouve la recherche rapide
    Set InputECMZoneTexte = FrameTittleBar.frames.document.all("TitleBar_txtSearch_0")
    Une fois le frame sélectionné, ligne 4, il fallait aller dans la section "frames" de celui-ci, puis document, puis all pour retrouver tous les inputs que je recherchais !
    Merci patricktoulon pour ton aide et m'avoir dirigé vers la solution

    Je clos =)

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

Discussions similaires

  1. Compter les liens HTML dans une page web donnée
    Par Chelmi Natroll dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 10/03/2015, 10h24
  2. Insertion d'un document PDF dans une page web
    Par PAWICE dans le forum Services
    Réponses: 1
    Dernier message: 02/02/2009, 14h57
  3. Réponses: 5
    Dernier message: 11/10/2007, 19h11
  4. Réponses: 6
    Dernier message: 10/04/2006, 12h10
  5. [html] incorporation d'une vidéo dans une page web
    Par TERRIBLE dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 29/01/2006, 13h47

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