zurück zum Artikel

Webangebote mit Skripten ansteuern

Autopiloten fürs Web

Praxis & Tipps | Praxis

Die Bankgeschäfte, der Abruf elektronischer Rechnungen, das Einsehen von Verbindungsdaten, das Einbuchen in die Zeiterfassung oder das Bestellen von Waren - alles geht per Browser. Manche dieser Aufgaben schreien nach Automatisierung, sei es, weil sie gern in Vergessenheit geraten, schlicht zu umständlich sind oder man die Daten in anderer Weise verarbeiten will, als der Lieferant vorgesehen hat.

Aufmacher

Den Anstoß für diese Geschichte gab die Idee eines Redakteurs, die Verbindungsdaten seines Telefonanbieters auf eigene Faust auszuwerten, um die Handykosten der Kinder zeitnah im Blick zu haben. Als Abfallprodukt gab es dazu auch die monatliche Rechnung, die nicht mehr auf Papier ins Haus flattert, sondern vom Anbieter als PDF-Datei bereitgestellt wird. Eine Automatik, die das PDF einmal im Monat abholt, schätzt man spätestens dann, wenn die nächste Steuererklärung fällig, aber spät dran ist und man beim Anbieter nur noch die Rechnungen der letzten zwölf Monate vorfindet.

Im Gespräch mit Kollegen stellte sich dann schnell heraus, dass auch andere Bedarf für solche Lösungen haben: Der eine möchte automatisch beim Login an seinem Arbeitsplatz in die Browser-basierte Zeiterfassung eingestempelt werden. Ein anderer möchte die Bewegungen auf seinem Konto in eigener Software weiterverarbeiten. Ein Dritter will in einem CMS abgelegte Daten für ein anderes aufbereiten und die darin enthaltenen Strukturen fürs Einlesen benutzen. Ein Vierter will alle elektronischen Rechnungen automatisch in seinem privaten Archiv ablegen.

Die folgenden fünf Artikel nehmen sich konkrete Webangebote vor und zeigen, wie man sie mit verschiedenen Techniken automatisieren und dort Daten einsammeln kann. Dass die Beispiele alle aus dem Telekommunikations- und Bankenumfeld stammen, liegt wohl auch daran, dass dort der Handlungsdruck am größten ist: Die Unternehmen wollen Papier und Porto sparen und bürden dem Kunden auf, Rechnungen und Auszüge selbst zu drucken. Doch was man an diesen Beispielen lernt, stellt den maximalen Aufwand dar. Der automatisierte Zugriff auf Angebote etwa, die gar keine Anmeldung erfordern, lässt sich mit diesen Techniken vergleichsweise leicht umsetzen.

Bevor man sich indes daran macht, ein Skript zum Auslesen von Daten zu schreiben, sollte man sich vergewissern, dass es keine Alternativen gibt. Für den Zugang zu Banken, um dort etwa die Kontobewegungen als CSV-Datei abzufischen, existieren spezialisierte Bibliotheken auf HBCI-Basis. Mit AqBanking-CLI stehen diese Funktionen auch auf der Kommandozeile zur Verfügung. So kommt man mit einer Bank womöglich am schnellsten ins Geschäft.

iMacros ist mehr als ein Makrorecorder für den Browser. Es zeichnet Sitzungen auf und erlaubt in Grenzen dann Anpassungen an den Skripten, etwa um Dateinamen fürs Speichern zu ändern.

Für das Abgreifen von Daten im Web gibt es einen gängigen Begriff, nämlich „Web scraping“ oder auch etwas weiter gefasst „Screen scraping“. Einen leicht negativen Beigeschmack hat die Technik: In Zeiten von Web 2.0 und sogenannten Mashups, die Inhalte aus verschiedenen Quellen mischen, schoss wohl der eine oder andere übers Ziel hinaus und schmückte sich mit Federn, die er in anderen Angeboten eingesammelt hatte. Solange man indes seine Scraping-Aktivitäten nicht als Lasttest für den Webserver anlegt, ihn also im Sekundentakt anfährt, und ein berechtigtes Interesse an den abgerufenen Daten hat, sollte keine Gefahr bestehen. Im Zweifelsfall bringt ein Blick in die Nutzungsbedingungen Klarheit; mancher Anbieter untersagt darin den automatisierten Zugriff über Skripte.

Das Web Scraping birgt auch Risiken: In den Skripten abgelegte Zugangsdaten geraten womöglich in falsche Hände. Und: Egal wie sorgfältig man vorgeht, kann niemand sicher ausschließen, dass ein irrlaufendes Skript nicht womöglich den Telefontarif wechselt, das Konto kündigt et cetera. Das heißt: Wer skriptet, tut das auf eigene Gefahr.

Die auf den ersten Blick einfachste Methode, Webzugriffe zu automatisieren, wäre wohl ein Makrorecorder für den Browser. Und den gibt es mit iMacros sogar kostenlos: Die Software erweitert Firefox, Internet Explorer und Google Chrome. Sie zeichnet den Besuch einer Website auf und kann die Aufnahme später aus dem Browser heraus wieder abspielen. Die Skripte lassen sich in einem Editor auch nachträglich bearbeiten. Mit etwas Trickserei, die im Wiki beim Hersteller iOpus beschrieben ist, gelingt es sogar, Firefox oder Chrome so zu starten, dass sie Makros ausführen. Mit einer speziellen, kostenpflichtigen Skripting-Edition soll dann das uneingeschränkte Beeinflussen der Browser von außen möglich sein.

Firebug hilft beim Finden von Feldern und Strukturenin Webseiten.

iOpus betreibt mit AlertFox auch einen Webdienst, der auf der Skript-Technik aufbaut. Wer sich dort registriert, kann iMacros-Skripte ausführen lassen. Das Angebot dient der kontinuierlichen Beobachtung von Websites auf Anwendungsebene. AlertFox bemüht reale Browser, um Besuche einer Site nachzubilden und Fehlverhalten zu erkennen. Findige Nutzer verwenden den kostenlos angebotenen Zugang zu diesem Dienst, um täglich Skripte auszuführen, ohne ihren Rechner laufen lassen zu müssen.

Die Fehlererkennung ist generell auch ein weites Feld für die Automatisierung: Skripte können nicht nur die Funktionstüchtigkeit einer Webanwendung prüfen, sondern auch beim Lasttest helfen oder es mit Datenmüll bewerfen, um die Stabilität zu testen.

iMacros ist längst nicht die einzige Software dieser Art. Auch andere, etwa CoScripter aus dem IBM-Forschungslabor, kommen als Erweiterung für Firefox daher. CoScripter funktioniert ebenfalls in Art eines Makrorecorders. Die Tatsache, dass das Add-on die Skripte grundsätzlich auf einem öffentlichen Server ablegt, scheint bedenklich, auch wenn es eine Option gibt, Skripte als privat zu markieren. Wir fanden auf Anhieb dort abgelegte Skripte, die sensible Zugangsdaten enthielten. Interessant scheint auch eine Entwicklung des MIT: Chickenfoot. Hier haben Forscher versucht, Formularelemente in Skripten über beschreibenden Text erreichbar zu machen anstatt über die kryptischen Namen, die der Website-Entwickler vorgegeben hat.

Je nachdem, wie nah sich ein Skript an die Gestaltung der Website anlehnt, ist es natürlich auch vor Änderungen nicht gefeit. Schon ein einzelner Hinweis, den der Anbieter dazwischenschaltet und der per Klick bestätigt werden muss, kann ein Skript zu Fall bringen. Mancher Betreiber will sich Automaten sogar vom Leib halten und setzt sogenannte Captchas ein. Das sind kleine Aufgaben, die für Maschinen bewusst schwierig, für Menschen eben leicht sind, etwa das Erkennen eines verzerrt dargestellten Wortes in einem Bild. Bei unseren Experimenten streute ein Webserver Captchas selbständig ein, wenn er bemerkte, dass sich unser Skript allzu intensiv mit ihm befasst – was beim Testen nicht ausbleibt. Auch stießen wir vereinzelt auf Banken, die der Anmeldung ans Online-Banking ein Captcha voranstellten.

Schneidet auch HTTPS-Verbindungen lesbar mit: Das Firefox-Add-on LiveHTTPHeaders speichert den Mitschnitt in einer Textdatei, die man dann in Ruhe analysieren kann.

Ein Teil der Kunst beim Skripten von Webseiten besteht darin, die im Browser dargestellten Daten zu analysieren. Dazu gehört unter anderem, in Formularen die richtigen Felder zu finden. Sehr hilfreich bei der Analyse ist das Firefox-Add-on „Firebug“. Muss man etwa den Namen eines Formularfeldes ermitteln, öffnet man die jeweilige Seite im Browser, aktiviert Firebug im Extras-Menü und klickt mit der rechten Maustaste auf das jeweilige Feld. Der Eintrag „Element untersuchen“ zeigt dann Informationen über das jeweilige Element, etwa <input type="text" value="" title="Suchbegriff eingeben" name="q" id="sb_form_q" class="sw_qbox"/> – hier findet man also den Namen des Felds „q“ heraus.

Der zweite Teil der Kunst besteht darin, die Informationen zu interpretieren, die Browser und Webserver übermitteln. Dabei hilft das Firefox-Add-on LiveHTTPHeaders. Es zeichnet die mit dem Webserver ausgetauschten Daten auf. Da es Bestandteil des Browsers ist, kann es auch ohne Verrenkungen verschlüsselt übertragene Daten anzeigen (HTTPS). An anderer Stelle wäre das viel schwieriger und aufwendiger, etwa mit einem Netzwerk-Sniffer. Der Artikel auf Seite 124 [1] zeigt eine weitere Methode, auch SSL-gesicherten Verkehr lesbar mitzuschneiden, etwa wenn die eigene Skripterei an die Grenzen stößt und man sich vergewissern will, dass die richtigen Informationen hin- und hergehen.

Die folgenden Artikel wenden diese und weitere Techniken an, um beispielhaft Automatisierungslösungen für einzelne Webangebote zu entwickeln. Auf unseren Webseiten stehen die einzelnen Skripte meist in erweiterter Form zum Download bereit. Dort finden Sie auch weitere Dokumentation zu den Skripten und Werkzeugen. Wir laden Sie herzlich ein, eigene Skripte dort abzulegen und anderen Lesern zur Verfügung zu stellen. Weitere Hinweise finden Sie über den Link.

Das Automatisieren von Webzugriffen ist per se erst mal ein plattformübergreifendes Thema. Die gängigen Skriptsprachen gibt es für alle Betriebssysteme. Das gilt auch für die Firefox-Add-ons. Trotzdem haben natürlich auch die plattformspezifischen Lösungen ihren Charme, etwa der auf Seite 118 [2] vorgestellte Ansatz, der dank der neuen Windows PowerShell mit Bordmitteln auskommt und überraschende Fertigkeiten des Internet Explorer ausnutzt.

Der Mac, dessen Fähigkeiten zur Automatisierung dank AppleScript und Automator als herausragend gelten dürfen, kommt in den folgenden Artikeln nicht explizit vor. Das hat seine Gründe: Die von Mac OS vorgesehenen Komponenten bieten keine Optionen, um bei Webangeboten, die eine Anmeldung erfordern, ein brauchbares Session-Handling umzusetzen – genau das ist aber nötig, wenn man Kontoauszüge oder Ähnliches archivieren will. (ps [3])

www.ct.de/1004110 [4]

"Persönliche Webroboter"

Artikel zum Thema "Persönliche Webroboter" finden Sie in der c't 04/2010:
Autopiloten fürs Web
S. 110 [5]
Kontoauszüge mit Greasemonkey herunterladen
S. 114 [6]
Webautomation mit PowerShell
S. 118 [7]
Telefonrechnung und Verbindungsdaten mit wget
S. 122 [8]
Girokonto-Buchungen archivieren mit Perl
S. 124 [9]
Webanwendungen skripten mit Ruby und Mechanize
S. 128 [10]



URL dieses Artikels:
http://www.heise.de/-914484

Links in diesem Artikel:
[1] https://www.heise.de/kiosk/archiv/ct/10/04/124
[2] https://www.heise.de/kiosk/archiv/ct/10/04/118
[3] mailto:ps@ct.de
[4] http://www.ct.de/1004110
[5] https://www.heise.de/kiosk/archiv/ct/10/04/110
[6] https://www.heise.de/kiosk/archiv/ct/10/04/114
[7] https://www.heise.de/kiosk/archiv/ct/10/04/118
[8] https://www.heise.de/kiosk/archiv/ct/10/04/122
[9] https://www.heise.de/kiosk/archiv/ct/10/04/124
[10] https://www.heise.de/kiosk/archiv/ct/10/04/128