Js2Py是什么?

Js2Py是一个100%使用纯Python编写的JavaScript翻译器和解释器库,通过将JavaScript直接翻译成Python来工作,可以轻松地从Python代码中运行JavaScript代码。

安装

pip install js2py

简单示例:

>>> import js2py
>>> js2py.eval_js('console.log( "Hello World!" )')
'Hello World!'

>>> add = js2py.eval_js('function add(a, b) {return a + b}')
>>> add(1, 2) + 3
6

>>> add.constructor
function Function() { [python code] }

>>> js2py.require('underscore')
'function _(obj) { [python code] }'

代码案例

案例一:
此案例中,数据本身经过了多轮的加密,需要通过反复多次清洗JavaScript代码 -> 执行JavaScript代码,来得到最终结果。

import js2py

# 获取<script>标签的内容,里面包含了需要执行的JavaScript代码
script_tag = response.css('.uk-list.tm-list script::text').extract_first()

# 清洗成可运行的JavaScript代码
script1 = script_tag.replace('eval(d)', 'd').replace('<script type="text/javascript">','')

# 使用js2py.eval_js()函数执行JavaScript代码,之后再通过replace()函数清洗成可执行的js代码
script2 = js2py.eval_js(script1).replace('eval(', '')[:-1]
script3 = js2py.eval_js(script2).replace('document.write(', '')[:-1]

# 执行清洗好的JavaScript代码得到最终结果
a_tag = js2py.eval_js(script3)

案例二:

此案例相对简单,不需要经过复杂的多轮清洗,只需先获得可执行的JavaScript代码,再通过js2py.eval_js()函数执行即可。

import js2py

# 获取<script>标签的内容,里面包含了需要执行的JavaScript代码
script_tag = response.css('.h4 script::text').extract_first()

# 清洗<script>标签的内容,得到可执行的JavaScript代码
script = re.search(r'\".*\);', script_tag).group()[1:].replace('\\', '') + 'd'

# 执行JavaScript代码得到最终结果
email = js2py.eval_js(script)