110. URL aus dem Internet Explorer mit VBS extrahieren und verarbeiten

Einleitung

VBS und CMD ergänzen sich in vielerlei Hinsicht prima auf einem Windowssystem. Alleine bei der simplen Erstellung einer GUI (Graphik User Interface) für Batches mit einer HTA ist es von Vorteil für all diejenigen, die wie der Sternenhimmelstuermer in den quelloffenen Subsprachen beheimatet sind. Deshalb widmet der Sternenhimmelstuermer dem Internet Explorer 8 der Microsoft Corporation diese kleine Abhandlung.

Mit Hilfe von VBS ist es nämlich möglich, eine Adresse aus dem geöffneten Internet Explorer zu extrahieren und verarbeiten.

Der Sternenhimmelstuermer weiß als Praktiker, dass sich daraus der Stoff für hunderte sinnvolle Skripte in VBS oder  Batches ergibt. Als Metaseite gibt die Sternenhimmelstuermerseite die entscheidenenden Teile für die Verarbeitung weiter. Dabei sind für die mehr pragmatischen User wieder kleine lauffähige Skripte herausgekommen.


Inhaltsangabe

VBS Code: Internetadresse, Datum und Zeit in Liste ergänzend eintragen
    Funktion
    Kurzerklärung
VBS Code: Ausgabe einer Zeile destruktiv in ein Textdokument
    Variante  
    Voraussetzung
Batch für VBS zur Weiterverarbeitung (automatische Erfassung der Browseradresse alle 10 Sekunden)
    Erklärung
Fazit




VBS - Skript

Voraussetzung: Administrationsrechte, die Fähigkeit mit dem Editor von Windows oder Skripte zu erstellen. VBS-Skripte müssen auf dem System zugelassen sein (Nachfrage kommt spätestens beim ersten Verwenden eines VB-Skriptes auf dem System.
Der Sternenhimmelstuermer geht davon aus, dass Sie rudimentäre Kenntnisse von Skripten haben...

Name: beliebiger Name.vbs

Dim browserurl
Set browserurl = CreateObject("Shell.Application").Windows
If browserurl.Count > 0 Then
For Each oWindow In browserurl
    If UCase(Right(oWindow.FullName, 12)) = "IEXPLORE.EXE" Then
adresse = oWindow.LocationURL & " " & date & " " & time
End If
  Next
End If
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FileExists("test.log") then
Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("test.log", 8)
    objFile.WriteLine adresse 
objFile.Close
else
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.CreateTextFile("test.log")
    Set objFile = objFSO.OpenTextFile("test.log", 2)
    objFile.WriteLine adresse
objFile.Close
end if

Funktion

Das VBS gibt bei geöffnetem Internet Explorer die augenblickliche url (Internetadresse wie www.google.de) zusammen mit Datum und Uhrzeit in einem Textdokument relativ zum Skript aus. Alles sauber getrennt mit Leerzeichen. Bei erneuter Abfrage wird eine andere oder dieselbe Internetadresse hinzugefügt. Schwachstellen: Bei mehreren geöffneten Fenstern wird nur das aktive Fenster (Tab) registriert. Geht natürlich nur mit Internet Explorer. Bei geschlossenen Browser wird eine Leerzeile ausgegeben. Hey, alle schwächen sind natürlich ausgleichbar, aber der Sternenhimmelstuermer sieht keinen Bedarf und schreibt nur für sein öffentliches Tagebuch den rudimentären Kern...


Kurzerklärung

Dim browserurl
Set browserurl = CreateObject("Shell.Application").Windows

Wir schaffen eine eine Variable Namens browserurl und erschaffen für dieses ein Shellobjekt.

If browserurl.Count > 0 Then
For Each oWindow In browserurl

Ist in diesem Objekt mehr als nichts, dann ist für jedes offene Fenster die vollständige Internetadresse...

If UCase(Right(oWindow.FullName, 12)) = "IEXPLORE.EXE" Then

vom Internetexplorer an die Variable Adresse abzugeben,....

adresse = oWindow.LocationURL & " " & date & " " & time

....die gleich der Url, und einem Leerzeichen und dem Datum und einem Leerzeichen und der Zeit ist (diese Variablen müssen nicht definiert werden, da date und time für das stehen, was Sie sind)...

 End If
  Next
End If

...und danach wird entweder....

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FileExists("test.log") then
Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("test.log", 8)
    objFile.WriteLine adresse 
objFile.Close

...ein "Textdokument" namens test.log geöffnet und dieses mit der 8 durch nicht-distruktives Schreiben ergänzt und geschlossen oder...

else
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.CreateTextFile("test.log")
    Set objFile = objFSO.OpenTextFile("test.log", 2)
    objFile.WriteLine adresse
objFile.Close

als Alternative (else) ein neues Dokument mit Namen Test.log erstmal erstellt und bekommt seinen Ersteintrag. Dieses natürlich nur in diesem einen Fall...

Ausführliche Beschreibung der letzten zwei Blöcke gabe es schon in der Abhandlung über HTA in der Tabelle unter aufstellen von Datenbanken - daher hier nur eine saumäßig kurze Erläuterung.

Das reicht eigentlich schon aus, um sich eine perfekte Tabelle anzulegen. Einfach eine Verknüpfung zu der  VBS in der Taskleiste anlegen und manuell  betätigen - fertig!

----

Variante

Sehr viel kürzer ist diese Variante:

einzeilen.VBS

Dim urltext
Set urltext = CreateObject("Shell.Application").Windows
If urltext.Count > 0 Then
  For Each oWindow In urltext
    If UCase(Right(oWindow.FullName, 12)) = "IEXPLORE.EXE" Then
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.CreateTextFile("test.log")  
    Set objFile = objFSO.OpenTextFile("test.log", 2)
    objFile.WriteLine  oWindow.LocationURL & " " & date & " " & time
objFile.Close
End If
  Next
End If

Das VBS erzeugt eine Zeile mit den drei Angaben  Internetadresse, Datum und Zeit und gibt es aus als test.log relativ zum VBS. Separatoren sind wieder Leerzeichen. Bei jedem neuen betätigen wird das Dokument überschrieben (2). Die alte Datei  verschwindet.
Ist der Browser nicht geöffnet, so passiert gar nichts...Das soll jetzt besser sein?

Ja, denn der Sternenhimmelstuermer switcht einmal total auf die Denkweise eines Batchschreibers um und schreibt aus dessen Sicht nun eine Batch, die denselben Effekt wie das erste VBS hat ein wenig verbessert um das Feature der automatischen Neuerfassung der Internetdaresse, aber nur solange, wie der Browser geöffnet ist.

Klar mit VBS kriegt man das auch mit irgendwelchen schönen Befehlen wie loop und sleep hin..., aber der Schwerpunkt dieser Abhandlung liegt bei der Weiterverarbeitung mit einer Batch.

Sie bekommen in der Batch dabei die Befehlssätze geliefert, die für eine effektive Bearbeitung unerlässlich sind! Keine Sorge: alles Grundbefehle...

Ist eine lustige Batch zur Erfassung der Seiten, die Sie so besuchen. Alle 10 Sekunden werden die Werte in eine Datei Namens test.txt ergänzend eingetragen. Sobald der Explorer geschlossen wird oder erst gar nicht geöffnet ist, schließt die Batch mit einem maximalen Zeitverzug von 11 Sekunden. Hm, das CMD-Fenster können Sie verkleinern. Der Sternenhimmelstuermer gibt keinen Code zum Verbergen des Fensters der cmd - das erinnert ihm zu sehr an Überwachung und Spionage..., es reicht vollkommen aus, wenn Sie das geöffnete Fenster der cmd minimieren....


Voraussetzung

Batch liegt relativ zum Vbs - können Sie natürlich beliebig anpassen...

einzeilen.vbs muss relativ im selben Verzeichnis/Ordner liegen.

Batch (funktioniert nur zusammen mit einzeilen.vbs!!!)

beliebigerName.bat


:Anfang
start ""  "einzeilen.vbs"
timeout /T 1
FOR /F "tokens=1,2,3* delims= "  %%i  IN (test.log) DO echo %%i %%j %%k >>test.txt
if not exist test.log goto benden
del test.log
timeout /T 10
goto Anfang
:beenden
end


Erklärung

Die natürlich ausführlicher: Das Herz des Sternenhimmelstuermer schlägt mit mehr Begeisterung für das Batch-Schreiben-:)

Man könnte natürlich die Batch mit einem Befehl dazu zwingen, den Internetbrowser zu starten (in der Art
start "" "C:\Program Files\Internet Explorer\iexplore.exe" "www.google.de") in der
ersten Zeile. Das würde die übrige Batch nicht beeinflussen  und eine Erleicherung...

:Anfang

Anfang ist ein Sprungpunkt für einen goto Befehl , erkennbar am Doppelpunkt. Da gehört ein goto Befehl dazu, um eine Schleife eimzuleiten...

 start ""  "einzeilen.vbs"

Wir starten unsere VBS und die erstellt ein Dokument namens Test.log mit der Internetadresse Datum und Uhrzeit. Getrennt mit Leerzeichen. Ist der Internetexplorer geschlossen, so wird auch kein Test.log erstellt.

timeout /T 1

Ärgerlich aber zwingend notwendig. Der Sternenhimmelstuermer baut eine Verzögerung von einer Sekunde ein, damit es kein Problem mit der nächsten Zeile gibt.

FOR /F "tokens=1,2,3* delims= "  %%i  IN (test.log) DO echo %%i %%j %%k >>test.txt

Ein For - Befehl ist hier die beste Wahl.  Wir haben nur eine Zeile im  test.log. Also müssen Sie sich nur noch um die Syntax kümmern.
Es sind drei Bestandteile (tokens, nämlich Internetadresse, Datum und Zeit) mit einem Separator (delims, nämlich einem Leerzeichen) in test.log,  die wir als i, j und k vollständig im test.txt. schreiben (wird beim ersten Durchgang erstellt - Batches sind bei weitem flexibler als VBS).

Die letzten Abhandlungen vom Sternenhimmelstuermer beschäftigten sich mit  For-Befehlen.  Als Separator würde übrigens ein Komma besser sein, da in den Internetadressen Leerzeichen sein könnten.
Falls Sie also lieber ein Komma haben wollen, dann müssten Sie das im VBS-Code und in der Batch anpassen: Im VBS zwischen den " " Anführungszeichen ein Komma "," und im For Befehl zwischen i und j ein escaptes Komma, also
%%i ^, %%j ^, %%k.
 
Der Sternenhimmelstuermer ging bei der Suche nach Doubletten oder Bestimmung der Dateigröße darauf ein. Ein Doppelpunkt als Separator hingegen ist unsinnig, da zwei Doppelpunkte schon durch die Internetadresse und der Uhrzeit verwendet werden.
Langsam werden die Separatoren knapp...

if not exist test.log goto benden

Das hört sich erstmal komisch an: Dieses ist aber absolut notwendig, um irgendwann einmal aus der Schleife zu kommen. Ist der Internet Explorer geschlossen, so wird kein test.log erstellt die Batch endet, weil wenn nicht existiert test.log, dann gehe zum Sprungpunkt beenden. Der steht am Ende der Datei und der Rest der Zeilen werden übersprungen und die Batch wird beendet.
Das war der erste Fall - für den zweiten Fall sorgen wir in der nächsten Zeile.

del test.log

Wir zerstören den test.log, den die Batch mühsam erstellte - war eh nur eine Zeile drin -:)

timeout /T 10
goto Anfang

Wir verzögern jetzt die Zeit um 10 Sekunden und gehen dann zum Anfang. Das kein test.log vorliegt wissen wir - haben wir doch eigenhändig zerstört.
Im nächsten Durchgang ist also entweder der Internetexplorer noch offen, dann wird ein test.log von der VBS erstellt, Das Ganze in einen Test.txt von der Batch geschrieben, dann ist ein test.log in der Prüfung da, der nach der Püfung zerstört wird und ab geht es in die nächste Runde...

oder der Browser wurde zwischenzeitlich geschlossen, es wird kein Test.log vom VBS erstellt...und bei der Prüfung (if not exist test.log goto benden) die Batch durch das Überspringen der Zeilen aus der Schleife herausgeholt und beendet.

:beenden
end

ist unsere Ausstiegsklausel bei negativer Prüfung oder wie Nelly Furtado es singen würde: Why do all good things come to an end?

Varianten

Es gibt alleine für diese kleine Batch ca. 10 - 20 sinnvolle Varianten. Vor dem ersten Sprungpunkt (:Anfang) kann z. B. der Internetexplorer gestartet werden - das wurde am Anfang bereits ausgeführt.

Dann könnte man die Zeitabstände beliebig verändern...

Dann für Mathematiker die Zeit des Browsers beschränken: Der Sternenhimmelstuermer würde dazu die Batch dahingehend verändern, dass mit einem set /a Befehl z. B. die Variable x (set /a x=1) definiert wird. Dann wird x bei jedem Schleifendurchgang um einen Wert erhöht ( z. B. set /a x=x+1). Bei jedem Durchgang sind das ja 11 Sekunden, also für z. B. 6 Durchgänge 66 Sekunden. Die Ausstiegsprüfung wäre in der Art: if x=6 goto beenden . Dann wäre es möglich beim Ausstieg den Browser zu schließen (taskkill - schauen Sie doch einmal in der Windowshilfe - taskkill /? nach, wie der Befehl gehandhabt wird - kleiner Tip: Abbildname reicht...).
Probieren Sie mal das alleine aus. Mit der Hilfestellung sollten Sie nicht mehr als 5 Minuten brauchen - ansonsten sind ihre Batchkenntnisse verbesserungswürdig...

Fazit

Diese Abhandlung war mittelschwer, aber es ging irgendwie um den Weg, wie man Internetadressen abgreifen und weiterverarbeiten kann. Die Erklärungen waren sehr kurz. Die Sternenhimmelstuermerseite hat über 110 Abhandlungen im W7 - Bereich. Die ersten 80 Abhandlungen und Projekte sind leichter. Batch und VBS sind lustig. Mit VBS beschäftigt sich der Sternenhimmelstuermer zunehmend.

Schade, dass andere Browser sich nicht ein wenig gegenüber der CMD öffnen, damit Administratoren einfacher Aufgaben erledigen können. Das bleibt so dem Internet Explorer vorbehalten. Schuld eigene...



Impressum
Datenschutz