2012-06-19 15 views
5

Nehmen wir an, wir haben PyV8:PyV8, kann ich DOM Struktur manipulieren?

import PyV8 
ctxt = PyV8.JSContext() 

und ein Python-DOM-Struktur, zum Beispiel xml.dom

Wie kann ich eine Js-Datei zu PyV8 füttern, so dass es DOM-Struktur verändern könnte, dass ich haben.
Wenn ich es Inhalt hatte:

$("#id").remove(); 

Ich möchte dom Artikel entfernt werden.

PyV8 hat perfekte Hallo-Welt-Beispiel. Aber ich möchte etwas Nützliches sehen.

klar zu sein, was ich tun möchte, ist:
"Javascript file" -> - Magie -> - DOM, (already built with html file) and changed now with passed javascript file

Antwort

2

appologies für die Formatierung. Ich spreizte so gut ich konnte, aber mein Bildschirmleser mag die Formatierungssteuerung von SO nicht.

Ich werde versuchen, Ihre Frage zu beantworten, obwohl es ein bisschen vage scheint. Bitte lassen Sie mich wissen, wenn ich diese Antwort auf eine andere Situation neu schreiben muss. Ich nehme an, Sie versuchen, eine HTML-Datei aus dem Internet zu erhalten, und führen Sie Javascript aus dieser Datei, um auf das Dokument zu handeln. Leider hat keine der Python-XML-Bibliotheken echte DOM-Unterstützung und W3C-DOM-Konformität ist in keinem Paket, das ich gefunden habe, nicht vorhanden. Sie können die pyV8 w3c.py dom-Datei als Startbeispiel verwenden und ein eigenes vollständiges DOM erstellen. W3C Sample Dom Sie müssen dieses Modul jedoch neu schreiben, da es keine Zitate oder Apostrophs berücksichtigt. BeautifulSoup ist auch nicht der schnellste Parser. Ich würde empfehlen, etwas wie lxml.etree Zielparser Option zu verwenden. LXML Target Parser Suche nach "Die Feed-Parser-Schnittstelle". Anschließend können Sie ein HTML/Skript-Dokument mit LXML laden, es wie folgt analysieren und jedes der benötigten Skripts für das erstellte DOM ausführen.

Hier finden Sie ein Teilbeispiel. (Bitte beachten Sie, dass die HTML-Standards massiv, verstreut und hoch Browser-spezifisch sind, so dass Ihre Meilenzahl variieren kann).

https://github.com/buffer/thug

Es ist ein Python-HTTP-Client JS über PyV8 für die Sicherheitsforschung Zwecke auszuführen, können aber geschnallt sein:

class domParser(object): 
    def __init__(self): 
    #initialize dom object here, and obtain the root for the destination file object. 
     self.dom = newAwesomeCompliantDom() 
     self.document = self.dom.document 
     self.this = self.document 

    def comment(self, commentText): 
    #add commentText to self.document or the above dom object you created 
     self.this.appendChild(self.document.DOMImplementation.createComment(commentText)) 

    def start(self, tag, attrs): 
    #same here 
     self.this = self.this.appendChild(self.document.DOMImplimentation.newElement(tag,attrs)) 

    def data(self, dataText): 
    #append data to the last accessed element, as a new Text child 
     self.this.appendChild(self.document.DOMImpl.createDataNode(dataText)) 

    def end(self): 
    #closing element, so move up the tree 
     self.this = self.this.parentNode 

    def close(self): 
     return self.document 

#unchecked, please validate yourself 
x = lxml.etree.parse(target=domParser) 
x.feed(htmlFile) 
newDom = x.close() 
+0

Aber wie ich es verstanden habe baut es einfach dom. Ich kann Javascript-Datei nicht füttern, um es auf einem fertigen Dom zu starten, kann ich? – Sergey

4

Ein gutes Beispiel für das, was Sie versuchen, hier zu tun gefunden werden kann für einfachere Bedürfnisse einfach herunter.

Verwandte Themen