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人人网登录应用实例
Sep 26 Python
Python和GO语言实现的消息摘要算法示例
Mar 10 Python
一篇文章快速了解Python的GIL
Jan 12 Python
Python之文字转图片方法
May 10 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
详解Python3注释知识点
Feb 19 Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
Django rest framework分页接口实现原理解析
Aug 21 Python
Python 高效编程技巧分享
Sep 10 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
对javascript继承的理解
2016/10/11 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
python多线程操作实例
2014/11/21 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
python实现批量注册网站用户的示例
2019/02/22 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
python中wheel的用法整理
2020/06/15 Python
Python绘制组合图的示例
2020/09/18 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
web页面录屏实现
2019/02/12 HTML / CSS
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
乡下人家教学反思
2014/02/01 职场文书
报告会主持词
2014/04/02 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
先进班集体事迹材料
2014/12/25 职场文书
超市食品安全承诺书
2015/04/29 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
SQL注入详解及防范方法
2021/12/06 MySQL