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中zfill()方法的使用教程
May 20 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
python实现获取单向链表倒数第k个结点的值示例
Oct 24 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
如何通过python实现人脸识别验证
Jan 17 Python
Python通过socketserver处理多个链接
Mar 18 Python
Keras实现DenseNet结构操作
Jul 06 Python
详解Python 函数参数的拆解
Sep 02 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP的password_hash()使用实例
2014/03/17 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
php实现的通用图片处理类
2015/03/24 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
js实现简单进度条效果
2020/03/25 Javascript
Python 中的 else详解
2016/04/23 Python
python版本的仿windows计划任务工具
2018/04/30 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
英语国培研修感言
2014/02/13 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
人生感悟经典句子
2019/08/20 职场文书
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
【2·13】一图读懂中国无线电发展
2022/02/18 无线电