2017-09-19 8 views
1

Nous recevons des courriels contenant des liens vers des documents ou, plus précisément, des liens vers des pages Web contenant des boutons sur lesquels nous cliquons pour télécharger des documents. Je veux automatiser cela sous Office 2016, IE 11 et Windows 7 Enterprise. Je suis allé aussi loin.VBA/IE Comment faire pour récupérer l'invite de sauvegarde de fichier?

screen shot with download button and IE prompt

Dans VBA, je mis les références à l'objet Microsoft HTML et Internet Controls bibliothèques. Je charge la page, localise le contrôle de bouton sur la page et émets la méthode de clic du bouton. Ensuite, je reçois l'invite que vous voyez ci-dessus. Je veux enregistrer comme ... c'est-à-dire que chaque fichier téléchargé ira dans un répertoire particulier. Comment feriez-vous cela?

EDIT: L'URL du fichier ne figure pas dans la source de la page Web. Le code pour le bouton Download est la suivante:

<form action="/Home/NoCaptcha" method="post"> 
    <input type="submit" class="btn btn-primary btn-lg" value="Download" style="margin-top: 40px;" /> 
</form> 

L'invite ne fait pas partie de la page Web, donc je ne peux pas utiliser le langage HTML pour trouver le bouton. Je pourrais utiliser SendKeys (pas idéal), mais même alors, je pouvais seulement envoyer Alt-S à enregistrer. Est-il possible de cliquer virtuellement sur la flèche vers le bas pour exposer l'option Enregistrer sous? Mais si je fais cela, comment puis-je entrer l'emplacement du fichier? Devrais-je contrôler la boîte de dialogue Enregistrer sous?

En supposant que je puisse utiliser SendKeys pour envoyer un Alt-S, juste avant cela, je pourrais changer la clé de registre qui contient l'emplacement de téléchargement par défaut. Mais cela impliquerait d'écrire au registre des centaines de fois par jour. Y a-t-il des conséquences à cela? Dois-je risquer de corrompre le registre?

EDIT: Je suppose que si IE automatiquement téléchargé le fichier, cela résoudrait mon problème trop Des recherches plus approfondies que révèle la possibilité de télécharger sans invites a été supprimée depuis IE 10.

+0

La méthode de clic du bouton contient-elle un lien vers le fichier? – jsotola

+0

Merci. Ce ne est pas. J'ai mis à jour ma question pour refléter cela. – RobertSF

+1

Est-ce que la page Web contient des données identifiables qui peuvent être entrées manuellement ici? ... https://eservices.truecertify.com .... ou envoyé à ici? ... https://eservices.truecertify.com/Home/NoCaptcha – jsotola

Répondre

1

Puisque vous avez l'URL du page que vous avez à peu près tout ce dont vous avez besoin pour obtenir le fichier, partie de la publication a un paramètre de version qui ne semble pas être inclus dans l'URL d'origine. Donc, en bref analyser l'URL du bouton de téléchargement pour obtenir l'ID DocumentLocator et la clé publique. Vous pouvez également analyser le code HTML qui contient toutes les informations, DocLocID, Version et Key.

c'est la source HTML de la forme https://eservices.truecertify.com/?loc=1DC-IAJJJ4-AE58564C&key=Asbg

c'est là que vous obtenez les données pour assembler la chaîne URL finale

https://eservices.truecertify.com/Home/NoCaptcha?BypassCaptcha=True&DocumentLocator=1DC-IAJJJ4-AE58564C&PublicKey=Asbg&VersionNumber=Version+3.0.0.3

<form action="/Home/NoCaptcha" method="post"> 
    <input type="submit" class="btn btn-primary btn-lg" value="Download" style="margin-top: 40px;"> 
    <input data-val="true" data-val-required="The BypassCaptcha field is required." id="BypassCaptcha" name="BypassCaptcha" type="hidden" value="True"> 
    <input data-val="true" data-val-required="The DocumentLocator field is required." id="DocumentLocator" name="DocumentLocator" type="hidden" value="1DC-IAJJJ4-AE58564C"> 
    <input data-val="true" data-val-required="The PublicKey field is required." id="PublicKey" name="PublicKey" type="hidden" value="Asbg"> 
    <input id="VersionNumber" name="VersionNumber" type="hidden" value="Version 3.0.0.3"> 
</form> 

.

Sub TestMe() 
'URL of download button 
'https://eservices.truecertify.com/?loc=1DC-IAJJJ4-AE58564C&key=Asbg 
'within the loc is the document locator ID, the key is the public key, and you will need to check to see if the version changes 
'the Posted URL 
'BypassCaptcha=True&DocumentLocator=1DC-IAJJJ4-AE58564C&PublicKey=Asbg&VersionNumber=Version+3.0.0.3 
Dim sURL As String 
sURL = "https://eservices.truecertify.com/Home/NoCaptcha?BypassCaptcha=True&DocumentLocator=1DC-IAJJJ4-AE58564C&PublicKey=Asbg&VersionNumber=Version+3.0.0.3" 

SavePDFFile sURL 
End Sub 

Sub SavePDFFile(myURL As String) 
Dim savePath As String 
Dim WinHttpReq As Object 
savePath = "C:\" 
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP") 
'I used get instead of post 
WinHttpReq.Open "GET", myURL, False 
WinHttpReq.send 

    If WinHttpReq.Status = 200 Then 
     Set oStream = CreateObject("ADODB.Stream") 
     oStream.Open 
     oStream.Type = 1 
     oStream.Write WinHttpReq.responseBody 
     oStream.SaveToFile (savePath & "MyFile.pdf") 
     oStream.Close 
    End If 

End Sub 
+0

Wow, je n'avais aucune idée que les morceaux de l'URL réelle du fichier seraient dans des champs cachés dans le formulaire lui-même. Je pensais que le formulaire afficherait, et puis le code sur le backend déterminerait quel fichier à pousser vers le navigateur. – RobertSF