Da es auf der Webseite von CortalConsors keinen direkten Downloadlink zu dieser Datei gibt, sondern der Download scheinbar über ein Servlet eingeleitet wird hilft Dir da ein "normales" Starten eines HTTP-Downloads auch wenig.
Ich hab mich mal hingesetzt und eine kleine Lösung "niedergeschmiert" die Dir die Datei per WebGadget sowie automatischer Requesterbeantwortung herunter lädt (konnte das gerade selber gut gebrauchen

).
Ist natürlich eine extrem heikle und instabile Angelegenheit wenn auf dem ausführenden Rechner auch noch Usereingaben stattfinden.
Auch muss diese Variante auf die genauen Fenster-Titel Deines Browsers bzw. OS angepasst sein (siehe Variablen: Erstes/Zweites/DrittesFenster.s).
Für einen Hintergrundprozess auf einem Server (auf dem also ansonsten keine weiteren Usereingaben statt finden) ist so eine "automatische Bedienung" von Requestern allerding recht brauchbar (wir automatisieren auf diese Art seit Jahren einige Vorgänge - allerdings nicht genau in dieser Form und auch nicht über PureBasic).
Um ganz sicher zu gehen könntest Du evtl. noch die ProzessID mit einbeziehen und noch einige weitere mögliche Exceptions abfangen. Für einen Server, bei dem sich allerdings nicht viel ändert und für den es einmalig angepasst ist, ist es eigentlich schon fast ok.
Hier mal der Source dazu - vielleicht kannst Du ihn ja gebrauchen.
Code: Alles auswählen
Procedure SendKeys(handle,window$,keys$)
If window$<>"" : handle=FindWindow_(0,window$) : EndIf ; Use window$ instead of handle.
If IsWindow_(handle)=0 ; Does the target window actually exist?
ProcedureReturn 0 ; Nope, so report 0 for failure to type.
Else
; This block gives the target window the focus before typing.
thread1=GetWindowThreadProcessId_(GetForegroundWindow_(),0)
thread2=GetWindowThreadProcessId_(handle,0)
If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#True) : EndIf
SetForegroundWindow_(handle) ; Target window now has the focus for typing.
Delay(125) ; 1/8 second pause before typing, to prevent fast CPU problems.
; Now the actual typing starts.
For r=1 To Len(keys$)
vk$=Mid(keys$,r,1)
If vk$="{" ; Special key found.
s=FindString(keys$,"}",r+1)-(r+1) ; Get length of special key.
s$=Mid(keys$,r+1,s) ; Get special key name.
Select s$ ; Get virtual key code of special key.
Case "ALTDOWN" : keybd_event_(#VK_MENU,0,0,0) ; Hold ALT down.
Case "ALTUP" : keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT.
Case "BACKSPACE" : vk=#VK_BACK
Case "CONTROLDOWN" : keybd_event_(#VK_CONTROL,0,0,0) ; Hold CONTROL down.
Case "CONTROLUP" : keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL.
Case "DELETE" : vk=#VK_DELETE
Case "DOWN" : vk=#VK_DOWN
Case "END" : vk=#VK_END
Case "ENTER" : vk=#VK_RETURN
Case "F1" : vk=#VK_F1
Case "F2" : vk=#VK_F2
Case "F3" : vk=#VK_F3
Case "F4" : vk=#VK_F4
Case "F5" : vk=#VK_F5
Case "F6" : vk=#VK_F6
Case "F7" : vk=#VK_F7
Case "F8" : vk=#VK_F8
Case "F9" : vk=#VK_F9
Case "F10" : vk=#VK_F10
Case "F11" : vk=#VK_F11
Case "F12" : vk=#VK_F12
Case "ESCAPE" : vk=#VK_ESCAPE
Case "HOME" : vk=#VK_HOME
Case "INSERT" : vk=#VK_INSERT
Case "LEFT" : vk=#VK_LEFT
Case "PAGEDOWN" : vk=#VK_NEXT
Case "PAGEUP" : vk=#VK_PRIOR
Case "PRINTSCREEN" : vk=#VK_SNAPSHOT
Case "RETURN" : vk=#VK_RETURN
Case "RIGHT" : vk=#VK_RIGHT
Case "SHIFTDOWN" : shifted=1 : keybd_event_(#VK_SHIFT,0,0,0) ; Hold SHIFT down.
Case "SHIFTUP" : shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT.
Case "TAB" : vk=#VK_TAB
Case "UP" : vk=#VK_UP
EndSelect
If Left(s$,3)<>"ALT" And Left(s$,7)<>"CONTROL" And Left(s$,5)<>"SHIFT"
keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the special key.
EndIf
r=r+s+1 ; Continue getting the keystrokes that follow the special key.
Else
vk=VkKeyScanEx_(Asc(vk$),GetKeyboardLayout_(0)) ; Normal key found.
If vk>304 And shifted=0 : keybd_event_(#VK_SHIFT,0,0,0) : EndIf ; Due to shifted character.
keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the normal key.
If vk>304 And shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) : EndIf ; Due to shifted character.
EndIf
Next
If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#False) : EndIf ; Finished typing to target window!
keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key if user forgot.
keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key if user forgot.
keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key if user forgot.
ProcedureReturn 1 ; Report successful typing! :)
EndIf
EndProcedure
Global TargetWindowName.s
Global TargetWindowKeys.s
Procedure SendKeysToModalWindow(*Dummy)
While Not FindWindow_(0,TargetWindowName) : Delay(10) : Wend
Delay(500)
SendKeys(0,TargetWindowName,TargetWindowKeys)
EndProcedure
; Es wird ein unsichtbares Fenster mit einem WebGadget geöffnet.
; über die URL des WebGadgets wird der Download der gewünschten Datei gestartet.
; anschließend werden 2 Fenster automatisch mit (Alt)+S "beantwortet", womit die Datei in das
; vorgegebene Downloadverzeichnis herunter geladen wird.
ErstesFenster.s = "Dateidownload"
ZweitesFenster.s = "Speichern unter"
DrittesFenster.s = "Download beendet"
OpenWindow(0,0,0,600,400,"CortalConsors", #PB_Window_Invisible)
WebGadget(0,0,0,600,400,"https://www.cortalconsors.de/euroWebDe/servlets/embeddedSourcesServlet?contentType=xls&contentExtId=denps38171034")
; da das erste Fenster (der Dateidownloadrequester) ein modales Fenster ist und den Hauptthread anhält, muss dieses in einem seperaten Thread abgefragt werden
TargetWindowName = ErstesFenster
TargetWindowKeys = "{ALTDOWN}s{ALTUP}"
ThreadID = CreateThread(@SendKeysToModalWindow(),0)
While IsThread(ThreadID) : WaitWindowEvent(10) : Wend
; warten auf zweites Fenster zur Eingabe des Dateinamens unter dem gespeichert werden soll
While Not FindWindow_(0,ZweitesFenster) : WaitWindowEvent(10) : Wend
Delay(200)
GetWindowRect_(handle, FirstRequester.RECT)
SendKeys(0,ZweitesFenster,"{ALTDOWN}s{ALTUP}")
TimeOut = ElapsedMilliseconds() + 5000
Repeat
; Falls die Datei bereits existiert, wird ein weiteres Fenster mit dem Titel "Speichern unter" geöffnet, jedoch mit anderen Koordinaten.
; Also wird nach einem Fenster gesucht, welches genauso heisst wie das Zweite, jedoch andere Koordinaten aufweisst.
handle=FindWindow_(0,ZweitesFenster)
If handle
GetWindowRect_(handle, SecondRequester.RECT)
If FirstRequester\right <> SecondRequester\right
Delay(200)
SendKeys(handle,"","{ALTDOWN}j{ALTUP}")
EndIf
EndIf
WaitWindowEvent(10)
; Sobals das dritte Fenster ("Download beendet") erscheint wird das Programm beendet.
; Falls der User ein Häckchen bei "Dialog nach Beenden des Downloads schließen" gemacht hat, kann es vorkommen
; dass das dritte Fenster nie gefunden wird.
; Für diesen Fall ist ein TimeOut von 5 Sekunden eingebaut. Dieser sollte u.U. je nach Geschwindigkeit der Internet-Verbindung angepasset werden.
Until FindWindow_(0,DrittesFenster) Or ElapsedMilliseconds() > TimeOut
Grüße, PL.