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通过socket查询whois的方法
Jul 18 Python
详解Python中的array数组模块相关使用
Jul 05 Python
详解python中字典的循环遍历的两种方式
Feb 07 Python
python 3.3 下载固定链接文件并保存的方法
Dec 18 Python
对python pandas读取剪贴板内容的方法详解
Jan 24 Python
Python3几个常见问题的处理方法
Feb 26 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
python3 map函数和filter函数详解
Aug 26 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
基于Python正确读取资源文件
Sep 14 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 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 minixml详解
2008/07/19 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python通过函数属性实现全局变量的方法
2015/05/16 Python
Python实现豆瓣图片下载的方法
2015/05/25 Python
python追加元素到列表的方法
2015/07/28 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
python requests使用socks5的例子
2019/07/25 Python
如何基于python测量代码运行时间
2019/12/25 Python
使用Tkinter制作信息提示框
2020/02/18 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
网上书店创业计划书
2014/01/12 职场文书
活动总结报告格式
2014/05/09 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
中英文求职信范文
2015/03/19 职场文书