2012-06-19 1 views
5

우리가 PyV8 있다고 가정하자 :PyV8, DOM 구조를 조작 할 수 있습니까?

import PyV8 
ctxt = PyV8.JSContext() 

및 파이썬 DOM 구조, xml.dom

가 어떻게 PyV8에은 .js 파일을 공급할 수 있습니다 예를 들어 그것이 DOM 구조를 변경할 수 있도록하는 I 있다. 내가 가진 경우
는 내용이다 :

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

나는 DOM 항목을 제거 할.

PyV8은 완벽한 안녕하세요. 하지만 뭔가 유용한 걸보고 싶습니다.

이 명확하게하기 위해, 내가하고 싶은 것입니다 :
"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/스크립트 문서를 LXML과 함께로드하고 아래와 같이 구문 분석 한 다음 생성 된 DOM에서 필요한 각 스크립트를 실행할 수 있습니다.

다음 부분 예를 찾으십시오. HTML 표준은 방대하고 흩어져 있으며 브라우저와 관련하여 매우 다양하므로 귀하의 마일리지가 다를 수 있습니다. 그것은 보안 연구 목적 PyV8를 통해 JS를 실행하는 파이썬 HTTP 클라이언트의

https://github.com/buffer/thug

있지만 묶여 될 수 있습니다

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에서 JUNCTION 파일을 실행할 수 없습니다. – Sergey

4

당신이 뭘하려는 건지에 대한 좋은 예는 여기에서 찾을 수 있습니다 간편하게 사용할 수 있습니다.