添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

最近接到一个小项目,用python实现一些底层接口,完成数据获取与数据封装,其实本来也不难,其中有一块是要利用python实现获取一个加密签名,再传到第三方接口,获取token,其中它的前端加密算法中有一个是利用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

这里一定要注意,在npm里搜索crypto时,会出现两种类型比较相似的包,一个是crypto.js(原生crypto加密模块的二次封装,简化常用加密函数的使用),另一个是crypto-js,这两个看起来相似,我一度以为是一个,但加密的结果不一样,后续我出个文分析这两个的区别。这里用的是crypto.js。这样js文件已经准备好了,记得在js文件里调用函数,要不获取不到相关数据。

2. python读取脚本文件库的引入

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

pip install PyExecJS

我的已经安装好了,输入会出现以下结果,如果没有安装,则会进行安装。
在这里插入图片描述
安装好以后,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文件进行运行了,记得在当前文件中调用这个函数。本文也是最近项目上的一个小实现,如果好方法,请多指教。

最近接到一个小项目,用python实现一些底层接口,完成数据获取与数据封装,其实本来也不难,其中有一块是要利用python实现获取一个加密签名,再传到第三方接口,获取token,其中它的前端加密算法中有一个是利用crypto.js进行一些列加密,这样其实比较难搞。于是便想利用python来实现调用js生成加密签名,再进行结果回传,查询了一些方案并进行实施,最终获得了想要的结果,特此分享出来。1....
在使用python做爬虫的过程中,有些页面的的部分数据是通过js异步加载的,js调用接口的请求中有时还带有些加密的参数很难破解无法使用requests这样的包直接爬取数据,因此需要借助seleniu来完成js的自动加载。 通过selenium 模拟浏览器的真是操作来获取页面中的所有请求,并且可以查找到一下页面上一些隐藏的元素,这些元素在html源码中无法看到,并且和能通过xpath和正则来捕获,因此需要使用selenium来查找隐藏元素,例如视频网站的播放按钮 import time # 导入自动化测试模块 from selenium import webdriver from s
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被人们用于独立的、大型项目的开发和设计 Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。 Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于Java、C和JavaScript之上,真的非常荣幸了. 自从20世纪90年代初Python语言诞生至2022年,它已被逐渐广泛应用于系统管理任务的处理和Web编程,Python已经成为最受欢迎的程序设计语言之一。 Python教学简单易懂,零基础小白也可以学会,只要你有耐心学习从入门到精通.从小白到高手。
※练习使用面向对象的思维设计并编写程序 9、项目实战一、模拟人生游戏 ※设定两个故事场景,场景可以穿插衔接,人物之间有关系和互动并且互相影响,根据 不同用户的玩法实现开放式结局 1、Socket 介绍 2、Python socket 语法 3、简单的socket 交互程序 4、Socket Server的开发与使用 5、多线程非阻塞并发自处理 6、练习程序:用SOCKET模拟实现SSH客户端功能 6、项目实战二、开发FTP服务器\客户端软件 ※分别开发服务器端和客户端,通过Socket模块实现网络通信,模拟实现FTP主要的文件下载、上传功能、实现多用户并发在线使用。 1、 项目实战三、开发运维审计服务器,实现公司全网用户操作审计需求 ※开发一个堡垒机,实现用户可以通过WEB 和命令行登录到所有LINUX服务器上,纪录所有用户命令操作 2、项目实战四、通过Python脚本连接MYSQL数据库实现数据自动入库、更新 3、项目实战五、开发C/S架构备份服务器,实现远程备份 ※使用PYTHON SOCKET模块实现文件的远程压缩传输 二、Python中高级课程列表 1、Python 多线程程序开发使用 2、项目实战七、开发实现对上千台服务器的批量管理,分发指令、文件传送的运维管理程序 ※用多线程的方式并发连接登录多台LINUX服务器,实现并发命令操作、文件分发,实时结果返回,并可根据服务器性能控制线程量,千台机器改密码1分钟完成。 3、HTML/JAVAScript基础 4、WEB JS Package BootStrap 介绍与使用 ※通过BootsStrap 样式制作精美清新的WEB页面 5、使用JSON(实现不同程序间内存数据交换) 6、JQuery/Ajax 基础与使用 ※实现页面部分内容与后台交互并实时刷新页面 1、Python WEB 架构Django的介绍、使用 2、Django manage.py 3、Django 视图 4、Django models使用Mysql数据库 5、Django 模板 6、Django url 7、Django Admin 8、编写前后台动态交互页面 三、企业项目实战(web及运维软件开发) driver = webdriver.Ie(r"IEDriverServer.exe") # 找一个合适版本的IEDriver js = """ var hello = "hello world"; return hello; result = driver.execute_script(js) print(result... 自己写的一些python小爬虫 weibo_album windows下的新浪微博相册爬虫,可以下载整个微相册的照片。因为微相册是js动态加载的,所以用了来获取网页源码, 使用python的来进行调用。 ###功能 在微博搜索中搜索指定的用户名,选择结果中第1个用户,所以用户名越准确越好,默认下载其“微博配图”相册。 可以指定微博相册的链接地址,此时无论是否设置了要搜索的用户名,都会直接访问该地址进行下载,要求必须是微博相册的“列表模式”下的链接地址,其链接类似于http://photo.weibo.com/2206258462/talbum/index?from=profile_wb#!/mode/1/page/1,mode后的参数为1,这也是微博相册的默认模式。 可以设置下载图片大小的最小值,单位为byte,默认为102400byte,即100kb。
微信小程序 服务器返回的是一个数组形式的数据 index.wxml中通过wx:for的方式遍历数组的方式创建view,并且绑定函数,通过wx:for-index="idx"获取下标,使用data-id='{{idx}}'传递参数 index.js中to_content根据传进的参数,让内容区域加载对应的内容
python调用js文件生成参数JS逆向安装exejs与nodejs调用js生成参数 JS逆向 我就随便找了一个网站https://cloud.kingdee.com/passport/#/auth/login 随手输入一个账号密码,抓包后发现请求带着加密的密码(相同密码每次请求字符串都不同)和加密的验证码(有时候不出现),判断是个动态加密,那就针对密码下手把 1、进入第一步JS中打上断点 2、回溯发现,前面三个栈的方法里没有出现加密的js语句,这里继续打断点在第四个异步请求的地方 3、发现在cal
方式一:PyExecJS PyExecJS 是使用最多的一种方式,底层实现方式是:在本地 JS 环境下运行 JS 代码 支持的 JS 环境包含:Node.js、PyV8、PhantomJS、Nashorn 等 首先,我们需要安装依赖包 PyExecJS //py_exec_js_demo.py //安装依赖 pip3 install PyExecJS 然后,从 JS 文件中读取源码 def js_from_file(file_name): 读取js文件 :return: with open(
要在 JavaScript 中调用 Python 函数,可以使用一些库或者框架,例如 Node.jsPythonShell,Pyodide 等。 下面是一个使用 PythonShell 的示例: 1. 首先需要安装 PythonShell: npm install python-shell 2. 在 JavaScript 文件中引入 PythonShell: ```javascript const {PythonShell} = require('python-shell'); 3. 创建一个 PythonShell 实例,并调用 Python 函数: ```javascript var options = { mode: 'text', pythonPath: '/usr/bin/python', pythonOptions: ['-u'], scriptPath: 'path/to/python/file', args: ['value1', 'value2', 'value3'] PythonShell.run('your_python_file.py', options, function (err, results) { if (err) throw err; // results is an array consisting of messages collected during execution console.log('results: %j', results); 在 args 参数中传入需要传递给 Python 函数的参数Python 函数可以通过 sys.argv 获取这些参数。具体的 Python 脚本可以参考如下示例: ```python import sys def your_function(arg1, arg2, arg3): # do something with the arguments return result # get arguments from command line arg1 = sys.argv[1] arg2 = sys.argv[2] arg3 = sys.argv[3] # call the function with arguments result = your_function(arg1, arg2, arg3) # print the result print(result)