Python/2.7 information

pyv8 (python javascript engine)

qkqhxla1 2015. 2. 24. 15:57

파이썬에서 자바스크립트 소스를 실행시킬수 있는 파이썬용 자바스크립트 엔진이다.


개인적으로 나름 많이 유용하다고 생각한다. 프록시에서 다른 사이트를 들어가거나, 네이버에서


로그인 시 자바스크립트로 암호화된 값을 던져주는데 이 값을 잘 받아서 쿠키에 설정을 잘 해야


동작이 잘 된다. 파이썬으로 자동으로 프록시에서 다른 사이트로 접속하는 스크립트를 짜려고 할 경우


이 자바스크립트값을 받아올 수가 없다.(확인 버튼을 누르는 순간 값이 생성되기 때문.) 그렇다고


자바스크립트를 일일히 다 해석해서 파이썬에 코드로 짜넣을 수가 없다.(천줄 이상의 긴 


자바스크립트이기 때문에) 그럴 경우 자바스크립트 엔진을 이용해서 알아서 연산결과를 파이썬 코드로


가져와라~ 는 식으로 코드를 짜게되면 매우 편하다. 처음에 자바스크립트 엔진에 대해서 몰랐을때에는


단순하게 WINAPI로 직접 버튼을 클릭하는 스크립트를 만들까..? 생각했는데 그건 역시나 최악일때의


방법론이다.


home : https://code.google.com/p/pyv8/

참고 : http://blog.naver.com/powerhw/220262351769


실험용 소스.

# -*- encoding: cp949 -*-
import PyV8

#js라는 변수에 자바스크립트 코드를 넣는다.
js="""
function Hello()
{
	document.write("Hello World!");
}
"""

class mock_document(object):
    def __init__(self):
        self.value=''
    def write(self, *args):
        self.value += ''.join(str(i) for i in args)
class Global(PyV8.JSClass):
    def __init__(self):
        self.document = mock_document()
        self.alert = mock_document()
scope = Global()
ctxt = PyV8.JSContext(scope)
ctxt.enter()

ctxt.eval(js+"Hello()") #여기서 자바스크립트 엔진이 위의 Hello()함수를 정의하고 실행한다.
print scope.document.value #실행한 값은 여기에 들어있다.

위에 주석적은 3군대만 알면 알아서 잘 써먹을 것 같다. *args에서 값이 반환되고, 텍스트로밖에 반환이 안 되는것 같다. alert()같은건 창을 띄워야되기때문에 안되는거 같다.


결론 : 자바스크립트 연산 후 값을 받아와야 될 때나 쓰자.......

단점 : 이거 깔면 ajax나 그런 다른 부가기능까지 들어있는줄 알았는데 순수 자바스크립트만 들어있음. 그래서 XMLHttpRequest 이런건 파이썬으로 직접 구현해줘야 된다는거.



원래는 네이버 로그인 구현해보려고 http://acuros.pe.kr/?p=198 참고해서 뭐 해보려다가 좋은 모듈만 알아감.