Commodo
NGBler
- Registriert
- 17 Mai 2014
- Beiträge
- 151
Ich habe ein aktuelles Projekt, bei dem ich spezifische Webseiten überprüfe.
Im Detail muss ich jede Ressourcenanfrage (inklusive die von ausgeführtem Javascript, da kommt mein gesuchter Parameter her) bei Seitenaufruf anhand einer Whitelist (aktuell Javascript Regex) überprüfen, bei Bedarf request.abort(); ausführen (wichtigster Punkt!) und ansonsten den Request nach einem bestimmten Parameter filtern und diesen ausgeben.
Dabei gehe ich momentan wie folgt vor
Problem aktuell: PhantomJS als benötigter Headless-Browser
Es zieht Unmengen RAM + CPU, wenn man nicht aufpasst leakt es überall Speicher und es ist eine 3 Jahre alte geforkte Webkitversion, jetzt nicht grade der Browser-Überflieger. Ausserdem sind nebenläufige Zugriffe ein Garant für fehlerhafte Ausgaben weil PhantomJS die page-Objekte nicht sauber trennt und diese sich gegenseitig überschreiben . Sequentiell dauert es aber Wochen bis die Tests fertig sind.
Es läuft im Moment zwar, aber sobald 30-50+ Webseiten gleichzeitig überprüft werden sollen fliegt mir der RAM wahrscheinlich um die Ohren und der Admin jagt mich durchs Büro.
Meine angeschauten Alternativen:
- SlimerJS: total veraltet, unterstützt nur bis Firefox 39
- Selenium mit Java/Python/Go als Binding: freie Browserwahl (Firefox, Chrome, PhantomJS), aber die API bietet keinen Zugriff auf angeforderte Ressourcen und damit auch keinen Weg diese gegebenfalls abzubrechen und ist damit nutzlos (hab zumindest nach 2 Stunden Google nichts gefunden)
Ich habe schon überlegt ob ich eine Chrome-Extension baue welches automatisch die Liste abgrast aber das ganze müsste headless auf dem Server laufen (geht wohl mittels virtuellem Framebuffer xbfc oder so), aber ob ich auch automatisch die Extension starten kann ohne GUI......?
Oder habt ihr noch eine Idee?
Im Detail muss ich jede Ressourcenanfrage (inklusive die von ausgeführtem Javascript, da kommt mein gesuchter Parameter her) bei Seitenaufruf anhand einer Whitelist (aktuell Javascript Regex) überprüfen, bei Bedarf request.abort(); ausführen (wichtigster Punkt!) und ansonsten den Request nach einem bestimmten Parameter filtern und diesen ausgeben.
Dabei gehe ich momentan wie folgt vor
- ein Crawler zieht eine Liste aller Links auf der Webseite
- ein Programm nimmt das Crawler-Logfile als Input und verteilt die Links auf X PhantomJS-Instanzen, für die ich ein Javascript-Skript geschrieben habe welches PhantomJS bei Aufruf als Parameter bekommt.
Problem aktuell: PhantomJS als benötigter Headless-Browser
Es zieht Unmengen RAM + CPU, wenn man nicht aufpasst leakt es überall Speicher und es ist eine 3 Jahre alte geforkte Webkitversion, jetzt nicht grade der Browser-Überflieger. Ausserdem sind nebenläufige Zugriffe ein Garant für fehlerhafte Ausgaben weil PhantomJS die page-Objekte nicht sauber trennt und diese sich gegenseitig überschreiben . Sequentiell dauert es aber Wochen bis die Tests fertig sind.
Es läuft im Moment zwar, aber sobald 30-50+ Webseiten gleichzeitig überprüft werden sollen fliegt mir der RAM wahrscheinlich um die Ohren und der Admin jagt mich durchs Büro.
Meine angeschauten Alternativen:
- SlimerJS: total veraltet, unterstützt nur bis Firefox 39
- Selenium mit Java/Python/Go als Binding: freie Browserwahl (Firefox, Chrome, PhantomJS), aber die API bietet keinen Zugriff auf angeforderte Ressourcen und damit auch keinen Weg diese gegebenfalls abzubrechen und ist damit nutzlos (hab zumindest nach 2 Stunden Google nichts gefunden)
Ich habe schon überlegt ob ich eine Chrome-Extension baue welches automatisch die Liste abgrast aber das ganze müsste headless auf dem Server laufen (geht wohl mittels virtuellem Framebuffer xbfc oder so), aber ob ich auch automatisch die Extension starten kann ohne GUI......?
Oder habt ihr noch eine Idee?
Zuletzt bearbeitet: