Website Screenshots von der Linux Consolen mit CutyCapt

Das Thema Website Screenshots auf einem Rootserver automatisch zu erstellen hat mich schon lange interessiert, aber meine Recherchen im Netz waren nicht sehr erfolgreich. Es gibt da den ein oder anderen Blogpost der Erfolge verspricht, aber keine wirkliche Anleitung wie man es auf einem Debian Server hin bekommt. Heute hatte ich dann etwas Zeit und habe diese Anleitung für Ubuntu auf einem Debian Lenny ausprobiert. Ich war überrascht das ich nach nur 5 Minuten ein funktionierendes System zum Website Screenshots erstellen hatte. Zum Einsatz kommt CutyCapt das eine in WebKit gerenderte Webseite in vielen verschiedenen Formaten (SVG, PDF, PS, PNG, JPEG, TIFF, GIF, BMP) abspeichern kann. Mit Xvfb (X window virtual framebuffer) kann man es auch auf einem Rootserver ohne XServer ausführen.
Installation
Alle Pakete gibt es in Debian Lenny:
$ aptitude install build-essential g++ subversion
The following NEW packages will be installed:
binutils{a} build-essential ca-certificates{a} cpp{a} cpp-4.3{a}
dpkg-dev{a} g++ g++-4.3{a} gcc{a} gcc-4.3{a} libapr1{a} libaprutil1{a}
libc6-dev{a} libexpat1{a} libgmp3c2{a} libgomp1{a} libldap-2.4-2{a}
libmpfr1ldbl{a} libmysqlclient15off{a} libneon27-gnutls{a} libpq5{a}
libserf-0-0{a} libsqlite3-0{a} libstdc++6-4.3-dev{a} libsvn1{a}
libtimedate-perl{a} libxml2{a} linux-libc-dev{a} make{a} mysql-common{a}
openssl{a} patch{a} sgml-base{a} subversion xml-core{a}
0 packages upgraded, 35 newly installed, 0 to remove and 0 not upgraded.
Need to get 26.5MB of archives. After unpacking 80.2MB will be used.
$ aptitude install xvfb xfs xfonts-scalable xfonts-100dpi libgl1-mesa-dri libqt4-webkit libqt4-dev
The following NEW packages will be installed:
dbus{a} dbus-x11{a} defoma{a} file{a} fontconfig{a} fontconfig-config{a}
libaudio2{a} libdbus-1-3{a} libdrm2{a} libfontconfig1{a} libfontenc1{a}
libfreetype6{a} libfs6{a} libgl1-mesa-dev{a} libgl1-mesa-dri
libgl1-mesa-glx{a} libglu1-mesa{a} libglu1-mesa-dev{a} libhal1{a}
libice6{a} libjpeg62{a} liblcms1{a} libmagic1{a} libmng1{a}
libpixman-1-0{a} libpng12-0{a} libpthread-stubs0{a}
libpthread-stubs0-dev{a} libqt4-assistant{a} libqt4-dbus{a}
libqt4-designer{a} libqt4-dev libqt4-help{a} libqt4-network{a}
libqt4-opengl{a} libqt4-opengl-dev{a} libqt4-qt3support{a}
libqt4-script{a} libqt4-sql{a} libqt4-sql-mysql{a} libqt4-svg{a}
libqt4-test{a} libqt4-webkit libqt4-xml{a} libqt4-xmlpatterns{a}
libqtcore4{a} libqtgui4{a} libsm6{a} libtiff4{a} libx11-dev{a}
libxau-dev{a} libxaw7{a} libxcb-xlib0-dev{a} libxcb1-dev{a}
libxcursor1{a} libxdamage1{a} libxdmcp-dev{a} libxfixes3{a} libxfont1{a}
libxft2{a} libxi6{a} libxinerama1{a} libxkbfile1{a} libxmu6{a} libxpm4{a}
libxrandr2{a} libxrender1{a} libxt6{a} libxtrap6{a} libxtst6{a} libxv1{a}
libxxf86dga1{a} libxxf86misc1{a} libxxf86vm1{a} mesa-common-dev{a}
qt4-qmake{a} qt4-qtconfig{a} ttf-dejavu{a} ttf-dejavu-core{a}
ttf-dejavu-extra{a} ucf{a} x11-apps{a} x11-session-utils{a} x11-utils{a}
x11-xfs-utils{a} x11-xkb-utils{a} x11-xserver-utils{a}
x11proto-core-dev{a} x11proto-input-dev{a} x11proto-kb-dev{a}
xbase-clients{a} xfonts-100dpi xfonts-base{a} xfonts-encodings{a}
xfonts-scalable xfonts-utils{a} xfs xinit{a} xtrans-dev{a} xvfb
0 packages upgraded, 100 newly installed, 0 to remove and 0 not upgraded.
Need to get 62.1MB of archives. After unpacking 165MB will be used.
$ svn co https://cutycapt.svn.sourceforge.net/svnroot/cutycapt $ cd cutycapt/CutyCapt $ qmake $ make
Benutzung von CutyCapt
Dieser Befehl erzeugt einen kompletten Seiten Screenshot von debianroot.de. Wie man sehen kann hat das Tools noch Probleme mit dem Hintergrund, aber ist doch schon ein schöner Anfang.
$ xvfb-run --server-args="-screen 0, 1024x768x24" ./CutyCapt --url=http://www.debianroot.de --out=debianroot.png
----------------------------------------------------------------------------- Usage: CutyCapt --url=http://www.example.org/ --out=localfile.png ----------------------------------------------------------------------------- --help Print this help page and exit --url=<url> The URL to capture (http:...|file:...|...) --out=<path> The target file (.png|pdf|ps|svg|jpeg|...) --out-format=<f> Like extension in --out, overrides heuristic --min-width=<int> Minimal width for the image (default: 800) --max-wait=<ms> Don't wait more than (default: 90000, inf: 0) --delay=<ms> After successful load, wait (default: 0) --user-styles=<url> Location of user style sheet, if any --header=<name>:<value> request header; repeatable; some can't be set --method=<get|post|put> Specifies the request method (default: get) --body-string=<string> Unencoded request body (default: none) --body-base64=<base64> Base64-encoded request body (default: none) --app-name=<name> appName used in User-Agent; default is none --app-version=<version> appVers used in User-Agent; default is none --user-agent=<string> Override the User-Agent header Qt would set --javascript=<on|off> JavaScript execution (default: on) --java=<on|off> Java execution (default: unknown) --plugins=<on|off> Plugin execution (default: unknown) --private-browsing=<on|off> Private browsing (default: unknown) --auto-load-images=<on|off> Automatic image loading (default: on) --js-can-open-windows=<on|off> Script can open windows? (default: unknown) --js-can-access-clipboard=<on|off> Script clipboard privs (default: unknown) ----------------------------------------------------------------------------- <f> is svg,ps,pdf,itext,html,rtree,png,jpeg,mng,tiff,gif,bmp,ppm,xbm,xpm ----------------------------------------------------------------------------- http://cutycapt.sf.net - (c) 2003-2008 Bjoern Hoehrmann - bjoern@hoehrmann.de
Fazit
Mit Xvfb und CutyCapt kann man auf einem Rootserver die Erzeugung von Website Screenshots automatisieren. Das Problem mit dem Hintergrund bekommt man sicher irgend wie gelöst. Es wäre schön wenn man CutyCapt mit Webkit durch einen Gecko betriebenen Browser ersetzen könnte. Außerdem kann das System keine Screenshots von Flash Seiten erzeugen, aber es zeigt trotzdem das es möglich ist. Wenn jemand mehr Informationen oder weitere Anleitungen hat, bitte hinterlasst mir ein Kommentar.

2 Kommentare
Peter
schrieb am 01.07.2010 um 17:39 Uhr
Ich habe jetzt schon mehrere Artikel gefunden auf einem RootServer Screenshots zu erstellen. Was mich bisher davon abgehalten hat, ist die Tatsache, dass ich mich auf einem produktiven Webserver irgendwie weigere auch nur annähernd etwas wie X zu installieren .. ich möchte den eben so low-level wie möglich haben ..
gibt’s hier irgendwelche security dinge die man beachten sollte?
es scheint ja keine reine konsolen lösungen zu geben, die gänzlich ohne einen renderer direkt in eine Bild-Datei schreiben, oder?
kostaki
schrieb am 02.07.2010 um 08:49 Uhr
So ähnlich bin ich auch an die Sache ran gegangen… Einen X Server auf einem Rootserver laufen zu lassen fühlt sich einfach komisch an. Deshalb lief es bei mir bisher nur auf VServern…
Ich bin auch mit CutyCapt noch nicht wirklich zufrieden, aber ich habe bisher noch keine bessere Lösung für ein Debiansystem gefunden. Wenn da jemand was besseres kennt würde ich mich über einen Link freuen.