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编程实现语音控制电脑
Apr 01 Python
python监控网站运行异常并发送邮件的方法
Mar 13 Python
Python实现递归遍历文件夹并删除文件
Apr 18 Python
Python采用Django开发自己的博客系统
Sep 29 Python
Python+OpenCV目标跟踪实现基本的运动检测
Jul 10 Python
python里dict变成list实例方法
Jun 26 Python
python画图把时间作为横坐标的方法
Jul 07 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
pytorch损失反向传播后梯度为none的问题
May 12 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 Python
python中pymysql包操作数据库方法
Apr 19 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加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
Python入门篇之函数
2014/10/20 Python
python避免死锁方法实例分析
2015/06/04 Python
python列表返回重复数据的下标
2020/02/10 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
Python 解析简单的XML数据
2020/07/24 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
中国高端家电购物商城:顺电
2018/03/04 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
信息系统专业个人求职信范文
2013/12/07 职场文书
迎元旦广播稿
2014/02/22 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
微笑服务标语
2014/06/24 职场文书
仓库管理制度范本
2015/08/04 职场文书
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB