Verwenden von powershell zum automatisieren Sie Datei-download von Internetseite (weiß die url zur Datei)
Ich automatisieren möchten, einen täglichen download von einem Bericht von unserer Kreditkarte auf der Webseite des Anbieters.
Die Datei wird dynamisch generiert, so dass ich nicht wissen, die tatsächliche URL für die Datei selbst.
Ich bin in der Lage, powershell verwenden, um zu navigieren und die Anmeldung zur web-Seite, und klicken Sie auf den "Download Report" - button. Aber dann "Datei Herunterladen" Dialogfeld, das erscheint, und ich kann nicht herausfinden, wie drücken Sie die Schaltfläche "Speichern" in diesem dialog.
Scheint es, wie meine Optionen sind:
- Irgendwie finden Sie das Fenster, und versuchen Sie, senden von Tastatureingaben
- Irgendwie finden die URL der Datei, wenn das Dialogfeld erscheint, und dann direkt herunterladen.
- Einen Weg finden, deaktivieren Sie "Datei-Download" - box im ie. (legt es in Vertrauenswürdige sites funktionieren nicht)
Ich bin mit:
$ie = New-Object -com "InternetExplorer.Application"
Was würden Sie vorschlagen, ist der beste Ansatz?
Ich würde zunächst sicherstellen, dass Ihr Anbieter nicht bieten irgendeine Art von api-wie es viele tun. Sekunde, wenn Sie die Seite bekommen, welche Maßnahmen im Zusammenhang mit der Schaltfläche, klicken Sie auf ist an einen link eine javascript-Funktion, oder was ich würde davon ausgehen, dass was auch immer der button eventuelle leitet Sie auf die Datei, die Sie suchen.
Keine api für die standard-level. Die Schaltfläche ruft einige javascript, dass nur überprüft die form, dann setzt die Formular Aktion zu 'customReport.tun " und schickt Sie ab. Das ist, wenn die "File Download" Dialogfeld erscheint.
Check-out WebClient msdn.microsoft.com/en-us/library/system.net.webclient.aspx
Keine api für die standard-level. Die Schaltfläche ruft einige javascript, dass nur überprüft die form, dann setzt die Formular Aktion zu 'customReport.tun " und schickt Sie ab. Das ist, wenn die "File Download" Dialogfeld erscheint.
Check-out WebClient msdn.microsoft.com/en-us/library/system.net.webclient.aspx
InformationsquelleAutor PeteShack | 2010-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für diesen Zweck die beste option ist zu Fragen Sie den provider (wenn möglich) zu veröffentlichen einige API.
Zu diesem Zweck senden von Tastatureingaben ist sehr zerbrechlich. Was nach klicken Speichern? Ein Dialogfeld wird geöffnet, und Sie sollten navigieren Sie zu einem Ordner und klicken Sie auf OK. Es bedeutet, dass Sie brauchen, um zu finden, die das Fenster wieder. Und was wenn es ein ähnliches Fenster geöffnet? Wird dein script in der Lage sein zu finden, das richtige Fenster?
(für andere Szenarien, in denen Sie benötigen, um zu verbergen/zeigen/finden, windows-und senden Sie Tastenanschläge, die ich empfehlen würde Autohotkey.)
Andere Möglichkeiten, die davon abhängen, welche Seite es ist. Es scheint, dass die Datei erzeugt wird als Antwort auf den POST-Befehl. Das bedeutet, dass es keinen direkten link, den Sie herunterladen konnte. Und selbst wenn da ein link ist, ist es wahrscheinlich, dass es konnte nicht heruntergeladen werden über
Net.WebClient
da würden Sie nicht senden Authentisierung info (Sitzungs-cookies oder session-id im query-string). Würden Sie brauchen, um zu analysieren, z.B. die cookies von$ie.Document.cookie
und fügen Sie Sie zu verlangen.Jedoch in einigen Fällen könnten Sie
[System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url);
und geben Sie die POST-Methode und Daten und warten auf Antwort (das wäre dann die Datei). Das würde imitieren Klick auf den submit-button. Aber wieder, ohne Zugangsdaten, es wird wahrscheinlich scheitern.Ohne Zugriff auf die Website, es ist schwer zu sagen, etwas mehr.
InformationsquelleAutor stej
Wenn Sie absolut MÜSSEN für die programmgesteuerte Interaktion mit einer Anwendung würde ich vorschlagen, dass Sie so etwas wie http://www.codeplex.com/white
Diese Bibliothek stellt einen wrapper um einige Automatisierungsfunktionen zur Verfügung gestellt werden .NET 3.5
Wie oben erwähnt der beste Ansatz ist die Verwendung von Net.WebClient, anstatt eine Instanz des IE.
Wenn Sie brauchen, um zu rekonstruieren, die GET-oder POST-Anfrage, die Sie möglicherweise in der Lage zu Firebug auf untersuchen Sie die Seite des Herstellers.
InformationsquelleAutor Cephas