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登陆asp网站页面的实现代码
Jan 14 Python
Python的Flask框架与数据库连接的教程
Apr 20 Python
Python的函数的一些高阶特性
Apr 27 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
Dec 20 Python
python对日志进行处理的实例代码
Oct 06 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
python树莓派红外反射传感器
Jan 21 Python
python绘制漏斗图步骤详解
Mar 04 Python
python 字典操作提取key,value的方法
Jun 26 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 Python
Python数据结构之队列详解
Mar 21 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 默默经典版本
2009/08/04 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
探讨Hessian在PHP中的使用分析
2013/06/13 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
javascript 面向对象继承
2009/11/26 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
2016/08/17 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
python基础教程之基本内置数据类型介绍
2014/02/20 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
美国第一香水网站:Perfume.com
2017/01/23 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
集体婚礼策划方案
2014/02/22 职场文书
贷款委托书
2014/08/01 职场文书
民主生活会剖析材料
2014/09/30 职场文书
2014年协会工作总结
2014/11/22 职场文书
长江七号观后感
2015/06/11 职场文书