Python执行JS代码的三种方式

 更新时间:2024年01月09日 10:44:25   作者:银古_1427  
以前的数据靠买,现在的数据靠爬”,越来越多的学者通过网络爬虫来获取数据,但是做爬虫的人都知道,现在的很多网站都在和我们斗智斗勇,防护普遍越来越好,破解JS加密只是第一步,之后就是如何在我们的Python代码中直接执行JS,下面介绍一下几种Python中执行JS代码的方法

1. 使用 js2py

基本操作:

import js2py
 
 
# 执行单行js语句
js2py.eval_js("console.log(abcd)")
>>> abcd
 
# 执行js函数
add = js2py.eval_js("function add(a, b) {return a + b};")
print(add(1,2))
>>> 3
 
# 另一种方式
js = js2py.EvalJs({})
js.execute("js语句")

骚操作一: 在js代码中引入python对象 或 python代码

# 在js代码中引入python对象
context = js2py.EvalJs({'python_sum': sum})
context.eval('python_sum(new Array(1,4,2,7))')
>>> 14
 
# 在js代码中加入python代码
js_code = '''
 var a = 10
 function f(x) {return x*x}
'''
context.execute(js_code)
context.f("14") 或 context.f(14)
>>> 196

骚操作二: 将js代码转为python模块,再使用import 导入

# 转换js文件
js2py.translate_file('example.js', 'example.py')
 
# 现在可以导入example.py
from example import example
example.someFunction()

详见:https://github.com/PiotrDabkowski/Js2Py

2. 使用 execjs

import execjs
 
js_code = open('file.js',encoding='utf-8').read()
ctx = execjs.compile(js_code)
 
# 第一个参数为ja代码中的函数名, 后面为函数对应的参数
result = ctx.call('function_name', *args)

3. 使用subprocess调用node子进程

前面两种只适合执行少量js代码的情况,当有大量js代码要执行时,还是建议直接调用node

import subprocess
 
# js文件最后必须有输出,我使用的是 console.log
pro = subprocess.run("node abc.js", stdout=subprocess.PIPE)
# 获得标准输出
_token = pro.stdout
# 转一下格式
token = _token.decode().strip()

关于执行效率:

py2js有时候在加载一些加密函数的时候效率低的可怜,大概是因为执行机制的不同:

py2js直接调用的nodejs引擎不过这个库用的nodejs解析语法树转成py代码,性能挺低的,还不如直接用execjs调nodejs或自己封装子进程调用;execjs调用的pyv8,不过默认的pyv8的引擎挺老的,es5好多特征都不支持

以上就是Python执行JS代码的三种方式的详细内容,更多关于Python执行JS代码的资料请关注脚本之家其它相关文章!

相关文章

  • Python正则表达式如何进行字符串替换实例

    Python正则表达式如何进行字符串替换实例

    Python正则表达式在使用中会经常应用到字符串替换的代码。这篇文章主要介绍了Python正则表达式如何进行字符串替换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • Python中MySQLdb和torndb模块对MySQL的断连问题处理

    Python中MySQLdb和torndb模块对MySQL的断连问题处理

    这篇文章主要介绍了Python中MySQLdb和torndb模块对MySQL的断连问题处理,torndb使用起来相对更加简洁一些,需要的朋友可以参考下
    2015-11-11
  • OpenCV NAO机器人辅助捡球丢球流程分析

    OpenCV NAO机器人辅助捡球丢球流程分析

    这篇文章主要介绍了OpenCV NAO机器人辅助捡球丢球,本项目使用NAO机器人识别球并捡起,然后将其扔到指定位置,主要涉及图像的获取、滤波、目标物体定位和NAO机器人的运动控制,需要的朋友可以参考下
    2022-05-05
  • Python闭包与闭包陷阱举例详解

    Python闭包与闭包陷阱举例详解

    闭包并不只是一个Python中的概念,在函数式编程语言中应用较为广泛,下面这篇文章主要给大家介绍了关于Python闭包与闭包陷阱的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • pytorch 实现在测试的时候启用dropout

    pytorch 实现在测试的时候启用dropout

    这篇文章主要介绍了pytorch 实现在测试的时候启用dropout的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python控制台获取输入与常见的正则表达式用法

    Python控制台获取输入与常见的正则表达式用法

    这篇文章主要给大家介绍了关于Python控制台获取输入与常见的正则表达式用法的相关资料,在Python编程中,控制台输入和正则表达式是两个重要而实用的概念,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 详解Python中的数据清洗工具flashtext

    详解Python中的数据清洗工具flashtext

    FlashText是GitHub上的一个开源Python库,正如之前所提到的,它在提取关键字和替换关键字任务上有着极高的性能。本文将详解一下flashtext的使用,需要的可以参考一下
    2022-06-06
  • Django 创建新App及其常用命令的实现方法

    Django 创建新App及其常用命令的实现方法

    这篇文章主要介绍了Django 创建新App及其常用命令的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 用Python将库打包发布到pypi

    用Python将库打包发布到pypi

    这篇文章主要介绍了用Python将库打包发布到pypi,文中有很详细的代码作参考,对正在学习python的小伙伴们有很好的学习价值,需要的朋友可以参考下
    2021-04-04
  • Python如何将装饰器定义为类

    Python如何将装饰器定义为类

    这篇文章主要介绍了Python如何将装饰器定义为类,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论