Website Screenshots – mit Batch Script automatisiert

Das Ziel sind Screenshots von Webseiten, mit einem Batch Script automatisiert und kontrolliert. Keep it simple & stupid.

Die Wichtigste ist natürlich das Anfertigen der Screenshots. Das ließe sich vermutlich auch mit pure Batch erledigen, ich fand allerdings folgende Utilities besonders einfach und optimal für diesen Zweck: CutyCapt und IECapt. Beide Tools bestehen nur aus einer kleinen .exe Datei und sind kommandozeilenbasiert, optimal für eine Batch Benutzung.
CutyCapt fertigt Website Screenshots mit der WebKit Engine (Chrome und Opera nutzen diese Engine) an, IECapt nutzt die Engine des Internet Explorers.

Die Anwendung ist relativ einfach, über die CMD. Ein Beispiel:

CutyCapt.exe --url=http://www.spiegel.de/ --out=spiegel.png --min-width=1100 --min-height=800 --delay=1000

Wenn die Webseite besonders lang ist so wird sie komplett aufgenommen. Die Parameter steuern das Verhalten der Engine, beim IE gibt es nicht ganz so viele Möglichkeiten.

Das kann man jetzt in einem netten Script verpacken und schon lassen sich beliebige Webseiten mit einem Doppelklick fotografieren. Versehen mit Logging, Mailer und ein paar Kleinigkeiten, fertig.

Hier mein Script, welches 2 Screenshots der Fritz Box aufnimmt, in einem Unterordner speichert, eine Mail schickt und alles loggt, so als Muster:

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

@echo off
setlocal
Color 9f

REM ### INFORMATIONS ############################################

REM ****************************************************
REM  Title:   	Website Screenshot Daemon (WSD)
REM  Author:  	Hannes Schurig
REM  Created: 	22.02.2013
REM  Changed: 	25.02.2013
REM  Version: 	0.3.5
REM  Changelog: 0.1: complete mailer function with flexible callback
REM				0.1.1: complete new mailer with call, parameters and no local variables, 50% less code
REM				0.2: CutyCapt configured to take 2 screenshots, formatted datetime filename
REM				0.2.1: collect errorlevels and added to mail text
REM				0.2.2: save screenshots in subfolder, check if exist, create if needed
REM				0.3: use working directory and absolute paths for sheduling compatibility
REM				0.3.1: script renamed, detect working directory and filename
REM				0.3.2: removed usesubdir variable, remove 40-45 and edit 51 & 53 for no subdir
REM				0.3.3: fixed bug - spaces in working path lead to script malfunction
REM				0.3.4: CutyCapt parameters as variable - they do not change
REM				0.3.5: added 20 seconds max-wait parameter
REM  Credits: CutyCapt website screenshot utility: http://cutycapt.sourceforge.net/ - awesome!
REM ****************************************************

REM ### VARIABLES ############################################

for %%a in (%0) do set filename=%%~nxa
for %%a in (%0) do set wd=%%~dpa
REM remove last "\" or "/" from working directory (wd) path
if "%wd:~-1%"=="\" set wd=%wd:~0,-1%
if "%wd:~-1%"=="/" set wd=%wd:~0,-1%
set subdir=%wd%\screenshots
set mailer=1
set adminmail=hannes.schurig@online.de
set log="%wd%\logfile.txt"
set cutycapt="%wd%\CutyCapt.exe"
set datetime=0
set scerrorlevel=0

REM same parameters for every screenshot? It's shorter with:
set cutycaptparameters=--min-width=1100 --min-height=800 --delay=1000 --max-wait=20000

REM ### PROGRAM START ############################################

echo %date% - %time:~0,5% (i) WSD starting... >> %log%

REM check and create subdir if wanted and needed
if not "%subdir%"=="" (
	if not exist "%subdir%" (
		md "%subdir%"
	)
)

REM prepare short datetime with . instead :
set datetime=%date%-%time:~0,5%
set datetime=%datetime::=.%

%cutycapt% --url=http://fritz.box/ --out="%subdir%/%datetime%-dashboard.png" %cutycaptparameters%
set scerrorlevel=%errorlevel%
%cutycapt% --url=http://fritz.box/system/syslog.lua --out="%subdir%/%datetime%-events.png" %cutycaptparameters%
set scerrorlevel=%scerrorlevel%%errorlevel%

echo %date% - %time:~0,5% (i) Screenshot taken with errorlevel %scerrorlevel% >> %log%

echo %date% - %time:~0,5% (i) Sending admin mail... >> %log%
if %mailer%==1 call :mailer "WSD" "Status" "noreply@WSD.com" "Script finished with errorlevel %scerrorlevel%"

:shutdown
echo %date% - %time:~0,5% (i) WSD shutting down... >> %log%
goto end


REM ### MAILER FUNCTION ############################################

:mailer
start iexplore "http://php.webmailer.de/webmail.php&mailto=%adminmail%&contactname=%~1&subject=%~2&email=%~3&message=%~4"
REM wait and close
ping 127.0.0.1 -n 5 > nul
taskkill /im "iexplore.exe" /f
ping 127.0.0.1 -n 3 > nul

REM ### PROGRAM EXIT ############################################

:end
endlocal

Anmerkungen dazu:
Keine Unterordner? Löscht Zeile 49-54 und passt den „–out“ Parameter in Zeile 60 und 62 an. Wenn doch, passt Zeile 28 an.
IECapt statt CutyCapt? In Zeile 38 den Dateinamen anpassen.
Der Mailer muss natürlich angepasst werden. Habt ihr einen PHP Webmailer? Dann passt die Zeilen 36, 68 und 78 an. Wenn ihr keinen Mailer habt reicht es die Zeile 35 auf 0 zu setzen.
Ansonsten müsste das funktionieren.

Alternativ zu diesem Script gibt es auch Browser Plugins mit denen Website Screenshots erstellt werden können. Awesome Screenshot wäre ein Google Chrome Plugin für diesen Zweck. Die Extension fotografiert einen ausgewählten Bereich, den sichtbaren Bereich oder die komplette Seite. Das Bild lässt sich bearbeiten, speichern, teilen und mehr.
Über die Automatisierung dieser Geschichte muss man sich dann aber noch Gedanken machen, das ist vermutlich etwas schwieriger.

Bugs, Anmerkungen sowie Verbesserungsvorschläge nehme ich natürlich gerne entgegen.

4 Kommentare

  1. Meine Fritzbox war für wenige Wochen lang ohne Passwort eingerichtet, ja. Daswar nötig um dieses Projekt umzusetzen, dessen Resultate ich wiederum in einem Rechtsstreit brauchte.
    Aber wem nützt das etwas? An die Fritzbox kommt ja trotzdem nur, wer im WLAN drin ist. Und das ist ja mit WPA2 halbwegs brauchbar geschützt. Und von außen sollte man ja nicht sehen können, ob der Router eines WLANs mit Passwort gesichert ist, oder nicht. Oder?
    Natürlich habe ich direkt nach der Aktion das Passwort wieder eingestellt. 😉

  2. Hallo Hannes,
    das Tool hat monatelang super funktioniert, besonders um Facebooktimelines festzuhalten. – Nun sind die Screenshots plötzlich viel kleiner und beim neuen Versuch, auf Facebook damit zuzugreifen, wird mir nur die Anmeldeseite angezeigt.
    Hast du ne Idee, worans liegen könnte und tritt dieses Problem bei dir auch auf?

Schreibe einen Kommentar