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脚本生成Android SALT扰码的方法
Sep 18 Python
Python标准异常和异常处理详解
Feb 02 Python
Python3实现从指定路径查找文件的方法
May 22 Python
python 网络爬虫初级实现代码
Feb 27 Python
python基于itchat实现微信群消息同步机器人
Feb 27 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
python中Apriori算法实现讲解
Dec 10 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
Python实现八皇后问题示例代码
Dec 09 Python
Python图像处理之图像拼接
Apr 28 Python
Python 线程池模块之多线程操作代码
May 20 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面向对象法则
2012/02/23 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
Python中optparse模块使用浅析
2015/01/01 Python
Python下的twisted框架入门指引
2015/04/15 Python
python如何读写json数据
2018/03/21 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python实现双色球随机选号
2020/01/01 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
带薪年假请假条
2014/02/04 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
中国梦口号
2014/06/13 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
老干部座谈会主持词
2015/07/03 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang