让我们假设我们有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)