Python 执行 JS 代码 —— PyExecJS

      大家会遇到网页请求数据是经过 JS 处理的,特别是模拟登录时可能有加密请求。而目前绝大部分前端 JS 代码都是经过混淆的,可读性极低,想理解代码逻辑需要花费大量时间。因此不要着急使用 Selenium 暴力解决,毕竟 Selenium 严重拖慢爬虫效率,我们可以尝试使用一些第三方库,来直接执行前端 JS 代码得到处理过后的结果

PyExecJS

     这个库主要是将 JS 代码运行在本地的 JS 环境中,优点是我们有多种 JS 环境的选择,官方推荐了 PyV8、Node.js、PhantomJS、Nashorn 四种,当然缺点是必须安装一种环境导致不是很轻量,而且调用时有一个启动环境过程,还是有明显缓慢的。

一、Node.js安装配置

(1) JS 环境,推荐安装Node.js ,Node.js官方网站,安装方便,最新版也整合了V8引擎

Python 执行 JS 代码 —— PyExecJS_第1张图片

(2)安装后,将Node.js添加路径到系统环境变量

(3)在cmd输入node -v,如下图,即配置环境变量成功。 

二、Pycharm配置 

(1) 在Settings | Plugins里边,搜索NodeJS,然后点击下载;

Python 执行 JS 代码 —— PyExecJS_第2张图片

 

(2) 在Settings | Languages & Frameworks| Node.js and NPM ,查看配置当前安装的node.js的路径。 

Python 执行 JS 代码 —— PyExecJS_第3张图片

 三、PyExecJS安装

pip install PyExecJS

 四、Pycharm运行Js代码

(1) js文件

Python 执行 JS 代码 —— PyExecJS_第4张图片

 (2)调用js文件中的函数

Python 执行 JS 代码 —— PyExecJS_第5张图片

 code: 

import execjs

def my(setence):
    #读取js文件
    with open('show.js','r',encoding='utf-8') as f:
        reader=f.read()
    #加载编译读取内容
    loader=execjs.compile(reader)
    #调用js文件中的方法
    r =loader.call('say',setence)
    #返回结果
    return r


if __name__ == '__main__':
     #调用方法
     print(my('What can you do any Kung Fu,John?'))

(3)运行效果

 

 

 

 

你可能感兴趣的:(Python,javascript,python,前端)