PyV8,我可以操纵DOM结构吗?

Ser*_*gey 5 python v8

让我们假设我们有PyV8:

import PyV8
ctxt = PyV8.JSContext()
Run Code Online (Sandbox Code Playgroud)

例如,一个python DOM结构 xml.dom

如何将.js文件提供给PyV8,以便它可以改变我拥有的DOM结构.
如果我有它的内容:

$("#id").remove();
Run Code Online (Sandbox Code Playgroud)

我想要删除dom项目.

PyV8拥有完美的hello-world示例.但是我希望看到一些有用的东西.

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

小智 2

对格式表示歉意。我尽了最大的努力,但我的屏幕阅读器不喜欢 SO 的格式控件。

我将尝试回答你的问题,尽管它似乎有点模糊。如果我需要重写这个答案以适应不同的情况,请告诉我。我假设您正在尝试从网络获取 HTML 文件,并从该文件内部运行 Javascript,以对所述文档进行操作。不幸的是,没有一个 Python xml 库具有真正的 DOM 支持,并且我发现的每个包中都不存在 W3C DOM 合规性。您可以做的是使用 PyV8 w3c.py dom 文件作为起始示例,并创建您自己的完整 DOM。 W3C Sample Dom 不过,您将需要重写此模块,因为它不考虑引号或撇号。BeautifulSoup 也不是最快的解析器。我建议使用 lxml.etree 的目标解析器选项之类的东西。 LXML 目标解析器 搜索“提要解析器接口”。然后,您可以使用 LXML 加载 HTML/Script 文档,按如下方式解析它,并在创建的 DOM 上运行您需要的每个脚本。

下面找到一个部分示例。(请注意,HTML 标准庞大、分散且高度特定于浏览器,因此您的情况可能会有所不同)。

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()
Run Code Online (Sandbox Code Playgroud)