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爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
Python简单操作sqlite3的方法示例
Mar 22 Python
浅谈Python中range和xrange的区别
Dec 20 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
想学python 这5本书籍你必看!
Dec 11 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
对Django中的权限和分组管理实例讲解
Aug 16 Python
python3 实现口罩抽签的功能
Mar 11 Python
写好Python代码的几条重要技巧
May 21 Python
pytorch 预训练模型读取修改相关参数的填坑问题
Jun 05 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
javascript 一些用法小结
2009/09/11 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
微信小程序实现简单评论功能
2018/11/28 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
python 处理string到hex脚本的方法
2018/10/26 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Python银行系统实战源码
2019/10/25 Python
python批量生成条形码的示例
2020/10/10 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
工程建设实施方案
2014/03/14 职场文书
2014年大学生四年规划书范文
2014/04/03 职场文书
服装设计师求职信
2014/06/04 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
基于angular实现树形二级表格
2021/10/16 Javascript