让我们假设我们有PyV8:
import PyV8
ctxt = PyV8.JSContext()和python结构,例如xml.dom
如何将..js文件提供给PyV8,以便它可以更改我所拥有的DOM结构。
如果我有它的内容:
$("#id").remove();我要删除dom项。
PyV8有完美的hello-world示例。但我想看看有用的东西。
说清楚,我想做的是:
"Javascript file" -
发布于 2012-06-20 04:44:38
格式设置的应用程序。我尽量使用空格,但我的屏幕阅读器不喜欢这样的格式化控件。
我打算试着回答你的问题,尽管这似乎有点含糊。如果我需要重写这个答案以适应不同的情况,请告诉我。我假设您正在尝试从web获取一个HTML文件,并从该文件中运行Javascript,以便对该文档进行操作。不幸的是,Python库都没有真正的DOM支持,而且在我找到的每个包中都不存在W3C DOM遵从性。您可以做的是使用PyV8 w3c.py DOM文件作为开始示例,并创建自己的完整dom。W3C样本Dom您需要重写这个模块,因为它不尊重引号或撇号。BeautifulSoup也不是最快的解析器。我建议使用类似lxml.etree的目标解析器选项。LXML目标分析器搜索“提要解析器接口”。然后,您可以用LXML加载HTML/Script文档,然后按下面的方式解析它,并在创建的DOM上运行所需的每个脚本。
请在下面找到一个部分示例。(请注意,HTML标准是庞大的、分散的和_highly浏览器特有的,因此您的里程可能会有所不同)。
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()发布于 2012-12-08 09:10:20
下面可以找到一个很好的例子来说明您想要做的事情:
https://github.com/buffer/thug
它是一个python客户端,它通过PyV8执行JS以进行安全研究,但是为了更简单的需求,它可以很容易地被捆绑起来。
https://stackoverflow.com/questions/11103210
复制相似问题