Download File per PowerShell (AGBs akzeptieren)
Hallo ITler,
Ich hab eine URL, die wenn man die im Browser einfügt, als erstes eine Webseite anzeigt, wo man ein Checkbox Feld anklicken muss und dann auf Bestägigung Button klicken muss (AGBs akzeptieren).
Wenn die AGBs akzeptiert wurden 1x, kommt sofort mit der URL ein Instant Download.
Es gibt viele Möglichkeiten Daten herunterzuladen.
Das Problem ist, das es zwar im Target das Bild abspeichert, aber mit 7KB und defekt.
Probleme sehe ich darin, das es zu keinen Download kommt, weil AGBs akzeptiert werden müssen.
Sonst kenne ich noch folgende Befehle, für einen Download:
Invoke-RestMethod
Invoke-WebRequest
Start-BitsTransfer
Aber wie kann ich AGBs akzeptieren, die ich in PowerShell nicht sehe?
Die AGBs im Browser vorab akzeptieren und dann in PowerShell Skript ausführen, hilft logischerweise nichts.
Hat wer eine Idee dazu?
Danke und LG K
Ich hab eine URL, die wenn man die im Browser einfügt, als erstes eine Webseite anzeigt, wo man ein Checkbox Feld anklicken muss und dann auf Bestägigung Button klicken muss (AGBs akzeptieren).
Wenn die AGBs akzeptiert wurden 1x, kommt sofort mit der URL ein Instant Download.
Es gibt viele Möglichkeiten Daten herunterzuladen.
$URL = "www.testURL.at/HomeScreen.jpg"
$Target = "C:\Downloads\HomeScreen.jpg"
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile("$URL","$Target")
Das Problem ist, das es zwar im Target das Bild abspeichert, aber mit 7KB und defekt.
Probleme sehe ich darin, das es zu keinen Download kommt, weil AGBs akzeptiert werden müssen.
Sonst kenne ich noch folgende Befehle, für einen Download:
Invoke-RestMethod
Invoke-WebRequest
Start-BitsTransfer
Aber wie kann ich AGBs akzeptieren, die ich in PowerShell nicht sehe?
Die AGBs im Browser vorab akzeptieren und dann in PowerShell Skript ausführen, hilft logischerweise nichts.
Hat wer eine Idee dazu?
Danke und LG K
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6273071770
Url: https://administrator.de/contentid/6273071770
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
12 Kommentare
Neuester Kommentar
Moin.
Dafür gibt es kein allgemeingültiges Rezept das überall und immer funktioniert, das hängt immer von der Seite ab. Erster Schritt bei sowas ist, mit F12 im Browser die Entwickler-Tools zu öffnen, dann auf den "Netzwerkanalyse" Tab zu wechseln und den Download manuell anzustoßen.
Dann sieht man welche Daten die Webseite evt. Vorher per POST oder GET übermittelt und kann diesen Request dann manuell in der PS nachbilden. Sollte die URL die du dort erhältst bei jedem mal gleich sein reicht manchmal diese zu verwenden, aber meist ist der Download an bestehenee Cookies, UIDs etc.gebunden die du beim Request wieder mitgeben musst.
Manchmal kommt auch JavaScript ins Spiel, hier ist man dann oftmals auf Fernsteuerung des Browsers angewiesen (z.B. mit Selenium) weil JavaScript nur interpretiert und ausgeführt wird wenn es in einer entsprechenden Umgebung läuft. Wenn man das JavaScript aber vorher analysiert lässt sich auch das in PS nachbauen und umgehen. Wie gesagt hängt und fällt alles mit der entsprechenden Seite.
Wenn du uns die Seite verraten kannst können wir dir spezifischer auf die Seite zugeschnitten mit Codebeispielen helfen.
Anwendungs-Beispiele mit PowerShell wie man sowas macht finden sich aber auch im hiesigen Forum wenn man die Suche an wirft.
Eine Auswahl die ich hier zum Thema finden konnte
Cheers briggs
Dafür gibt es kein allgemeingültiges Rezept das überall und immer funktioniert, das hängt immer von der Seite ab. Erster Schritt bei sowas ist, mit F12 im Browser die Entwickler-Tools zu öffnen, dann auf den "Netzwerkanalyse" Tab zu wechseln und den Download manuell anzustoßen.
Dann sieht man welche Daten die Webseite evt. Vorher per POST oder GET übermittelt und kann diesen Request dann manuell in der PS nachbilden. Sollte die URL die du dort erhältst bei jedem mal gleich sein reicht manchmal diese zu verwenden, aber meist ist der Download an bestehenee Cookies, UIDs etc.gebunden die du beim Request wieder mitgeben musst.
Manchmal kommt auch JavaScript ins Spiel, hier ist man dann oftmals auf Fernsteuerung des Browsers angewiesen (z.B. mit Selenium) weil JavaScript nur interpretiert und ausgeführt wird wenn es in einer entsprechenden Umgebung läuft. Wenn man das JavaScript aber vorher analysiert lässt sich auch das in PS nachbauen und umgehen. Wie gesagt hängt und fällt alles mit der entsprechenden Seite.
Wenn du uns die Seite verraten kannst können wir dir spezifischer auf die Seite zugeschnitten mit Codebeispielen helfen.
Anwendungs-Beispiele mit PowerShell wie man sowas macht finden sich aber auch im hiesigen Forum wenn man die Suche an wirft.
Eine Auswahl die ich hier zum Thema finden konnte
- Powershell-Script, das sich auf Website anmeldet und dann eine andere speichert
- Powershell - bestimmten Wert aus Webseite auslesen
- Problem Auslesen einer Internetseite mit Powershell
- PowerShell: Einführung in die Webbrowser Automation mit Selenium WebDriver
- Script das Felder auf einer Internetseite automatisch einträgt.
Cheers briggs
Zitat von @K-ist-K:
Wie kann ich mit dem PowerShell Skript die Cookies mitgeben?
Falls die Infos ausreichend sind.
Invoke-WebRequest hat den Parameter -SessionVariable und -WebSessionWie kann ich mit dem PowerShell Skript die Cookies mitgeben?
Falls die Infos ausreichend sind.
Mit -SessionVariable legt man den Namen der SessionVariablen fest und mit -WebSession nutzt man die Session erneut
# request mit Session
Invoke-Webrequest -Uri 'https://xxxxx.de' -SessionVariable mySession
# request mit der Session-Variable machen
Invoke-Webrequest -Uri 'https://xxxxx.de' -WebSession $mySession
Du musst bei Nextcloud eigentlich nur auf die Seite gehen und dann den individuellen Download-Link kopieren der dort angezeigt wird. Klappt hier im Test dann einwandfrei hiermit von einer Nextcloud.
Invoke-Webrequest -Uri 'https://xxxxxx.de:/s/RnqZ2m6TmtEX4Qz/download/Nextcloud%20Manual.pdf' -OutFile .\test.pdf
Servus @K-ist-K,
ich vermute mal deine Seite nutzt die Nextcloud App-Erweiterung nextcloud/terms_of_service um die AGB zur Bestätigung anzuzeigen. Wenn das der Fall ist, kannst du es hiermit versuchen, das hatte ich für diese Nextcloud Apperweiterung mal geschrieben (Share-Link und den lokalen Speicherpfad für die Datei im Kopf anpassen):
#edit# Habe das gerade mal mit einer aktuellen Nextcloud und der o.g. App Erweiterung erfolgreich mit einem Download getestet.
Grüße Uwe
ich vermute mal deine Seite nutzt die Nextcloud App-Erweiterung nextcloud/terms_of_service um die AGB zur Bestätigung anzuzeigen. Wenn das der Fall ist, kannst du es hiermit versuchen, das hatte ich für diese Nextcloud Apperweiterung mal geschrieben (Share-Link und den lokalen Speicherpfad für die Datei im Kopf anpassen):
# nextcloud share link to download
$sharelink = 'https://domain.de/s/6fc9xLNKmFxS8L6'
# local download path
$savepath = '.\file.zip'
# ----------------------------------------
# extract domain part from sharelink
$domain = [regex]::match($sharelink,'(?i)^https?://[^/]+').Value
# get request token
$token = [regex]::match((Invoke-Webrequest -Uri $sharelink -SessionVariable ws -UseBasicParsing).Content,'data-requesttoken="([^"]+)').Groups[1].Value
# approve request to download the file (Works with Nextcloud "terms_of_service" App extension)
Invoke-WebRequest -Uri "$domain/apps/terms_of_service/sign_public" -WebSession $ws -UseBasicParsing -Method POST -ContentType "application/json" -Body '{"termId":1}' -Headers @{requesttoken=$token} | out-null
# Finally download the file
Invoke-Webrequest -Uri "$sharelink/download" -OutFile $savepath -WebSession $ws -UseBasicParsing -verbose
Grüße Uwe
Wie gesagt kann ich hier dann nur raten ohne weitere Info aus dem Netzwerkanalyse Tab.
Wenn im HTML Code nur diese einzige "Form" vorkommt die du oben gezeigt hast, kannst du mal das hier testen was die gezeigte Form übermittelt, wenn da noch weitere Forms vorhanden sind musst du die Form expliziter referenzieren damit die richtige übermittelt wird (ID/Name/etc):
Mehr Hilfe kann ich dir hier nur auf Anfrage per PN , dafür aber eine Erfolgsgarantie zu 100%.
Viel Erfolg.
Grüße Uwe
Wenn im HTML Code nur diese einzige "Form" vorkommt die du oben gezeigt hast, kannst du mal das hier testen was die gezeigte Form übermittelt, wenn da noch weitere Forms vorhanden sind musst du die Form expliziter referenzieren damit die richtige übermittelt wird (ID/Name/etc):
$sharelink = 'https://domain.de/s/xxxxxxx'
$savepath = '.\file.zip'
$req = Invoke-Webrequest $sharelink -SessionVariable ws
Invoke-WebRequest $sharelink -Method POST -Body $req.Forms -WebSession $ws
Invoke-Webrequest "$sharelink/download" -OutFile $savepath -WebSession $ws -UseBasicParsing -verbose
Mehr Hilfe kann ich dir hier nur auf Anfrage per PN , dafür aber eine Erfolgsgarantie zu 100%.
Viel Erfolg.
Grüße Uwe