2012-06-19 7 views
5

मान देता है हम PyV8 है:पीवीवी 8, क्या मैं डोम संरचना में हेरफेर कर सकता हूं?

import PyV8 
ctxt = PyV8.JSContext() 

और एक अजगर DOM संरचना, उदाहरण के लिए xml.dom

मैं कैसे PyV8 करने के लिए एक .js फ़ाइल को खिलाने सकते हैं ताकि यह डोम-संरचना को बदल सकता है कि मैं की है।
अगर मैं था यह सामग्री है:

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

मैं डोम आइटम हटाया जा करना चाहते हैं।

PyV8 सही हैलो दुनिया उदाहरण है। लेकिन मैं कुछ उपयोगी देखना चाहता हूँ।

स्पष्ट है कि, मुझे क्या करना चाहते हैं:
"Javascript file" -> - जादू -> - प्रारूपण के लिए DOM, (already built with html file) and changed now with passed javascript file

उत्तर

2

Appologies। मैं जितना संभव हो उतना स्थान प्राप्त कर सकता था, लेकिन मेरे स्क्रीन रीडर को एसओ के स्वरूपण नियंत्रण पसंद नहीं हैं।

मैं अपने प्रश्न का उत्तर देने शॉट लेने के लिए है, हालांकि यह एक बालक अस्पष्ट लगता जा रहा हूँ। अगर मुझे एक अलग स्थिति में फिट करने के लिए इस जवाब को फिर से लिखना है तो कृपया मुझे बताएं। मुझे लगता है कि आप वेब से एक HTML फ़ाइल प्राप्त करने का प्रयास कर रहे हैं, और इस फ़ाइल के अंदर से जावास्क्रिप्ट चलाए गए दस्तावेज़ पर कार्य करने के लिए। दुर्भाग्य से, पायथन xml पुस्तकालयों में से कोई भी सच डोम समर्थन है, और W3C डोम अनुपालन हर पैकेज मैं पाया है में अस्तित्वहीन है। आप क्या कर सकते हैं PV8 w3c.py dom फ़ाइल को प्रारंभिक उदाहरण के रूप में उपयोग करें, और अपना स्वयं का पूर्ण डोम बनाएं। W3C Sample Dom आप इसे उद्धरण या apostrophys सम्मान नहीं करता है के रूप में, इस मॉड्यूल के पुनर्लेखन के लिए हालांकि की आवश्यकता होगी। सुंदर सूप भी सबसे तेज पार्सर नहीं है। मैं lxml.etree के लक्ष्य पार्सर विकल्प जैसे कुछ का उपयोग करने की अनुशंसा करता हूं। "फ़ीड पार्सर इंटरफेस" के लिए LXML Target Parser खोजें। फिर, आप एलएक्सएमएल के साथ एक एचटीएमएल/स्क्रिप्ट दस्तावेज़ लोड कर सकते हैं, इसे नीचे पार्स करें, और बनाई गई डीओएम पर आपको आवश्यक प्रत्येक स्क्रिप्ट को चलाएं।

एक आंशिक उदाहरण नीचे का पता लगाएं। (कृपया ध्यान दें कि एचटीएमएल मानकों बड़े पैमाने पर, बिखरे हुए हैं, और _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() 
+0

लेकिन जैसा कि मैंने समझ लिया कि यह सिर्फ डोम बनाता है। मैं जावास्क्रिप्ट फ़ाइल को तैयार डोम पर चलाने के लिए फ़ीड नहीं कर सकता, क्या मैं कर सकता हूं? – Sergey

4

तुम क्या करने की कोशिश कर रहे क्या एक अच्छा उदाहरण यहां पाया जा सकता है:

https://github.com/buffer/thug

यह एक अजगर http सुरक्षा अनुसंधान प्रयोजनों के लिए PyV8 के माध्यम से जे एस क्रियान्वित ग्राहक है, लेकिन तंगी हो सकता है सरल जरूरतों के लिए आसानी से नीचे।

संबंधित मुद्दे