5

PyV8 があると仮定しましょう:

import PyV8
ctxt = PyV8.JSContext()

およびPython DOM構造、たとえばxml.dom

私が持っているDOM構造を変更できるように、.jsファイルをPyV8にフィードするにはどうすればよいですか。
その内容があれば:

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

dom アイテムを削除したい。

PyV8には完全な hello-world の例があります。しかし、私は何か役に立つものを見たいと思っています。

明確にするために、私がやりたいことは次のとおりです。
"Javascript file"-->--魔法-->--DOM, (already built with html file) and changed now with passed javascript file

4

2 に答える 2

4

あなたがやろうとしていることの良い例はここにあります:

https://github.com/buffer/thug

これは、セキュリティ研究の目的でPyV8を介してJSを実行するPython httpクライアントですが、より単純なニーズのために簡単にストラップダウンできます。

于 2012-12-08T09:10:20.840 に答える
2

整形お許しを。できる限りスペースを空けましたが、私のスクリーン リーダーは SO の書式設定コントロールを好みません。

少しあいまいに思えますが、あなたの質問に答えようと思います。別の状況に合わせてこの回答を書き直す必要がある場合はお知らせください。Web から HTML ファイルを取得し、このファイル内から Javascript を実行して、そのドキュメントを処理しようとしていると思います。残念ながら、Python xml ライブラリには真の DOM サポートがなく、私が見つけたすべてのパッケージで W3C DOM 準拠は存在しません。できることは、PyV8 w3c.py dom ファイルを開始例として使用し、独自の完全な DOM を作成することです。 W3C サンプル Dom ただし、引用符やアポストロフィを考慮しないため、このモジュールを書き直す必要があります。また、BeautifulSoup は最速のパーサーではありません。lxml.etree のターゲット パーサー オプションのようなものを使用することをお勧めします。 LXML ターゲット パーサー 「フィード パーサー インターフェース」を検索します。次に、LXML を使用して HTML/スクリプト ドキュメントをロードし、以下のように解析して、作成された 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()
于 2012-06-20T04:44:38.730 に答える