Ouvrir une page HTML avec mot de passe depuis Access

Dans l’article Piloter Internet Explorer depuis Access, vous avez vu comment ouvrir une page Web en VBA. La technique devient plus intéressante lorsqu’on doit manipuler le code HTML de la page affichée.

Dans ce qui suit, nous allons voir comment nous connecter à la section privée d’un site Web, en remplissant automatiquement les identifiant (login) et mot de passe d’un formulaire HTML.

Etape 1 : décrypter le formulaire d’identification

Le formulaire d’identification est la portion de page HTML qui vous demande votre nom (identifiant ou login), et votre mot de passe. Un bouton permet ensuite d’expédier ces informations vers une page ou un script de traitement, qui vérifie si les informations fournies sont correctes. Cette page de traitement est appelée « l’action » en HTML.

Pour atteindre notre objectif, il faut donc connaître :

  • L’adresse (ou URL) de la page HTML qui contient le formulaire d’identification.
  • L’action du formulaire, dans la page HTML.
  • Le nom du champ Identifiant.
  • Le nom du champ Mot de passe.

Je suppose que vous connaissez l’URL de la page HTML de connexion. Pour obtenir les trois autres informations :

  1. Affichez la page de connexion dans votre navigateur.
  2. Cliquez sur la page du bouton droit, et choisissez Afficher la source (ou Code source de la page, sous Firefox).
  3. Faites un Edition / Rechercher (ou CTRL + F).
  4. Cherchez une portion de HTML qui démarre par <form (en majuscules ou minuscules, ça n’a pas d’importance).
    Le formulaire complet est obligatoirement compris entre des balises <form ...> et </form>.
  5. La balise d’ouverture du formulaire s’écrit sous cette forme :
    <form action="xyz.html" method="post">
    Notez l’action (ici : xyz.html, mais ça peut être n’importe quoi d’autre !). Vous avez votre première information.
  6. Quelque part entre les balises <form> et </form> doivent se trouver les champs de saisie. Ce sont des balises de la forme :
    <input type="..." name="...">
    Les 2 champs de saisie qui nous intéressent peuvent par exemple s’écrire :
    <input type="text" name="username">
    <input type="password" name="password">
    Notez les 2 attributs name (ici : username et password). Vous avez vos 2 autres informations !

Attention
Il peut y avoir plusieurs formulaires sur une page Web. Repérez bien sûr le bon !

Etape 2 : le code VBA

On peut maintenant passer à Access…

  1. Ouvrez votre base de données et ajoutez-y un module standard.
  2. Recopiez tout ce qui suit, tel quel, dans le module :

Le programme est composé :

  • D’un type de données AuthFormDef qui devrait simplifier la description du formulaire et le passage de paramètres.
  • D’une fonction ConnexionIE qui gère la connexion proprement dite.
Important
L’exemple de code ci-dessus fait appel à la bibliothèque MSHTML (Microsoft HTML Object Library). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.Pour plus de détails sur les références, consultez cette page.

Note
Le remplissage des champs du formulaire est moyennement élégant 😉 mais après quelques tests, il semble que l’utilisation d’une variable comme indice du tableau elements pose problème. D’où le hack…

Etape 3 : tester le code

Voici un autre petit programme, que vous ajoutez dans votre module, et qui va permettre de lancer votre connexion proprement dite :

Comme vous le voyez, j’utilise la structure AuthFormDef pour renseigner tous les paramètres du formulaire à remplir :

  • URL
    L’adresse (URL) où se trouve le formulaire sur le Web.
  • FormAction
    L’action du formulaire, que vous avez repérée plus tôt, et qui permet de trouver le formulaire dans la page Web.
  • UserField
    Le nom du champ Identifiant.
  • PasswordField
    Le nom du champ Mot de passe.
  • UserValue
    La valeur du champ Identifiant (votre identifiant à vous !)
  • PasswordValue
    La valeur du champ Mot de passe (votre mot de passe !).

Il ne reste plus qu’à appeler la fonction ConnexionIE, en lui transmettant la structure. Cette fonction renvoie True si la connexion s’est bien passée, et False sinon.

Attention
Le programme peut ne pas marcher sur tous les formulaires d’identification. Tout dépend de la façon dont ils sont traités et validés.

Vous aimerez aussi...

12 réponses

  1. EVD dit :

    Merci pour cet excellent article, présenté brillamment du point de vue pédagogique.
    En revanche, est-il possible de l’appliquer de façon différente, soit avec Firefox — j’arrive à ouvrir la page voulue dans FF — à partir d’Excel.
    Mais je me heurte à l’accès des champs (dont je connais les noms et que j’ouvre correctement en IE).
    Merci d’avance de votre aide.
    Erik

    • Hervé Inisan dit :

      Merci pour le retour. 🙂

      Le problème de Firefox (dans ce scénario précis ; sinon c’est un excellent navigateur) est qu’il n’est pas programmable à distance en VBA (à ma connaissance). C’est pour cette raison que j’utilise un objet « InternetExplorer.Application ».

      Il y a aurait une autre approche (traitée dans les articles sur RSS) qui consisterait à passer par la bibliothèque ServerXMLHTTP. L’approche est de plus bas niveau, mais justement, elle permet de travailler sur les échanges de pures données. Ça reste une bibliothèque Microsoft. 😉

  2. waesberghe dit :

    J’ai testé l’ouverture de la page html avec mot de passe depuis Access: super!
    Je voudrais aller plus loin, mais je ne sais pas comment faire. En fait, je voudrais pouvoir lancer automatiquement d’autres actions consécutives à l’ouverture de cette page.
    Mon cas précis, c’est pouvoir lancer l’importation d’un fichier csv dans mes contacts Gmail. Le fichier est sur mon disque dur, mais il me manque les maillons suivants: cliquer sur le bouton « Plus » sur la page Gmail, puis « Importer », sélectionner le bon fichier sur le disque, et valider.
    Quelqu’un a une bonne idée? Ou bien cela peut-il faire l’objet d’un nouveau tutoriel?

    • Hervé Inisan dit :

      Ce n’est effectivement pas si simple : il y a une succession de pages/formulaires à valider en séquence, et reproduire ce type de séquence n’est sans doute pas une bonne approche (on est très dépendant de l’interface graphique). Je serais plus tenté par la Google Contacts API. Ça demande aussi de la mise en place, mais c’est plus « carré ».

  3. Hervé Inisan dit :

    Vincent > Je n’ai pas testé sur IE10, mais au cas où : à quel endroit est-ce que ça plante ?

    Est-ce que ça peut venir d’un problème de références ?

  4. Vincent dit :

    Bonjour Hervé…
    J.utilise depuis un moment cette méthode sans soucis…. Merci.
    Par contre en passant sur ie10 j ai des erreurs et ça ne fonctionne plus… J ai cherché !
    Sans trouver..
    Aurais-tu des idées?
    J ai downgradé a ie9 mais il plante Souvent depuis pour pas grand choses…
    Merci.
    Vincent.

  5. Hervé Inisan dit :

    matt76 > Les infos sont disponibles dans le code source de la page dont tu parles (les champs, par exemple, s’appellent user_name et pwd_field). Maintenant :

    1. Comme indiqué dans mon article, la méthode donnée ici ne marche pas sur tous les modes d’authentification.
    2. J’espère qu’on parle de la même chose 😉 : il s’agit d’accéder à un document via Access ou VBA, pas de trouver des mots de passe. Le code ne marche que si on connait déjà les identifiants sur le site.
  6. matt76 dit :

    Bonjour,
    je suis étudiant et j’ai suivi votre tuto pour accéder a des pages sécuriser d’un site internet, mais rien n’y fait, je n’arrive pas a trouver dans le code les infos !
    voila le site en question: http://muse.jhu.edu/books/978276051
    c’est pour accéder a des cours d’hydraulique. quelqu’un pourrais m’aider ?
    cordialement, matthieu

  7. Hervé Inisan dit :

    lakhdar16 > C’est un peu compliqué de répondre dans ce commentaire, mais j’ai prévu une série d’articles qui tournent autour du sujet. Voir notamment la série autour des flux RSS, et l’article sur le transfert de données via HTTP (c’est un peu dans l’autre  sens, il ne s’agit pas de lecture mais d’envoi de données, mais les techniques sont les mêmes).

  8. lakhdar16 dit :

    Bonjour,
    comment Ouvrir une page HTML avec mot de passe depuis Access et atteindre une rubrique précisée ou faire des extractions par exemple. avec le même code. merci

  9. Hervé Inisan dit :

    @lahlou La procédure d’identification, en PHP, demande un peu de mise en place. Il faut un hébergement PHP, une base de données – souvent MySQL dans ce cas – pour stocker les utilisateurs (et leur mot de passe crypté), un formulaire de saisie et un bout de code PHP pour récupérer les données du formulaires, les nettoyer, les vérifier par rapport à la base de données. Si la combinaison utilisateur+mot de passe existe dans la base de données, l’utilisateur est considéré comme identifié (et dans ce cas, on peut passer par des cookies ou des sessions PHP pour mémoriser cet état temporaire) ; sinon, l’identification échoue.

    Comme ce blog est plutôt orienté Access, je n’ai pas le temps d’en dire plus. Dans l’article, je me place du côté « accès à la section privée du site », pas du côté « mise en place de la partie privée ». Par contre, une recherche Google sur le sujet devrait te donner d’autres sites qui en parlent en détail. Bons tests !

  10. lahlou dit :

    Bonjour,

    je m’excuse, je souhaiterai savoir comment on crée le fichier identification.php et surtout avec quel logiciel.

    Si vous avez un petit tutorial à me présenter, je vous remercie infiniment.

    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *