python爬虫 execjs安装配置及使用


Posted in Python onJuly 30, 2019

模块安装

参考官方文档安装

pip install PyExecJS

配置

该模块需要JS运行时环境

以下JS runtime经过官方测试认可,建议采用

  • PyV8:一个调用Google V8引擎的Python模块
  • Node.js 本文采用该运行时
  • PhantomJS
  • Nashorn

以下JS runtime也支持但未经过官方测试

  • Apple JavaScriptCore - Included with Mac OS X
  • JScript :windows自带JS解释器,IE浏览器
  • SlimerJS

注:对于PyV8模块目前google上只提供了支持Python2的模块安装,尚不支持Python3,使用pip直接安装时会报错。经过各种搜索,提示需要更新pip和setuptools到最新版,依然无法解决。

对于使用JScript环境的用户,只要在IE浏览器下运行无报错的js代码也可直接运行,不需要另外安装运行时环境

代码编写

js代码执行之前需要在运行时环境下编译才能执行

由于该js环境下没有windowdocument对象,也没有console面板,因此在使用某些基于浏览器的原生对象在编译过程时会报错。所以在使用compile函数时尽量以函数的形式来写js代码,方便Python调用。

import execjs

name = execjs.get().name # 获取JS的运行时名称,写代码时可不写
ctx = execjs.compile("""
    function add(x, y) {
        return x + y;
     }
""") # 获取代码编译完成后的对象
 ctx.call("add", 1, 2) # 调用js函数add,并传入它的参数
 ctx.eval("add({0}, {1})").format(1,2) # 使用eval的写法同上,但是在传入字符串或者其他类型的数据时需要添加对应的格式,如下所示,具体可在程序中debug
 ctx.eval('add("{0}", "{1}")').format("1","2")

另外有时候js代码过长,我们可以将js代码先保存到文件中。

由于历史遗留问题,ExecJS以前使用python2编写的,所以在代码实现过程中会涉及到文件编码的问题。ExecJS先将js代码读到内存中,然后再把调用js的代码和js文件的代码一同写入到一个临时文件(C:\Users\user\AppData\Local\Temp\xx.js)中。

如果js文件采用的是UTF-8编码,那么在写入到临时文件时,模块会报UnicodeEncodeError: 'gbk' codec can't encode character xxx ,主要是因为模块在进行文件写入时采用的是windows的默认编码gbk,而没有指定encoding=utf-8,所以js文件需要以gbk编码保存。

import execjs

with open(r"C:\Users\user\Desktop\security.js", 'r') as f:
    content = f.read() #读取js文件的全部内容到content变量中
ctx = execjs.compile(content)
jscode = 'getkey("{0}","10001","{1}")'.format(username, pubkey)
print(ctx.eval(jscode))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Web服务器Tornado使用小结
May 06 Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
python中字符串的操作方法大全
Jun 03 Python
Python对象与引用的介绍
Jan 24 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
django-rest-framework 自定义swagger过程详解
Jul 18 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
在Python中如何使用yield
Jun 07 Python
python基于turtle绘制几何图形
Jun 15 Python
python 实现识别图片上的数字
Jul 30 #Python
django框架模型层功能、组成与用法分析
Jul 30 #Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 #Python
python爬虫 爬取58同城上所有城市的租房信息详解
Jul 30 #Python
python join方法使用详解
Jul 30 #Python
python实现屏保程序(适用于背单词)
Jul 30 #Python
python实现各种插值法(数值分析)
Jul 30 #Python
You might like
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
基于php无限分类的深入理解
2013/06/02 PHP
提高PHP编程效率的方法
2013/11/07 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
提取字符串中年月日的函数代码
2013/11/05 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
python热力图实现简单方法
2021/01/29 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
语文教育专业应届生求职信
2013/11/23 职场文书
微信营销策划方案
2014/02/24 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
生物学专业求职信
2014/07/23 职场文书
党员剖析材料范文
2014/12/18 职场文书
Python实现照片卡通化
2021/12/06 Python