0x00 模块安装

参考官方文档安装

pip install PyExecJS

0x01 配置

该模块需要JS运行时环境

以下JS runtime经过官方测试认可,建议采用

PyV8:一个调用Google V8引擎的Python模块

Node.js 本文采用该运行时

以下JS runtime也支持但未经过官方测试

Apple JavaScriptCore - Included with Mac OS X

JScript :windows自带JS解释器,IE浏览器

注:对于PyV8模块目前google上只提供了支持Python2的模块安装,尚不支持Python3,使用pip直接安装时会报错。经过各种搜索,提示需要更新pip和setuptools到最新版,依然无法解决。

对于使用JScript环境的用户,只要在IE浏览器下运行无报错的js代码也可直接运行,不需要另外安装运行时环境

0x02 代码编写

js代码执行之前需要在运行时环境下编译才能执行

由于该js环境下没有window、document对象,也没有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 execjs window_Python3 ExecJS爬坑相关推荐

  1. python闲鱼爬虫_Python 爬虫爬坑路(二)——B站图片,咸鱼的正确 GET 姿势

    前言 昨天在写完 入门级爬虫之后 ,马上就迫不及待的着手开始写 B站的图片爬虫了,真的很喜欢这个破站呢 (〜 ̄△ ̄)〜 这里不涉及到 Python 爬虫的高级技巧,没有使用框架,没有考虑反爬机制,没有 ...

  2. 一个月入门Python爬虫,轻松爬取大规模数据

    如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样一个月入门Python爬虫,轻松爬的编程语言提供越来越多的优秀工具,让爬虫 ...

  3. 【转载】python3安装scrapy之windows32位爬坑

    python3安装scrapy之windows32位爬坑 原创 2016年11月06日 01:38:08 标签: scrapy / windows / python / 开源框架 / 网络爬虫 早就听 ...

  4. Insightface项目爬坑指南+使用本地数据集训练流程(MXNET版)

    其实半年多前就已经把insightface训练等一系列环节弄熟了,不得不说IBUG组的这个模型确实是开源界的翘楚,但是还是存在一些问题在某些程度上和商汤云从等大厂存在一点差距,这不妨碍大部分人日常人脸 ...

  5. pyecharts查看版本_[pyecharts]v1版本爬坑之旅

    我国庆闲(咸)余(鱼)时间完成 pyecharts的安装,随后就开始了我的爬坑之旅. pyecharts这个包安装十分顺利,但是没想到后续还有一大堆坑. 首先是版本问题,在githubgithub上的 ...

  6. Django实现一个简单的中间件,不熟悉中间件的爬坑之路

    1.在之前,写过一篇文章,自定义一个简单的中间件,文章链接如下:https://blog.csdn.net/u012561176/article/details/84024073 后面,发现还是有问题 ...

  7. Turtlebot3调试必看——爬坑笔记

    设备及系统版本: PC端: Lenovo Y7000P + Ubuntu18.04 + ROS Melodic. 如果使用电脑也为此型号,系统建议安装Ubuntu18.04,因为安装16.04后会缺少 ...

  8. centos7 安装mysql8_CentOS7中安装MySQL8.0.21爬坑记录

    在CentOS7.3中安装了MySQL8.0.21之后,就开启了一段漫长的爬坑历程,简要回顾如下: 一.从Win10中用Navicat连接安装好的MySQL服务器 出现如下异常:1045 - Acce ...

  9. 小小甜菜深度学习爬坑记

    小小甜菜深度学习爬坑记 主要目的是整理一路学习的技术分享贴.我的电脑是笔记本联想拯救者R720,显卡是GTX1050Ti.其它环境仅供参考. 安装ubuntu+win10双系统 详情见技术贴用 Eas ...

最新文章

  1. iOS 设置UILabel 的内边距
  2. R语言ggplot2可视化绘制一头奶牛、Linux下使用cowsay打印奶牛(cow)
  3. 火箭队老板成比特币粉丝 旗下豪车经销商接受BTC、BCH支付
  4. runtime运行时编程一些相关知识
  5. 数据结构课程设计---------用栈来实现表达式求值
  6. Arbitrage(判断正环 spfa写法)
  7. 译 | 像使用一台主机一样管理集群
  8. 没解决:如何离线更新eclipse支持的Compiler compliance level
  9. 职称计算机考试f11,2016全国职称计算机考试PowerPoint单选试题3
  10. 利用Python进行游戏脚本编程,不愧是最强的脚本语言!
  11. Linux命令行大全
  12. ios手机上java最好的编辑器_程序员编程利器:20款最好的免费的IDEs和编辑器
  13. Laravel5.8调试消息队列RabbitMQ
  14. 人民币利率互换小幅上行,通胀不乐观致紧缩预期趋浓_183
  15. linux中syscmd用法,M4 宏处理器
  16. 同一个PDF如何同时在两个窗口并排显示?
  17. 红米手机root之后 eclipse无法打开data目录
  18. Zomm20210715
  19. ECharts画分类甘特图
  20. 深入理解操作系统实验——bomb lab(phase_2)

热门文章

  1. Eclipse pyDev环境搭建
  2. 学游戏建模需要学什么?
  3. Hanselman和Diabetes Walk团队2007
  4. 使用下载工具internet download manager进行批量图片下载
  5. sqlserver2014补丁速度慢_SQL Server数据库查询速度慢的原因和解决方法
  6. 郭金东要求金浦新材料公司开始双重预防管控体系建设工作
  7. 【友盟+】带你逛云栖 The Third Day | U-ADplus惊艳亮相云栖大会,效果监测展现更多可能...
  8. 快速排序——Java代码实现
  9. cherry-pick的使用过程
  10. c语言的WINDOWS.h的api30-60