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 :

Interagir avec un autre navigateur que IE en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut Interagir avec un autre navigateur que IE en VBA
    bonjour,
    J'utilise depuis 10 ans sur ce très bon tuto pour pouvoir interagir avec des pages web en VBA :
    https://qwazerty.developpez.com/tuto...-et-vba-excel/
    Mais ce tuto s'appuie uniquement sur une interaction avec un objet basé sur Internet Explorer
    Or, avec le temps, de plus en plus de sites web ne fonctionnent plus sur ce navigateur devenu obsolète.
    Par exemple le site d'AXA https://connect.axa.fr
    Existe-t-il des objets VBA permettant de manipuler d'autres navigateurs comme Chrome ou Firefox ?

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    tu peux essayer d'utiliser selenium basic

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Merci pour le tuyau.
    J'ai regardé et ça promet une solution à mon problème mais
    - je n'arrive pas à utiliser avec Firefox. Quand je mets une instruction du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim robot As New WebDriver
    robot.Start "firefox", "https://www.google.fr"
    Firefox s'ouvre mais n'affiche pas la page Google et au bout de quelques secondes une erreur s'affiche
    Firefox failed to open the listening port 127.0.0.1
    J'ai trouvé plusieurs témoignages similaires sur internet mais aucune solution

    - sur chrome je n'ai pas trouvé la solution pour saisir un mot de passe sur un site avec clavier virtuel
    Sur ces sites, il y a un champ destiné à recevoir le mot de passe que l'on remplit en cliquant sur les chiffres du clavier virtuel. Avec IE, j'arrivais à dire à ce champ de prendre la valeur attendue, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim IE As New InternetExplorer
    Dim IHTMLcollection As IHTMLElementCollection
    Dim InputTxtBox As HTMLInputElement
    Dim IEDoc As HTMLDocument
    IE.navigate "https://connect.axa.fr/#/"
    Set IEDoc = IE.document
    Set IHTMLcollection = IEDoc.getElementsByName("inputPassword")
    Set InputTxtBox = IHTMLcollection(0)
    InputTxtBox.Value = "mon-mot-de-passe"  'combinaison de chiffres
    NOTA : le code ci-dessous ne marche plus aujourd'hui parce que AXA ne fonctionne plus avec IE, mais avant, ce code marchait. J'ai mis ce code pour exemple mais vous pouvez le tester avec n'importe quel site avec clavier virtuel qui continue d'accepter IE.

    Avec Selenium, j'ai tenté le code suivant mais visiblement la commande SendKeys ne "remplit" pas le champ 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
     
    Dim robot As New WebDriver
        Dim mdp As Object
     
        robot.Timeouts.ImplicitWait = 8000
        robot.Start "chrome", "https://connect.axa.fr/#/"
        robot.Get "/"
     
        ' Mot de passe
        Set mdp = robot.FindElementById("inputPassword")
        'mdp.Clear - l'instruction provoque un bogue ici
        mdp.SendKeys "mon-mot-de-passe"  'combinaison de chiffres
    Y a-t-il d'autres possibilités que SendKeys pour ce type de champ ? C'est bizarre que l'on puisse interagir avec ce champ dans IE et pas dans Firefox ou chrome

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    en ce qui concerne Firefox cela ne m'étonne pas trop car cela fait 6 ans que SeleniumBasic n'a pas été mis à jour et il y a alors bien un moment il ne fonctionnera plus avec les nouvelles versions des navigateurs et des webdrivers.
    Pour l'autre problème tu peux essayer d'exécuter du javascript pour remplir le champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set MdP = robot.FindElementByName("inputPassword")
    robot.ExecuteScript "arguments[0].value='123456'", MdP
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Bonjour
    Ce code a pour effet de remplir en effet (en tout cas visuellement) le champ "code confidentiel" avec des points (caractères masqués)
    Mais si je clique sur le bouton "Me connecter" pour valider login et mot de passe, il s'affiche la mention "champ obligatoire" sous le champ "code confidentiel".
    En résumé, tout se passe comme si le site n'avait pas associé le mot de passe au champ destiné à le recevoir.

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    ce que tu peux essayer de faire c'est de cliquer le premier bouton du clavier visuel pour initialiser le champ puis d'exécuter le javascript -> la touche tapée dans le champ sera remplacée par ce qui est envoyé par le javascript.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim bouton As Object   
    Set bouton = robot.FindElementByXPath("//button[@class='virtual-keyboard-v2--button ng-scope']")
    bouton.Click
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Bonjour,
    Cette fois la procédure semble aller jusqu'au bout mais le login et le mot de passe ne sont pas reconnus ce qui laisse à penser que le mot de passe n'a pas pris la bonne valeur

    NB : j'ai un pb secondaire c'est que le site affiche une pop up pour accepter ou refuser les cookies. Si je lance la macro sans point d'arrêt, la macro plante au niveau du bouton.click. Si je mets un point d'arrêt sur cette instruction, cela me permet d'acquitter la popup avant de poursuivre la macro qui se déroule alors normalement

  8. #8
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Bonjour,
    N'ayant toujours pas trouvé de solution à ce problème, je me permets de rafraichir un peu le fil.

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    normalement après la saisie d'un mot de passe dans un champ il y a une action à faire : soit cliquer sur un bouton ou taper la touche <entrée> (ou envoyer le code d ' <entrée> dans le champ)
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    A ce stade, ce n'est pas le problème car je clique moi-même sur le bouton "valider" pour être sûr que c'est bien au niveau de la prise en compte du mot de passe que ça coince.
    L'autre problème est toujours de valider automatiquement le formulaire d'autorisation des cookies (ou bien éviter qu'il n'apparaisse). Curieusement, je n'avais pas ce problème avec le code précédent qui fonctionnait avec IE.

    EDIT : j'ai réussi à résoudre le problème de validation avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set MdP = robot.FindElementByName("inputPassword")
    robot.ExecuteScript "arguments[0].value='123456'", MdP
    Set SubmitButton = robot.FindElementById("buttonAuthenticate")
    SubmitButton.Click
    Le dernier problème résiduel est donc l'affranchissement du formulaire d'acceptation des cookies". Une idée ?

  11. #11
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    Pour le deuxième problème, il faut définir pour le robot un répertoire de profil pour qu'il stocke dedans les cookies, le cache, les préférences etc ....
    Exemple pour google chrome . Il faut ajouter des arguments avant le Start du robot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Rem robot.AddArgument "--headless"  ' pour mettre le navigateur en mode invisible
    robot.AddArgument "--user-data-dir=d:\temp\selenium" ' pour pointer vers un profile particulier (enregistre les cookies dedans)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  12. #12
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    OK super, ça marche.
    Maintenant, je cherche à capturer dans une variable le texte situé à l'intérieur d'une balise <script>.
    J'ai dans l'idée que ça commence comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...set toto=robot.FindElementByTag("script")
    Mais pour pouvoir exploiter cela, j'ai besoin d'en savoir plus sur la nature de l'objet renvoyé par FindElementByTag.
    J'aurais pensé que cet objet est un tableau (parce qu'il peut y avoir plusieurs scripts).
    Puis il me faut la propriété de toto qui va me permettre de trouver le texte compris entre <script> et </script> : text, value, attribute...? J'ai essayé plusieurs choses sans trouver.
    Ce qui me fait élargir la question : où peut-on trouver de l'aide sur la syntaxe de la bibliothèque Selenium

  13. #13
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    le problème c'est que le code <script> est interprété par le navigateur et disparaît. Il faut consulter la page source.
    moi je ne répond plus dans cette discussion : cela ne correspond plus au titre initial
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  14. #14
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Je te l'accorde.
    Bon j'ai quand même trouvé la solution donc je la partage, ça pourra servir à d'autres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set toto= robot.FindElementByTag("script")
    monscript = robot.ExecuteScript("return arguments[0].innerHTML", toto)

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

Discussions similaires

  1. [WM24] Forcer champ HTML avec un autre navigateur que le natif
    Par tintin85 dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 02/05/2020, 21h10
  2. [OL-365] [URL] Ouvrir les liens avec un autre navigateur que celui par défaut
    Par upltu dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 16/01/2020, 09h29
  3. Interagir avec d'autre fenetres
    Par Amybond dans le forum Windows
    Réponses: 3
    Dernier message: 27/08/2007, 21h29
  4. Lancer Weblogic avec un autre utilisateur que weblo
    Par ujoodha dans le forum Weblogic
    Réponses: 3
    Dernier message: 08/06/2007, 15h09
  5. Injection avec une autre méthode que le setter.
    Par Tiaps dans le forum Spring
    Réponses: 2
    Dernier message: 22/05/2007, 23h37

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