Python调用Js脚本方法
Python调用Js脚本方法
当我们进行网络爬虫的时候,遇到前端加密函数,而自己不想花费太多时间或者没法重写这个函数时,我们可以直接使用Python执行Js函数来解决这个问题。
主要使用的库函数是:execjs
1.安装库函数execjs
pip install execjs -i http://mirrors.sohu.com/Python/
2.以我遇到的例子为例
可以发现前端使用了加密函数,如果能找到Pthon实现的这个加密函数,可以直接调用相关的API,或者有能力的自己实现这个加密函数。否则,就在Python里面编译js代码
3.创建一个Js文件encrypt.js,内容如下(直接复制的),然后加上这个库函数的定义:
function encrypt(word) {
const CryptoJS = require('crypto-js');
var key = CryptoJS.enc.Utf8.parse("xiamenair1234567");
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
return encrypted.toString();
};
在python里面调用js脚本
import execjs
import json
def encrypt(t):
node = execjs.get()
ctx = node.compile(open('js/encrypt.js', encoding='utf-8', ).read(), )
cnonce = ctx.call('encrypt', t)
return cnonce
直接运行,发现报错!!是因为本地没有crypto-js这个库函数,因此我们需要本地安装这个库
因此,我们需要装一下这个库
两种方法,在当前环境下载这个库,或者全局下载,然后再compile里面指定路径。
第一种方法:
npm install crypto-js --save //当前项目下
此时node可以直接找到这个库
第二种方法:
全局下载,然后使用cmd参数指定文件的路径就行。
3.调用,再次执行
def encrypt(t):
node = execjs.get()
ctx = node.compile(open('js/encrypt.js', encoding='utf-8', ).read(), )
cnonce = ctx.call('encrypt', t)
return cnonce
account = encrypt("19723876319")
password = encrypt("zhxdxw123")
print(account,password)
成功解决,以后遇到相似的问题,只需要将对应的Js代码复制过来,然后修改相应的参数就行!!
CSDN-Ada助手: 不知道 Python入门 技能树是否可以帮到你:https://edu.csdn.net/skill/python?utm_source=AI_act_python
江枫渔火A: 非常好文章
Eurus_King: 你好,如果我想进一步获取每一所学校每一个专业的录取分数线要怎么操作呢?
moonchildink: 请问local_batch_id参数是什么含义?我发现不同省份涉及到local的这几个参数都不一样
唔系&: 非常感谢,这一篇博客帮了我大忙