2017-09-19 29 views
1

Wir erhalten E-Mails mit Links zu Dokumenten, genauer gesagt Links zu Webseiten, die Schaltflächen enthalten, auf die wir klicken, um Dokumente herunterzuladen. Ich möchte dies unter Office 2016, IE 11 und Windows 7 Enterprise automatisieren. Ich bin soweit gekommen.VBA/IE Wie komme ich an die Dateispeicheraufforderung?

screen shot with download button and IE prompt

In VBA, habe ich Verweise auf Microsoft HTML Object und Internet Bibliotheken steuert. Ich lade die Seite, suche das Button-Steuerelement auf der Seite und gebe die Klick-Methode der Schaltfläche aus. Dann bekomme ich die Aufforderung, die Sie oben sehen. Ich möchte speichern als ... das heißt, jede heruntergeladene Datei wird in ein bestimmtes Verzeichnis gehen. Wie würdest du das machen?

EDIT: Die URL zu der Datei ist nicht in der Quelle der Webseite enthalten. Der Code für den Download-Button ist dies:

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

Die Aufforderung ist nicht Teil der Webseite, so kann ich nicht HTML verwenden Sie die Schaltfläche zu finden. Ich konnte SendKeys verwenden (nicht ideal), aber selbst dann konnte ich nur Alt-S zum Speichern senden. Gibt es eine Möglichkeit, virtuell auf den Abwärtspfeil zu klicken, um die Option "Speichern unter" anzuzeigen? Aber wenn ich das mache, wie gebe ich den Speicherort der Datei ein? Muss ich das Dialogfeld "Speichern unter" irgendwie steuern?

Angenommen, ich kann SendKeys verwenden, um ein Alt-S zu senden, kurz bevor ich das tue, könnte ich den Registrierungsschlüssel ändern, der den Standard-Download-Speicherort enthält. Aber das würde bedeuten, Hunderte von Malen am Tag in die Registry zu schreiben. Hat das Konsequenzen? Beschädige ich das Register?

EDIT: Ich nehme an, wenn IE automatisch die Datei heruntergeladen haben, dass mein Problem zu lösen wäre Weitere Forschung entdeckt, dass die Option ohne Aufforderungen zum Herunterladen seit IE 10.

+0

enthält die click-Methode der Schaltfläche einen Link zu der Datei? – jsotola

+0

Danke. Es tut nicht. Ich habe meine Frage aktualisiert, um dies zu berücksichtigen. – RobertSF

+1

enthält die Webseite identifizierbare Daten, die hier manuell eingegeben werden können? ... https://eservices.truecertify.com .... oder hierhin geschickt? ... https://eservices.truecertify.com/Home/NoCaptcha – jsotola

Antwort

1

entfernt Da Sie die URL des haben Seite Sie haben so ziemlich alles, was Sie brauchen, um die Datei zu bekommen, Teil des Posts hat einen Versions-Param, der nicht in der Original-URL enthalten zu sein scheint. Kurz gesagt, analysiere die Download-Schaltfläche url, um die DocumentLocator ID und den PublicKey zu erhalten. Sie können auch den HTML-Code analysieren, der alle Informationen, DocLocID, Version und Key enthält.

dies ist die HTML-Quelle der Form in https://eservices.truecertify.com/?loc=1DC-IAJJJ4-AE58564C&key=Asbg

das ist, wo Sie die Daten bekommen die endgültige URL-Zeichenfolge

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> 

zu montieren.

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, ich hatte keine Ahnung, dass die Teile der eigentlichen Datei-URL in versteckten Feldern im Formular selbst liegen würden. Ich dachte, das Formular würde posten, und dann Code auf dem Backend würde herausfinden, welche Datei an den Browser zu schieben. – RobertSF

Verwandte Themen