python 调用 javascript-Python实现调用js并获取参数

2023-08-28 0 7,209 百度已收录

最近接到一个小项目,要使用python实现一些底层的socket来完成数据采集和数据打包。 其实一开始并不难。 其中一种是使用python获取加密签名,然后传递给第三方socket来获取token。 其中python 调用 javascript,它的后端加密算法之一使用crypto.js来进行一些列加密,尽管这样做很困难。 所以想用python调用js生成加密签名,然后返回结果,查询一些解决方案并实现,最终得到想要的结果,所以在这里分享一下。

1.js文件引入crypto.js文件

let Crypto = require("./../node_modules/crypto.js");
const id="4QF88sui99kuiOH";//id
const ts=((new Date()).valueOf().toString()).substr(0,10);//获取当前时间戳
const signStr ="id="+id+"&ts="+ts;
//封装参数
function tokenObject(id,ts,signature){
    this.id = id;
    this.ts = ts;
    this.signature =signature;
}
//获取签名
function getSignature() {
    let signature = md5encode(signStr);
    let token = new tokenObject(id,ts,signature);
    return token;
}
//利用crypto.js进行MD5加密
 function md5encode(word) {
     return Crypto.md5(word).toString();
 }

这里引入的crypto.js最好以npm的形式安装,可能还需要安装一些依赖包,所以最好把babel的这些相关依赖包一起安装。 使用npm安装crypto.js的代码如下:

npm install crypto.js --save

python 调用 javascript-Python实现调用js并获取参数

这里必须注意的是,在npm中搜索crypto时python 调用 javascript,会有两类比较相似的包,一类是crypto。 js,这两个看起来很像,我一度以为是一个,但是加密结果不一样,我会发一篇文章来分析一下两者的区别。 这里使用了 Crypto.js。 这样js文件就已经准备好了,记得调用js文件中的函数,不然获取不到相关数据。

2.Python读取脚本文件库的介绍

因为项目需要使用python2.7实现,所以我们使用的句型是基于python2的。 我们用来运行js的脚本库是execjs,它支持python2和python3。 具体安装方法有很多,这里介绍一种,使用命令行进入安装python的Scripts文件夹,我的是D:python2.7Scripts,输入:

pip install PyExecJS

python 调用 javascript-Python实现调用js并获取参数

我的已经安装了,输入会显示如下结果,如果没有安装,就会安装。

python 调用 javascript-Python实现调用js并获取参数

安装后,python代码如下:

import execjs
import requests
import json
//读取并编译js文件,运行js内函数获得想要的结果
def getSignatureString():
    jsstr = ReadJs()
    ctx = execjs.compile(jsstr)
    signature =json.dumps(ctx.call("getSignature"))//上面那个js文件中,这个方法用来获取签名
    return signature
//读取JS文件,将js代码转换
def ReadJs():
    jsfile = open("./../javascript/getSignature.js","r")//打开js所在文件,方式以只读方式打开
    codeline = jsfile.readline()
    codestr=""
    while codeline:
        codestr =codestr +codeline
        codeline =jsfile.readline()
    return codestr
    
//将运行js获得的ts与signature参数取回来,转换成字典形式,在传递到获取token接口
def getCode():
    url=""
    id = "4QF88sui99kuiOH"
    dict_json =json.loads(getSignatureString())
    params = {"id": id, "ts": dict_json['ts'], "signature": dict_json['signature']}
    result = requests.post(url, data=params )
    response_dic = result.text
    success_object =json.loads(response_dic)
    return success_object

这样python文件就可以运行了,记得在当前文件中调用这个函数。 本文也是最近一个项目的一个小实现。 如果有好的方法请指教。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript python 调用 javascript-Python实现调用js并获取参数 https://www.wkzy.net/game/168171.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务