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 subprocess模块学习总结
Mar 13 Python
Python获取网页上图片下载地址的方法
Mar 11 Python
Python标准库defaultdict模块使用示例
Apr 28 Python
谈谈Python进行验证码识别的一些想法
Jan 25 Python
Python 中的with关键字使用详解
Sep 11 Python
Python爬虫:通过关键字爬取百度图片
Feb 17 Python
详解Python中的四种队列
May 21 Python
python使用epoll实现服务端的方法
Oct 16 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
python中scrapy处理项目数据的实例分析
Nov 22 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 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
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
基于python编写的微博应用
2014/10/17 Python
Python and、or以及and-or语法总结
2015/04/14 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
项目合作计划书
2014/01/09 职场文书
政工例会汇报材料
2014/08/26 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
三八妇女节寄语
2015/02/27 职场文书
同意报考公务员证明
2015/06/17 职场文书
社区服务活动感想
2015/08/11 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技