2009-02-10 3 views
4

Je suis à la recherche d'un widget de navigateur python (le long des lignes de la classe QTextBrowser de pyQT4 ou wxpython's HTML module) qui a des événements pour l'interaction avec le DOM. Par exemple, si je souligne un nœud h1, la classe de widget doit avoir une méthode qui m'avertit que quelque chose a été mis en surbrillance et quelles sont les propriétés de ce nœud (<h1>, contenu de la balise, balises parentales et parentales, etc.). Idéalement, le module/classe du widget donnerait lui-même accès à l'objet de l'arbre DOM afin que je puisse le traverser, le modifier et rendre le nouvel arbre.Navigateur DOM Aware Python GUI Widget

Est-ce que quelque chose comme ça existe? J'ai essayé de regarder mais je ne suis malheureusement pas capable de le trouver. Merci d'avance!

+0

Il semble [XULRunner] (https://developer.mozilla.org/en/XULRunner/What_XULRunner_Provides) peut soutenir ce que je dois. Je vais étudier si je peux écrire le DOM avec Python. Mettra à jour ce post quand j'en saurai plus. – Karan

Répondre

2

Il peut ne pas être idéal pour vos besoins, mais vous pouvez jeter un oeil sur les liaisons Python à KHTML qui font partie de PyKDE. Un bon endroit pour commencer à regarder est la classe KHTMLPart:

http://api.kde.org/pykde-4.2-api/khtml/KHTMLPart.html

Depuis l'API de cette classe est basée sur le paradigme des signaux et des slots utilisés dans Qt, vous devrez connecter différents signaux à créneaux horaires dans votre propre code pour savoir quand des parties d'un document ont été modifiées. Il y a aussi une API DOM, donc il devrait aussi être possible d'accéder aux nœuds DOM pour les parties sélectionnées du document.

Plus d'informations peuvent être trouvées ici:

http://api.kde.org/pykde-4.2-api/khtml/index.html

+0

Cela semble être la meilleure solution disponible actuellement, à moins de pirater Webkit. Merci :) – Karan

+0

Quelqu'un m'a rappelé qu'il y a aussi cette enveloppe autour de KHTML qui pourrait être plus facile à démarrer avec: http://paul.giannaros.org/pykhtml/ –

1

J'aimerais aussi une telle chose. Je suppose que l'un avec des liaisons Python n'existe pas, mais serait vraiment heureux de se tromper à ce sujet.

Une option que j'ai récemment regardée (mais jamais essayée) est le navigateur Webkit. Maintenant, cela a quelques bindings pour Python, et construit contre différents toolkits (j'utilise GTK). Cependant, il existe des API disponibles pour l'ensemble de la machine Javascript pour C++, mais pas de liaisons Python et je ne vois aucune raison pour laquelle celles-ci ne peuvent pas être liées à Python. C'est une tâche assez énorme, je sais, mais ce serait un projet universellement utile, alors peut-être que cela en vaut la peine.

1

Si cela ne vous dérange pas d'être limité à Windows, vous pouvez utiliser le contrôle du navigateur IE. De wxPython, il est dans wx.lib.iewin.IEHtmlWindow (il y a une démo dans la démo de wxPython). Cela vous donne un accès complet au DOM et la possibilité de couler des événements, par ex.

ie.document.body.innerHTML = u"<p>Hello, world</p>"