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中lambda与def用法对比实例分析
Apr 30 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
python实现的自动发送消息功能详解
Aug 15 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
Python实现word2Vec model过程解析
Dec 16 Python
python模拟点击网页按钮实现方法
Feb 25 Python
python中sklearn的pipeline模块实例详解
May 21 Python
python实现经纬度采样的示例代码
Dec 10 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 03 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
PHP无敌近乎加密方式!
2010/07/17 PHP
PHP仿盗链代码
2012/06/03 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
js 与或运算符 || && 妙用
2009/12/09 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
9种python web 程序的部署方式小结
2014/06/30 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
体育教育个人自荐信范文
2013/12/01 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
安全责任书范文
2014/08/25 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python