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 :

Récupération de données sur site web avec mot de passe [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 113
    Par défaut Récupération de données sur site web avec mot de passe
    Bonsoir à tous,

    Je suis encore novice en VBA et je m'en sors difficilement avec tout ce que je lis sur le web. J'espère que vous pourrez m'aider.

    Je souhaite récupérer des données sur une page web accessible par login + mot de passe puis par l'outil de recherche du site.

    Je sais récupérer les infos si je me suis connecté au préalable. Pour cela j'utilise le code suivant :
    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
    Sub Importer()
     
        Sheets.Add
        ActiveSheet.Name = "TMP_IMPORT"
     
        With Sheets("TMP_IMPORT").QueryTables.Add( _
             Connection:="URL;http://www.xxx.com/recherche.php?search=VVH31A3120", _
             Destination:=Sheets("TMP_IMPORT").Range("$A$1"))
            .Name = "recherche.php?search=VVH31A3120_1"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = False
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlEntirePage
            .WebFormatting = xlWebFormattingAll
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
        End With
     
        compteur = 0
     
        For ligne = 1 To 1000
     
            If Left(Sheets("TMP_IMPORT").Cells(ligne, 6), 14) = "Valeur estimée" Then
                compteur = compteur + 1
                Sheets("Fours").Cells(compteur, 1) = Sheets("TMP_IMPORT").Cells(ligne + 1, 6)
     
                If compteur = 1 Then Exit For
            End If
     
        Next
     
        Application.DisplayAlerts = False
        Sheets("TMP_IMPORT").Delete
        Application.DisplayAlerts = True
     
    End Sub
    Mais si je veux exécuter la macro sans être connecté au préalable, je dois me connecter via une macro.
    J'ai tenté ceci (j'ai juste caché le login et le mot de passe) :
    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
    Sub ConnexionAMonSite()
    Const READYSTATE_COMPLETE = 4
    Dim IE
    Dim elementHtml As Object
    Set IE = CreateObject("internetExplorer.Application") 'ouvre internet explorer
    IE.Visible = True
    With IE
    .navigate "http://www.xxx.com/" 'va sur la page du site
    Do Until .readyState = READYSTATE_COMPLETE 'on attend jusqu’à ce que la page soit chargée
    DoEvents
    Loop
    End With
    Set elementHtml = IE.document.getElementById("compte") 'on sélectionne une case du formulaire
    elementHtml.Value = "mon login" 'on donne une valeur à cette case
     
    Set elementHtml = IE.document.getElementById("password") 'on sélectionne une case du formulaire
    elementHtml.Value = "mon mot de passe" 'on donne une valeur à cette case
     
    Set ObjectIE = IE.document.getElementById("submit") 'on sélectionne un bouton
    ObjectIE.Click 'on clique sur ce bouton
     
    End Sub
    J'arrive ici sur une erreur d'exécution '13' Incompatibilité de type
    Quel est le problème et comment le corriger ?

    Merci d'avance pour votre aide

  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 heu
    Bonjour ou bonne nuit comme tu veux

    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
    ub ConnexionAMonSite()
    Const READYSTATE_COMPLETE = 4
    Dim IE as object
    Dim elementHtml
    Set IE = CreateObject("internetExplorer.Application") 'ouvre internet explorer
    IE.Visible = True
    With IE
    .navigate "http://www.gpdis.com/" 'va sur la page du site
    Do Until .readyState = READYSTATE_COMPLETE 'on attend jusqu’à ce que la page soit chargée
    DoEvents
    Loop
    End With
    Set elementHtml = IE.document.getElementById("compte") 'on sélectionne une case du formulaire
    elementHtml.Value = "truc" 'on donne une valeur à cette case
     
    Set elementHtml = IE.document.getElementById("password") 'on sélectionne une case du formulaire
    elementHtml.Value = "machin" 'on donne une valeur à cette case
     
    'le bouton pour valider n'a pas de Id mais une classe
    et getelementby....... recherche tout les element en fonction de l'argument (id,classname,tagname)donc il faut bien verifier si tu en a pas plusieur au quelcas il faut le preciser avec l'argument suplementaireapres son ici en l'occurence on veut le   er  sce sera donc (0)
    '**********************************************************
    'soit comme ceci 
    Set ObjectIE = IE.document.getElementsbyclassname("btn btn-darkblue mt10")(0) 'on sélectionne un bouton
    ObjectIE.Click 'on clique sur ce bouton
     End Sub
    soit comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set ObjectIE = IE.document.getElementsbyclassname("btn btn-darkblue mt10") 'on sélectionne un bouton
    ObjectIE(0).Click 'on clique sur ce bouton
    regarde l'arboresence du code sur la capture d'ecran
    bonne fin de nuit
    Images attachées Images attachées  
    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
    Invité
    Invité(e)
    Par défaut Bonjour,
    pour ce qui me concerne, je n'utilise pas d'objet vb quand il s'agit de renseigner des valeurs dans une page web, mais j'injecte du JAVASCRIPT dans la page IE.
    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
    Sub ConnexionAMonSite()
     On Error Resume Next
     'Déclaration des variables
    Dim IE As Object ' InternetExplorer
    'CHARGEMENT GENERAL
    Set IE = CreateObject("InternetExplorer.application")
       'Chargement d'une page Web
       IE.Visible = True
    IE.navigate "http://www.gpdis.com/"
    WaitIE IE
     IE.Document.parentWindow.execScript "javascript:document.leform.compte.value='Login';"
    IE.Document.parentWindow.execScript "javascript:document.leform.TxtPasse.value='TxtPasse';"
    IE.Document.parentWindow.execScript "javascript:document.leform.submit();"
    End Sub
     
    'Procèdure placée dans un module standard pour vérifier le chargement total de la page.
    Sub WaitIE(IE)
       'On boucle tant que la page n'est p'AS totalement chargée
       Do Until IE.readyState = 4
          DoEvents
       Loop
    End Sub

  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
    bonjour durupt

    pas mal mais c'est pas toujours possible tu te doute bien pourquoi

    a quoi sert le en haut de sub ,ne serait ce pas pour cette même raison
    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
    Invité
    Invité(e)
    Par défaut
    bonjour Patrick ça vient d'une source de qq1 du forum même pb que j'ai adapté pour le gérer en javascript j'ai pas fait gaff

    en ce qui concerne l'infaisabilité dans certain cas tu as raison mais de toute façon tout passe par l'analyse de la source de la page déjà pour identifier le nom des objets <Form name=><input type name>
    Dernière modification par AlainTech ; 24/07/2014 à 21h05. Motif: Suppression de la citation inutile

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    j'aime aussi l'idée d'injecter du Java script …

    Sinon de manière classique, en analysant la source, les trois zones étant du même groupe,
    tout en se passant d'inutiles variables objets, pour le bouton sans ID, il suffit d'indiquer son index :

    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
    Sub Demo()
        With CreateObject("InternetExplorer.Application")
            .Visible = True
            .Navigate "http://www.gpdis.com"
            Do Until .readyState = 4 And .busy = False:  DoEvents:  Loop
     
            With .document
                With .getElementsByTagName("input")
                      .Item("compte").Value = "login"
                    .Item("password").Value = "mot de passe"
                    .Item(3).Click
                End With
     
                Do: Loop Until .readyState = "complete"
    ' suite du traitement
            End With
     
            .Quit
        End With
        End
    End Sub

    _______________ _____________________________________ _____________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

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

Discussions similaires

  1. [AC-2003] Base de données sur le Web avec MySQL et Access ?
    Par gwenagan dans le forum Access
    Réponses: 3
    Dernier message: 17/04/2015, 07h49
  2. Réponses: 1
    Dernier message: 15/11/2011, 10h03
  3. [XL-2003] importer données du web avec mot de passe
    Par kokoVBA dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/10/2009, 18h26
  4. protection d'une page web avec mot de passe
    Par chimene dans le forum ASP.NET
    Réponses: 3
    Dernier message: 09/11/2008, 13h48

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