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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
python动态网页批量爬取
Feb 14 Python
使用Python读取大文件的方法
Feb 11 Python
PHP实现发送和接收JSON请求
Jun 07 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
python字符串Intern机制详解
Jul 01 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
python 统计文件中的字符串数目示例
Dec 24 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 Python
如何通过命令行进入python
Jul 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
PHP 5.0对象模型深度探索之绑定
2006/09/05 PHP
php下使用curl模拟用户登陆的代码
2010/09/10 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
浅谈php和.net的区别
2014/09/28 PHP
php中动态修改ini配置
2014/10/14 PHP
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
jQuery实现手风琴特效
2021/01/11 jQuery
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
Python fileinput模块使用实例
2015/05/28 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
儿童python练习实例
2018/05/27 Python
python中字符串内置函数的用法总结
2018/09/13 Python
python for 循环获取index索引的方法
2019/02/01 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
环卫工作个人总结
2015/03/04 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
四风之害观后感
2015/06/09 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS