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()
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