Automatiser un téléchargement sous IE
-
mardi 6 septembre 2011 15:23
Bonjour,
Je cherche via VBA à automatiser un téléchargement de fichier sous IE. Je lance IE, je soumets mon url de login, j'attends "ready_state", je soumets l'url de téléchargement.
A ce stade un popup m'est renvoyé me demandant "ouvrir" ou "enregistrer" ou "annuler". Je voudrais me substituer à la réponse manuelle pour enregistrer puis sur le popup qui doit s'ouvrir en suivant donner le nom du fichier pour l'enregistrement.
Problème : lorsque le popup arrive IE tourne encore donc on n'est pas en ready_state. Il faut une boucle qui surveille l'arrivée du popup, puis qui simule l'action "enregistrer" (sendkeys peut-être ?). Ensuite un même genre de boucle pour faire le save as sur la box qui s'affiche. J'ai trouvé des infos sur la création de dialogbox qu'on propose à l'utilisateur, mais rien sur une réponse à un dialogbox à la place de l'utilisateur.
Comment faire pour tester l'apparition de ces dialogbox et simuler la réponse de l'utilisateur ?
Merci d'avance.
Mon code pour le début de la proc est de ce type :
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "url de login"
Do Until IE.readyState = READYSTATE_COMPLETE
DoEvents
Loop 'attend la fin du chargement de la pageIE.navigate "url du téléchargement"
... et après gestion de l'attente du popup et réponse ???
Toutes les réponses
-
mardi 6 septembre 2011 13:55
Bonjour,
Je cherche via VBA à automatiser un téléchargement de fichier sous IE. Je lance IE, je soumets mon url de login, j'attends "ready_state", je soumets l'url de téléchargement.
A ce stade un popup m'est renvoyé me demandant "ouvrir" ou "enregistrer" ou "annuler". Je voudrais me substituer à la réponse manuelle pour enregistrer puis sur le popup qui doit s'ouvrir en suivant donner le nom du fichier pour l'enregistrement.
Problème : lorsque le popup arrive IE tourne encore donc on n'est pas en ready_state. Il faut une boucle qui surveille l'arrivée du popup, puis qui simule l'action "enregistrer" (sendkeys peut-être ?). Ensuite un même genre de boucle pour faire le save as sur la box qui s'affiche. J'ai trouvé des infos sur la création de dialogbox qu'on propose à l'utilisateur, mais rien sur une réponse à un dialogbox à la place de l'utilisateur.
Comment faire pour tester l'apparition de ces dialogbox et simuler la réponse de l'utilisateur ?
Merci d'avance.
Mon code pour le début de la proc est de ce type :
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "url de login"
Do Until IE.readyState = READYSTATE_COMPLETE
DoEvents
Loop 'attend la fin du chargement de la pageIE.navigate "url du téléchargement"
... ???
- Fusionné Ciprian DuduialaOwner mercredi 7 septembre 2011 05:51 thread double
-
mardi 6 septembre 2011 14:53
Bonjour,
Vous etes pas dans le bon forum, ici c'est ce qui concerne Visual Basic .net
il est sur que c'est un langage tres proche du VBA mais les objets, tant a eux, sont très différent, vous aurez plus de chance dans le forum bureautique (version)
A bientôt
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail

-
mardi 6 septembre 2011 15:12Ok merci.
-
mercredi 7 septembre 2011 07:47Bonjour Xavier,On est bien ici sur un forum VBA. Il suffit de parcourir les fils duforum.Cordialement.Daniel
-
mercredi 7 septembre 2011 08:37
Danielco,
- FusionnéCiprian Duduiala<abbr class="affil">Microsoft Contingent Staff</abbr><abbr class="affil">, Propriétaire</abbr>il y a 2 heure(s) et 44 minute(s)thread double
Ce Thread était dans le forum Visual Basic :)
Bonne journée a tous
A bientôt
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail

-
jeudi 8 septembre 2011 06:20
-
jeudi 8 septembre 2011 09:51
-
jeudi 8 septembre 2011 09:54
J'ai essayé application.wait (now + quelques secondes) et sendkeys, mais pas de résultat probant, le sendkeys ne cible apparemment pas le dialogbox.
-
jeudi 8 septembre 2011 15:08
-
jeudi 8 septembre 2011 16:21Merci Isabelle, cela étant, dans mon cas je ne peux pas préciser comme dans l'exemple l'adresse du fichier à télécharger. Je suis donc obligé de mettre en oeuvre un pilotage des dialogbox classiques de téléchargement que me retourne mon lien de download.
-
jeudi 8 septembre 2011 18:48re bonjour zz_top,tu pourrais lister les objets de ta page avec la macro suivante et t'inspirer de ce code pour naviguer sur ta page,Sub ListeDesObjectsPageWeb()'necessite d'activer la reference Microsoft HTML Objects Library'necessite d'activer la reference Microsoft Internet ControlsDim i As Integer, x As Integer, rw As IntegerDim IE As InternetExplorerDim maPageHtml As HTMLDocumentDim Helem As IHTMLElementCollectionDim eTagNameSet IE = CreateObject("internetExplorer.Application")rw = 1Do Until IE.readyState = READYSTATE_COMPLETEDoEventsLoopSet maPageHtml = IE.DocumenteTagName = Array("DIV", "LI", "SPAN", "input")For x = LBound(eTagName) To UBound(eTagName)Set Helem = maPageHtml.getElementsByTagName(eTagName(x))For i = 0 To Helem.Length - 1Range("A" & rw) = iRange("B" & rw) = Helem(i).getAttribute("parentElement")Range("C" & rw) = Helem(i).getAttribute("tagName")Range("D" & rw) = Helem(i).getAttribute("className")Range("E" & rw) = Helem(i).getAttribute("constructor")Range("F" & rw) = Helem(i).getAttribute("id")Range("G" & rw) = Helem(i).getAttribute("name")Range("H" & rw) = Helem(i).getAttribute("value")Range("I" & rw) = Helem(i).getAttribute("type")rw = rw + 1NextNextIE.QuitSet Helem = NothingSet maPageHtml = NothingSet IE = NothingMsgBox "Fin de la recherche"End Sub--isabelleLe 2011-09-08 12:21, zz_top a écrit :> Merci Isabelle, cela étant, dans mon cas je ne peux pas préciser comme dans l'exemple l'adresse du fichier à télécharger. Je suis donc obligé de mettre en oeuvre un pilotage des dialogbox classiques de téléchargement que me retourne mon lien de download.
-
vendredi 9 septembre 2011 13:22
Thanks again Isabelle,
J'ai essayé ta méthode pour lister les objets de la page. Intéressant, mais apparemment la box n'apparait pas.
J'ai cherché dans une autre direction, et j'ai trouvé qqchose qui a tendance à fonctionner (parfois ça bloque sur la box). Ca donne ça :
Set wshShell1 = CreateObject("WScript.Shell")
While Not wshShell1.AppActivate("Téléchargement de fichiers")
DoEvents
bfound = wshShell1.AppActivate("Téléchargement de fichiers")
Wend
If bfound Then wshShell1.SendKeys "{TAB}"
Sleep (1000)
If bfound Then wshShell1.SendKeys "%r"
Sleep (1000)
DoEvents
While Not wshShell1.AppActivate("Enregistrer sous")
DoEvents
bfound = wshShell1.AppActivate("Enregistrer sous")
Wend
bfound = wshShell1.AppActivate("Enregistrer sous")
If bfound Then wshShell1.SendKeys "%N"
Sleep (1000)
If bfound Then wshShell1.SendKeys "Mon emplacement de fichier sur disque"
Sleep (1000)
If bfound Then wshShell1.SendKeys "%E"
Sleep (1000)
wshShell1.SendKeys "%O"
Sleep (1000)
Il faut au préalable faire un declare de la proc "Sleep". Certains "if bfound Then" sont sans doute superflus dans ce code et les tempo doivent pouvoir être réduites.C'est un peu artisanal, ça se fonde sur les noms des box ou sur des timer, mais je n'ai pas trouvé mieux.
Merci de ton aide.
zz_top
- Marqué comme réponse Ciprian DuduialaOwner lundi 12 septembre 2011 06:34
-
lundi 12 septembre 2011 06:34Propriétaire
Bonjour,
Merci d’avoir partagé avec nous la solution trouvée.
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

