schultheiss58
Goto Top

Batch Abfrage ob HTML Seite vollständig geladen ist, wenn ja, dann Batch fortfahren, ansonsten warten

Ich starte per Batch den Browser Firefox, rufe eine HTML Adresse auf. Bis hierhin klappt alles. Jetzt soll das Batch-Programm aber warten bis der Browser die Webseite komplett geladen hat. Wie kann man das im Batch umsetzen?
Nach dem erfolgreichem Laden der Webseite trage ich in das Webformular per Clip meine Daten ein. Das klappt perfekt.
Das Problem ist nun, manchmal dauert es länger, bis eine Seite geladen hat, aber das Batchprogramm ist schon viel weiter!
Danke für die Hilfe. MfG

Content-Key: 394802

Url: https://administrator.de/contentid/394802

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: H41mSh1C0R
H41mSh1C0R 05.12.2018 um 18:05:12 Uhr
Goto Top
Was ist Clip?

Wenn du mit Clip Daten in Formularfelder eintragen kannst, bietet dieses "Tool" irgendeine Art Returncode ob die Aktion erfolgreich war?
Wenn ja nimm dein erstes Feld und solange da ein Returncode für falsch zurückkommt dreh eine Schleife.

Hast du schon irgend etwas umgesetzt in deiner Batch?

VG
Mitglied: Schultheiss58
Schultheiss58 05.12.2018 um 18:46:33 Uhr
Goto Top
Mit Clip meinte ich nur Clipboard. Das Tool nircmd.exe mit Parameter "clipboard". Dieses trägt nur von mir definierte Werte über die Zwischenablage ein. Dies ist unabhängig vom Laden einer Webseite (kein Returncode). Die Batch läuft super und arbeitet alles ab, wie es sein soll. Nur wenn eine Webseite länger läd, weis das Batch das nicht! Erst beim Laden der nächsten Seite läuft es wieder synchon. Jetzt hab ich halt die Wartezeit so eingestellt, das genügend Zeit ist, bis die Webseite vollständig geladen ist. Insgesamt dauert das aber dann viel zu lange. Wenn die Batchdatei den Browser fragen könnte: Webseite vollständig geladen?, würde das viel Zeit einsparen. So ungefähr...

goto webseite
:warten
wait 5000
:webseite
if %webseite% VollständigGeladen goto weiter
goto warten
:weiter
Mitglied: Schultheiss58
Schultheiss58 05.12.2018 um 19:07:36 Uhr
Goto Top
Eventuell dieses Script ins Batch mit einbauen?

REM +++JAVA SCRIPT+++
var x=new ActiveXObject("Microsoft.XMLHTTP");
x.open("GET",WSH.Arguments(0),true);
x.setRequestHeader('User-Agent','XMLHTTP/1.0');
x.send('');
while (x.readyState!=4) {WSH.Sleep(50)};
WSH.Echo(x.responseText);
Mitglied: ASP.NET.Core
ASP.NET.Core 05.12.2018 um 20:25:11 Uhr
Goto Top
Das wirst du mit so alter Technologie nicht sauber hinbekommen. Eventuell wäre Selenium WebDriver eine Alternative. Da könntest du ein kleines Progrämmchen schreiben (z.B. in C#) und hättest nicht nur eine synchrone Abarbeitung. Du kannst auch den DOM sauber ansprechen (per Klasse, Id, Struktur) und damit die Felder ausfüllen.

Was willst du damit denn erreichen und in welchem Kontext?
Mitglied: 137846
Lösung 137846 06.12.2018 aktualisiert um 12:20:47 Uhr
Goto Top
Dat geht auch mit Batch und der Hilfe von Ps, von hinten durchs Auge:
@echo off &setlocal
powershell -ExecutionPolicy ByPass -Command ^"^  
	$ie = New-Object -Com InternetExplorer.Application;^
	$ie.Visible = $true;^
	$ie.Navigate('https://administrator.de');^  
	while($ie.Busy){sleep 1};^
	write-host 'Finished Loading';^"  
Felder ausfüllen kannst du mit dem COM-Object auch.
Beispiel mit Administrator.de Login:
@echo off &setlocal
powershell -ExecutionPolicy ByPass -Command ^"^  
	$ie = New-Object -Com InternetExplorer.Application;^
	$ie.Visible = $true;^
	$ie.Navigate('https://administrator.de/login/');^  
	while($ie.Busy){sleep 1};^
        $ie.document.getElementById('global-login-field').value = 'Testuser';^  
        $ie.document.getElementById('global-login-pass').value = 'Geheim';^  
	write-host 'Finished';^"  

Warum das aber alles noch mit Batch abgefackelt werden soll wobei man heute so viele bessere Möglichkeiten hat ...?
An deiner Stelle würde ich besser mal eine neue Skript- oder Programmiersprache erlernen.

Gruß A.