2012-06-19 68 views
5

讓我們假設我們有PyV8:PyV8,我可以操縱DOM結構嗎?

import PyV8 
ctxt = PyV8.JSContext() 

和蟒蛇DOM結構,例如xml.dom

我怎麼能養活一個.js文件到PyV8,以便它可以改變DOM結構,我有。
如果我有它的內容:

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

我想要刪除DOM項。

PyV8有完美的hello-world示例。但我希望看到有用的東西。

要清楚,我想要做的是:
"Javascript file" - > - 魔法 - > - DOM, (already built with html file) and changed now with passed javascript file

回答

2

Appologies的格式。我儘可能分開,但我的屏幕閱讀器不喜歡SO的格式化控件。

我打算回答你的問題,雖然看起來有些模糊。請讓我知道,如果我需要重寫這個答案,以適應不同的情況。 我假設你正試圖從網上獲取一個HTML文件,並從這個文件內部運行Javascript來處理所述文檔。 不幸的是,沒有任何Python xml庫具有真正的DOM支持,並且在我找到的每個包中都不存在W3C DOM合規性。 你可以做的是使用PyV8 w3c.py dom文件作爲開始的例子,並創建自己的完整DOM。 W3C Sample Dom 雖然你不需要引號或者血統,但你需要重寫這個模塊。 BeautifulSoup也不是最快速的解析器。 我會推薦使用像lxml.etree的目標解析器選項。 LXML Target Parser 搜索「Feed解析器接口」。 然後,您可以使用LXML加載HTML/Script文檔,如下解析它,然後在創建的DOM上運行您需要的每個腳本。

查找下面的部分示例。 (請注意,HTML標準是巨大的,分散的和_高度瀏覽器特定的,所以你的milage可能會有所不同)。

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

但據我瞭解,它只是建立dom。我不能喂JavaScript文件來運行一個現成的dom,我可以嗎? – Sergey

4

一個很好的例子對你想做什麼都可以在這裏找到:

https://github.com/buffer/thug

這是一個Python的HTTP客戶端通過PyV8執行JS的安全性研究目的,但可以綁輕鬆下降以滿足更簡單的需求。