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之编写类之二方法
Oct 11 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
python对数组进行反转的方法
May 20 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
python基础 range的用法解析
Aug 23 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
python调用有道智云API实现文件批量翻译
Oct 10 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中逗号与点号的区别
2013/08/05 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
介绍Python中的一些高级编程技巧
2015/04/02 Python
python学习基础之循环import及import过程
2018/04/22 Python
python实时监控cpu小工具
2018/06/21 Python
python保存文件方法小结
2018/07/27 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
Python中一些深不见底的“坑”
2019/06/12 Python
Python使用python-docx读写word文档
2019/08/26 Python
python字典与json转换的方法总结
2020/12/28 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
护理专业本科生自荐信
2013/10/01 职场文书
成人大专生实习期的自我评价
2013/10/02 职场文书
学期自我评价
2014/01/27 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android