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...