2012-06-19 6 views
5

は、私たちがPyV8を持っていることを前提としています持ってる。私が持っていた場合
それはコンテンツです:PyV8、DOM構造を操作できますか?</p> <pre><code>import PyV8 ctxt = PyV8.JSContext() </code></pre> <p>とPythonのDOM構造、例えば<code>xml.dom</code></p> <p>それはI DOM構造を変更することができるように、私はPyV8への.jsファイルを養うことができます方法:

$("#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を作成することです。 引用符やアポストロフィを尊重しないので、このモジュールを書き直す必要があります。 BeautifulSoupはまた、最速のパーサでもありません。 lxml.etreeのターゲットパーサーオプションのようなものを使用することをお勧めします。 LXML Target Parser 「フィードパーサーインターフェイス」を検索します。 次に、HTML/ScriptドキュメントをLXMLで読み込み、以下のように解析し、作成した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() 
+0

しかし、私が理解したように、それは単にdomを構築する。私は準備が整いましたDOM上で実行するjavascriptファイルをフィードすることはできません、できますか? – Sergey

4

良い例がここで見つけることができます:

https://github.com/buffer/thug

これは、セキュリティ研究目的のためにPyV8経由JSを実行するPythonのHTTPクライアントですが、苦しいことができますより簡単なニーズに簡単に対応できます。

関連する問題

 関連する問題