ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

两个库搞定python中引用javascript代码块/文件

2022-05-18 21:35:48  阅读:225  来源: 互联网

标签:搞定 python 代码 javascript js js2py world hello


在一些特殊的python应用场景下需要逆向执行javascript代码块或者.js文件,比如:爬虫的时候下载下来的html页面中包含你要逆向执行的js代码块。

file

【阅读全文】

在python编程中提供了两个非标准库js2py与PyExecJS都能实现在python中运行代码块的效果的。

1、js2py的使用过程

js2py适用于js代码少量情况,如果用于很长的混淆的js代码,转译过来的大概率会报错。

# 使用pip的方式安装: pip install js2py

执行js代码块的方式来运行代码

import js2py  # 导入js2py处理库

# 创建javascript代码块的python字符串

js_code = '''
      var date = new Date().getTime()   
'''

调用 js2py.eval_js函数执行javascript代码块

result = js2py.eval_js(js_code)

print(result)

# 1648984478464

执行js文件的方式来运行代码

# 创建一个javascript文件hello_world.js
#
# function hello_world(name){
# 	return name;
# }

hello_world = js2py.eval_js(open('./hello_world.js', 'r', encoding='utf-8').read())

print(hello_world("公众号:Python 集中营"))

# 我是 公众号:Python 集中营

2、PyExecJS的使用过程

通过python代码去执行JavaScript代码的库,依赖于javascript运行环境,最好可以装个node.js,相比于js2py,他可以运行多一点的js代码。

使用pip的方式安装: pip install PyExecJS

import execjs  # 导入execjs处理库

print(execjs.get().name)  # 获取javascript的默认执行环境
# Node.js (V8)

我的windows上面默认的js环境是nodejs,当然是用操作系统默认的js环境也是OK的。

执行一下刚刚上面创建的hello_world.js文件。

# 需要先将即将执行的代码块编译一下
compile_code = execjs.compile(open('./hello_world.js', 'r', encoding='utf-8').read())

# 使用编译后的代码块call函数调用js文件中的hello_world函数
result = compile_code.call('hello_world','python')

print(result)

# python

还可以使用eval函数进行调用

result = compile_code.eval("hello_world('python')")

print(result)
# python

当然,也可以像js2py一样直接执行js代码块的。

result = execjs.eval('""+ new Date().getTime()')

print(result)
# 1648986998002

注意:使用execjs执行javascript代码块时,如果使用中文会出现乱码的情况不能自动转换编码。并且在中/英文混用的时候会出现报错的情况。

file

【往期精彩】

python实现excel数据与mysql数据库互通有无!

python 实现超快窗口截图,自动获取当前活动窗口并展示截图...

怎么用python做一个解压缩小工具,以后再也不用下载各种格式的解压缩软件了...

python中最简单的turtle绘图:奥运五环!

知识汇总:python办公自动化应该学习哪些内容?

标签:搞定,python,代码,javascript,js,js2py,world,hello
来源: https://www.cnblogs.com/lwsbc/p/16286341.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有