首页 > 编程语言 >Python调用 JS -PyExecJS, Python 调用 JS -js2py

Python调用 JS -PyExecJS, Python 调用 JS -js2py

时间:2023-07-09 18:23:58浏览次数:44  
标签:调用 num1 PyExecJS Python js js2py JS

Python调用 JS -PyExecJS

image-20220805153635017

日常 Web 端爬虫过程中,经常会遇到参数被加密的场景,因此,我们需要分析网页源代码

通过调式,一层层剥离出关键的 JS 代码,使用 Python 去执行这段代码,得出参数加密前后的 Python 实现

//计算两个数的和
function add(num1, num2) {
  return num1 + num2;
}

安装

https://github.com/doloopwhile/PyExecJS

PyExecJS 是使用最多的一种方式,底层实现方式是:在本地 JS 环境下运行 JS 代码

pip install PyExecJS==1.5.1

调用JS代码

import execjs


js_content = '''
function add(num1, num2) {
   return num1 + num2;
}
'''
# 编译加载js字符串
pej = execjs.compile(js)
rs = pej.call("add", 2, 3)
print(rs)

Python 调用 JS -js2py

image-20220805164355053

https://github.com/PiotrDabkowski/Js2Py

js2py作为一个纯 Python 实现的 JS 解释器,可以完全脱离 JS 环境,直接将 JS 代码转换为 Python 代码

pip install js2py==0.71

然后使用 js2py 中的EvalJs()方法生成一个上下文对象

import js2py


js_source='''
function add(num1,num2){
   return num1+num2
}
'''
# 建立js执行的上下文
ctx = js2py.EvalJs()
# 解析js代码
ctx.execute(js_source)
# 调用js里的方法
rs = ctx.add(100,210)
print(rs)

 

标签:调用,num1,PyExecJS,Python,js,js2py,JS
From: https://www.cnblogs.com/jiangjiayun/p/17539101.html

相关文章

  • JS 中单例模式的具体实现细节和实践
    通用的创建单例模式的方法:1创建实例对象的职责和管理单例的职责分别放置于两个方法中。2两个方法可以互相独立而互不影响。3惰性加载单例模式,等到用到的时候才加载。1letcreateSingle=function(fn){2letresult;3returnfunction(){4//app......
  • Python | 认识编码
    编码(Encoding)是将字符转换为计算机可以处理的二进制数据的过程。在计算机中,所有的文本都是以二进制形式存储的,因此需要使用编码将文本转换为二进制数据。Python中的编码指的是将字符串转换为字节串(bytes)的过程,或将字节串转换为字符串的过程。编码与解码在Python中,字符串是以......
  • python打包Windows.exe程序(pyinstaller)
    python打包Windows.exe程序(pyinstaller)基础命令pipinstallpyinstaller使用pip命令来安装pyinstaller模块。-F:pyinstaller-Fhello.py-phello2.py-D:pyinstaller-Dhello.py-phello2.py-i:pyinstaller-itb.ico-Fhello.py-phello2.py其中前一个文件hel......
  • jmeter--后置处理器之json提取器介绍和使用
    1、json提取器使用场景jmeter后置处理器中,有三种提取器组件:json提取器、xpath提取器、正则表达式提取器,这三种组件的功能相同,只是分别使用三种不同的方式进行提取数值。一般在使用jmeter来调接口时,B接口的请求参数值是A接口的响应值时,需要通过提取器组件来提取出A接口相应中的......
  • python获取小红书web_session,以及解决x-s签名验证(2023-07-09)
    一、web_session请求接口:https://edith.xiaohongshu.com/api/sns/web/v1/login/activate请求类型:post提交数据:{}这儿是两个字符{},笔者最初提交None,总得不到结果,chromeF12才发现需要这两个字符。二、签名验证x-s 该请求需要x-s签名验证,签名代码如下:a1="186d30820a4......
  • python:File
     defgetFile(prefixletter:str,ok:bool):"""文件名添加后缀:paramprefixletter::paramok:True增加后缀,否则为删除:return:"""try:nowfoloder=os.getcwd()curpath=os.path.join(nowfoloder,r&q......
  • 配置steam input遇到的坑,调用steam input API 之前的准备工作
    配置steaminput遇到的坑,调用steaminputAPI之前的准备工作 总共需要3种类型的文件1.steam_appid.txt这个文件里面就只有一个id,对应着你正在调试的app,这个文件必须放在你生成的game.exe旁边比如在vc的Debug文件夹中,或者工程的根目录下.缺这个文件SteamAPI_Init无法调......
  • JS设置网页图标
    <body><script>//设置网页图标functionseticon(url){varlink=document.querySelector("link[rel*='icon']")||document.createElement('link');link.type='image/x-ico......
  • springcloud - zipkin链路调用
     通过sleuth,开启zipkin可通过访问localhost:9411/zipkin开启web界面查看链路调用traceid就是一个服务idparentid就是调用者的id原始服务parentid=null服务提供者provider导入依赖     <!--包含了sleuth+zipkin-->     <dependency>   ......
  • python - 函数(二)
    4.传递列表defgreet_users(names):"""向列表中的每位用户发出问候。"""fornameinnames:msg=f"Hello,{name.title()}"print(msg)usernames=['hanks','jackson','jimmy']......