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 :

Se connecter à une page web vba [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Par défaut Se connecter à une page web vba
    Bonjour à tous,

    J'ai récupéré et adapté ce petit bout de code pour me connecter à une application web automatiquement après avoir rempli un formulaire.
    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
     
    Sub ie_open()
       With CreateObject("InternetExplorer.Application")
         .navigate "mon adresse"
         .Visible = True
         Do Until .readyState = 4
           DoEvents
         Loop
         DoEvents
         With .document
            .forms("XXXX").elements("login").Value = "XXXXX"
            .forms("XXXX").elements("password").Value = "XXXXX"
            .forms("XXXX").submit
         End With
      End With
    End Sub
    Le problème est que lorsque j'utilise le submit, le login et mdp n'est pas reconnu.

    Si je l'enlève, mes champs se remplissent correctement. En cliquant sur le bouton "se connecter" manuellement, j'arrive à me connecter.

    Est-ce je fais quelque chose de travers? Ou alors cette page est protégée pour ne pas être validée par une tiers application?

    J'avoue que je suis pas un spécialiste de l'html. J'ai essayé aussi de repérer le bouton dans le code source et de faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set SignInButton = LoginForm
    SignInButton.Click
    mais sans succès non plus. En fait, soit signbutton est égal à nothing, soit ça fait rien. Donc j'arrive pas à cibler correctement le bouton.

    Merci beaucoup

  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
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ie_open()
       With CreateObject("InternetExplorer.Application")
         .navigate "mon adresse"
         .Visible = True
         Do:  DoEvents: Loop while.readyState <> 4 or ie.busy 'on oubli souvent le busy le ready donne la main alors que la page se charge encore 
              With .document
            .all("login").Value = "XXXXX"
            .all("password").Value = "XXXXX"
            .all("XXXX").click
         End With
      ' en effet quand les éléments sont une balise form il se peut que ca soit difficile le mieux c'est d'utiliser le ".all"
    End With
    End Sub
    Au plaisir
    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 averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Par défaut
    Rebonjour,

    Désolé pour le temps de réponse et merci pour la réponse.

    J'ai essayé la solution proposée mais sans résultat. J'ai essayé de tâtonner et de me renseigner sur le sujet. Ce qui est bizarre, c'est vraiment le submit qui fonctionne pas. Sur ma page, cela mets nom d'utilisateur et mot de passe inconnu. J'ai essayé de mettre une instruction wait pour être sûr que la page était bien chargée mais cela ne fonctionne pas non plus.

    Puis j'ai trouvé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="cmd" value="login">
    J'ai essayé de clicker ce bouton mais rien ne se passe.

    Des idées?

    Merci encore

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 926
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 926
    Par défaut
    Salut

    Plutôt que de cliquer dessus essai plutôt de saisir ton loggin dedans. Il est possible que ce soit un composant intermédiaire placé la pour éviter les saisies automatique.
    Ainsi lors d'une saisie manuelle, par exemple sur l’événement "exit" du champs où l'utilisateur tape son login, la valeur du champs est transmise à ce champs caché.
    Lors d'une saisie automatique, le "exit" n'est pas déclenché et donc le login n'est pas transmis, donc si ensuite le code de validation login/MdP prend en compte le champs caché...
    Vérifie que la même démarche n'existe pas pour le MdP.

    Tout ça peut se vérifier en scrutant le code source mais il faut savoir où aller chercher, sans avoir accès à la page il est plus difficile de trouver les subtilités pour t'aider

    Tu peux aller faire un tour sur ce tutoriel qui pourra peut-être t'aider dans ta démarche globale.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Par défaut
    Bonjour et merci de la réponse

    Merci également pour le lien, parfois je me demande pourquoi je vais chercher partout des réponses sauf dans les tutos de développez.com

    Ça m'a bien éclairé sur pas mal de choses.

    Pour ta question sur un transfert à une variable cachée, je n'ai rien identifié de tel dans le code. Par contre, je me suis rendu compte que le bouton se connecter avait une ID dynamique.

    Sinon, je comprends bien que c'est pas évident de m'aider sans la page en question mais premièrement, c'est pas un code que je peux partager (appli web intranet, pas sûr que ce soit le terme adéquat). Mais surtout, je préfère avoir des pistes à explorer dans un premier temps pour résoudre mon problème.

    Encore merci, je vais continuer de fouiller et je reviens vers vous en cas de blocage.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Par défaut
    Bon retour rapide finalement.

    Je n'avais pas vu que le mot de passe était "converti" en md5 avant le submit. Après conversion, tout fonctionne impec.

    Merci encore, le tutoriel m'a ouvert plein de possibilités intéressantes du coup.

  7. #7
    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
    bonjour
    <input type="hidden" name="cmd" value="login">
    c'est un peu comme la page Outlook ou il a 2 object dont 1 caché pour le login et le password

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with .document
    .all("cmd").value=monpseudo
    'idem pour le password 
    end with
    attention aussi a ce que la page web n'est pas un script anti robot au quel cas il te sera impossible de gérer ca par vba si ce n'est qu'avec des sendkey(solution bien contraignante et pas toujours sure )
    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

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Par défaut
    Désolé, je ne suis pas sûr de bien comprendre mais c'est certainement dû au fait que vous avez pas accès au code source.

    J'ai réussis à me connecter automatiquement au final en utilisant :

    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
    Sub ie_open()
     
    Dim Mdp As String
    Dim IE As InternetExplorer
    Set IE = New InternetExplorer
    Dim myElem As Object
     
     
    With IE
        .navigate "mon adresse"
        .Visible = True
        Do:  DoEvents: Loop While .readyState <> 4 Or IE.Busy
        Set myElem = IE.document.getElementById("login")
        If myElem Is Nothing Then
            Msgbox("Déjà connecté")   
        Else 
            Mdp = MD5Hash("mon mot de passe")
     
            Do:  DoEvents: Loop While .readyState <> 4 Or IE.Busy
            With .document
                .forms("XXXX").elements("login").Value = "mon login"
                .forms("XXXX").elements("password").Value = Mdp
                .forms("XXXX").submit
            End With
        End If
    End With
     
     
     
    End Sub
    Je suis conscient que ce n'est pas très propre comme code, je pense notamment à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Do:  DoEvents: Loop While .readyState <> 4 Or IE.Busy
        Set myElem = IE.document.getElementById("login")
    J'aimerais bien procéder autrement mais je ne vois pas comment faire

    De plus, j'aimerais éviter le MsgBox et j'avais pensé utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not myElem Is Nothing Then
    mais pour le coup, ça ne fonctionne pas :s

    Pour cette ligne là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="cmd" value="login">
    je ne sais pas comment l'interpréter. J'ai essayé de faire le .all("cmd").value = mon login mais sans succès.

    Merci

  9. #9
    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
    je ne vois pas ce qu'il y a de pas très propre dans ces deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Do:  DoEvents: Loop While .readyState <> 4 Or IE.Busy
        Set myElem = IE.document.getElementById("login")
    au contraire même
    au moins ta boucle d'attente est complete (readystate /busy)
    et la fonction getelementbyid il n'y a pas mieux

    c'est donc bien "login" to élément pas "cmd"
    ca n'est donc pas celui la
    [CODEhtml]<input type="hidden" name="cmd" value="login">
    [/CODE]
    tu aurais pu faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     IE.document.getElementById("login").value="tonpseudo"
    sinon c'est clair et propre
    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

  10. #10
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 926
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 926
    Par défaut
    Salut

    Si tu regardes sur le tuto, j'utilise une procédure WaitIE (elle ne fait pas référence au Busy mais ça s'implémente facilement.
    L'avantage d'utiliser la procédure WaitIE apparait lorsque tu à plusieurs changement de page à faire dans ton code, ainsi au lieu de répéter x fois la boucle dans ton code, il te suffit d'une ligne "WaitIE IE".

    Pour les Nom d'éléments dynamiques, au cas ou tu ne l'ai pas vu, ce cas est traité dans le tuto.

    Bon développement

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  11. #11
    Candidat au Club
    Homme Profil pro
    Pilote de Ligne
    Inscrit en
    Février 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Pilote de Ligne
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2022
    Messages : 3
    Par défaut Problèmes WaitIE
    Bonjour,

    En lisant votre conversation, j'ai essayé de remplacer les boucles par le WaitIE IE mais sans résultats.
    Le msg d'erreur
    Erreur de compilation : Sub ou Function non définie
    apparait.

    Savez vous comment procéder ?

    Voici une partie du 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
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim InputLoginTexte As HTMLInputElement
     
    Dim IEDoc2 As HTMLDocument
    Dim InputPasswordTexte As HTMLInputElement
     
    Dim IEDoc3 As HTMLDocument
    Dim InputLoginButton As HTMLInputElement
     
       IE.Navigate "https://www.chronopost.fr/fr#/step-home"
       IE.Visible = True
     
       WaitIE IE
     
       Set IEDoc = IE.document
       Set InputLoginTexte = IEDoc.all("login")
       InputLoginTexte.Value = "id"
     
       WaitIE IE
     
       Set IEDoc2 = IE.document
       Set InputPasswordTexte = IEDoc2.all("pass")
       InputPasswordTexte.Value = "mdp"
    merci beaucoup de votre aide :D

  12. #12
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 926
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 926
    Par défaut
    Salut

    Il faut ajouter le code de la procédure WaitIe dans un module de code par exemple.
    Tu auras plus d'informations en suivant le tutoriel... il n'est pas vraiment actuel mais ça te donner quand même quelques bases.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. [Débutant] connecter une page web de mon domaine a l'API Resident Advisor
    Par WilliamWiLD dans le forum ASP.NET
    Réponses: 1
    Dernier message: 06/07/2015, 10h26
  2. Comment savoir si on est connecté à une page web dans IE
    Par pierrotm777 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/01/2011, 14h43
  3. Créer une tentative de Connection a une page WEB
    Par parp1 dans le forum Réseau/Web
    Réponses: 6
    Dernier message: 10/03/2007, 14h44
  4. Confirmer une fermeture de session d'une page Web en VBA?
    Par pegase33 dans le forum Général VBA
    Réponses: 2
    Dernier message: 05/09/2006, 15h42
  5. application qui connecte sur une page web
    Par spoolz dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 14/04/2004, 10h47

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