Javascript Browser

Du hast eine Idee für ein Projekt?
Antworten
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Die Idee: Ein rein kopfloser Browser mit voller Javascript Funktion. Komplett bedienbar aus Python heraus. Natürlich für Python 3.x ;)

Nach dem Verständnis und Meisterung eines kopflosen Browsers in Python mit den üblichen Extras, ist eine Javascript Unterstützung in der heutigen Zeit unabdingbar.
Die intensive Recherche für Möglichkeiten Javascript effizient mittels Python zu realisieren, sieht nicht gut aus. Es gibt einige Wrapper und auch Browser Umsetzungen mit JS aber die sind entweder veraltet oder eben für Python 2.7. Ghost.py nutzt z.B. die PyQt und/oder PySide WebPage mit zusätzlichen Funktionen.

Das Javascript Problem
Im Vergleich zu HTML wesentlich intensiver. Eine reine Pythonumsetzung kommt nicht in Frage, eine JS Engine muss her. Glücklicherweise sind viele Hände am Werk und basteln kontinuierlich an Weiterentwicklungen der z.Z. vorherrschenden Engines wie V8, Spidermonkey, Rhino, etc..
Wie bereits erwähnt sind welche mit Python Anbindungen begrenzt. Es stehen jedoch einige attraktive Anbindungen mit JS zur Verfügung wie Node.js und PhantomJS. Beide bieten, abgesehen von ihren sowieso vorhanden Grundfunktionen, zusätzliche Module bzw. komplette Umsetzungen in Richtung headless browser an wie CasperJS und Zombie.js an. Diese sind beide mittel CoffeeScript nutzbar und setzen JS um.

Praktisch betrachtet gibt es hiermit bereits mehr als gute Umsetzungen für mein Vorhaben, doch leider nicht für Python.
Da eigentlich nur eine JS Engine geplant war um den JS Code auszuführen, Rest soll Python regeln, stellt dies ein kleines Dilemma dar. Warum den ganzen Aufwand betreiben, wenn bereits Produkte vorhanden sind.
Die einfachste Lösung wäre einen Browser in CoffeeScript (>> CasperJS >> PhantomJS) zu schreiben und in Python einzubinden. Python nur als Schnittstelle zu nutzen.
Meine zweite Idee ist die Engine als Engine/Parser/Browser innerhalb von Python zu nutzen. Dadurch soll Python möglichst die komplette Kommunikation verarbeiten. Das "requests" Modul soll für alles zuständig sein.

Ich hab mir das so gedacht:
Eine Browserklasse wird in Python erstellt mit Cookies, Headers, etc.. Eine Website wird gedownloaded und in den JS Browser gefüttert, doch die Javascript Module einer Website kommunizieren mit der Aussenwelt durch die jeweilige Engine. Also müsste ich die Einstellungen der Python Browserklasse übergeben und die Rückgabe/Verlauf Vollständigkeitshalber auch der Python Klasse wieder zur Verfügung stellen. Das möchte ich aber nicht. Deswegen denke ich an ein Filter/Proxy System. Dabei soll jede Anfrage von einem internen Webserver verarbeitet werden, welcher praktisch die "requests" Browserklasse nutzt. Die erlangten Daten werden dann wieder der Engine zugeführt. Den Knotenpunkt soll aber Python übernehmen.
Es sollte doch möglich sein, jede Anfrage auf einen internen Verarbeitungsserver (localhost:port) zu leiten? Am einfachsten würde ich es mit über die Proxyfunktion vorstellen, einfach den localhost:port eintragen.
Der Server analysiert dann die Anfrage, welche von der Engine kommt, und führt diese mit der Python Browserklasse durch, so dass die Einstellungen dieser verwendet werden. Dadurch werden alle Anfragen von einer Klasse verarbeitet, können so optimal überwacht und analysiert werden.

Die grundlegenden Funktionen die man mit einem Browser ausführen möchte sollten dabei über Python realisierbar werden. Und die JS Funktionen eben über CoffeeScript (>>) mit Python API. Aber die Anfragen und Antworten trotzdem über die Python Browserklasse geregelt werden. AJAX sollte über dieses System auch funktionieren, nur mit noch einem weiteren Server dazwischen.


Finde ehrlich gesagt die pythonlastige Variante attraktiver. Man hat auch gleich die reinen Anfragen und Antworten zur Verfügung, was die Analysenoptionen erweitert. Doch hab ich mich noch nicht mit der erwähnten Zwischenserverlösung vertraut gemacht. Denkt ihr es wäre in dieser Richtung realisierbar?

Soviel zu der Idee. Über Anregungen, Kritik und anderen Vorgehensweisen freue ich mich selbstverständlich. Hoffentlich kann hiermit ein erster Schritt für einen stabilen javascriptfähigen Browser in Python gesetzt werden!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Bevor du dich jetzt verrennst, python-zombie ist dir bekannt, oder?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Hab ich mir noch nicht genauer angeschaut. Ist auch für Python 3 verfügbar werde einen blick drauf werfen, danke.

Das von mir beschriebene Vorgehen mit dem Zwischenserver, könnte praktisch so umgesetzt werden?
Antworten