Executing Javascript from Python Executing Javascript from Python python python

Executing Javascript from Python


You can also use Js2Py which is written in pure python and is able to both execute and translate javascript to python. Supports virtually whole JavaScript even labels, getters, setters and other rarely used features.

import js2pyjs = """function escramble_758(){var a,b,ca='+1 'b='84-'a+='425-'b+='7450'c='9'document.write(a+c+b)}escramble_758()""".replace("document.write", "return ")result = js2py.eval_js(js)  # executing JavaScript and converting the result to python string 

Advantages of Js2Py include portability and extremely easy integration with python (since basically JavaScript is being translated to python).

To install:

pip install js2py


Using PyV8, I can do this. However, I have to replace document.write with return because there's no DOM and therefore no document.

import PyV8ctx = PyV8.JSContext()ctx.enter()js = """function escramble_758(){var a,b,ca='+1 'b='84-'a+='425-'b+='7450'c='9'document.write(a+c+b)}escramble_758()"""print ctx.eval(js.replace("document.write", "return "))

Or you could create a mock document object

class MockDocument(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 = MockDocument()scope = Global()ctx = PyV8.JSContext(scope)ctx.enter()ctx.eval(js)print scope.document.value


One more solution as PyV8 seems to be unmaintained and dependent on the old version of libv8.

PyMiniRacer It's a wrapper around the v8 engine and it works with the new version and is actively maintained.

pip install py-mini-racer

from py_mini_racer import py_mini_racerctx = py_mini_racer.MiniRacer()ctx.eval("""function escramble_758(){    var a,b,c    a='+1 '    b='84-'    a+='425-'    b+='7450'    c='9'    return a+c+b;}""")ctx.call("escramble_758")

And yes, you have to replace document.write with return as others suggested