影刀RPA,提供了强大的数据抓取功能,让一些编程小白友友们也能轻松获取到想要的数据,大大的降低门槛,例如从相似元素组获取数据,或者直接抓取表格元素table表格:
看看,多简单,一条指令就完成,真是大赞特赞。。。
但是,但是,唉。。。这个没有一本万利的时候,有一些网站,他没有把这个数据在界面上展现出来,我们都看不到,怎么用这个元素去抓取他的数据,真是巧妇难为无米之炊啊。。。而这种数据,一般平台会提供一个下载按钮,欸,那我们可以找到这个下载按钮的元素,点击这个元素把数据下载下来就可以了呀,但是经过测试,平台偶尔会弹出一些广告,而且广告又不相同,导致有时候会找不到”下载“的元素,就要我们经常维护。
欸~,经过查找,在查询数据数据时后台会有数据返回,那就可以用网页监听啊,提取监听到的数据写入Excel表格,也就等同于下载数据了,如图,就在下面那一大坨中找到想要的数据:
找了半天找不到,原来,原来,是平台对返回的数据进行加密了,当场裂开。。。:
没事哒没事哒,加密了那就进行解密,解不出,那就继续沿用点击下载按钮的方法,多维护就多维护呗,反正都是当吗喽的命。。。而这种解密我们就封装成一个指令集,后面遇到了就可以直接调用,就不需要一个一个写进取数流程里。通过堆栈查找,发现是AES加密,模式是CBC,填充方式是Pkcs7,除了这些信息之外,我们还要找到密钥才能进行解密,而且又是CBC模式,所以要找到初始化向量,拿到这些关键信息后,就可以进行解密了的
(想要详细了解AES原理的,可以找大佬文章和问GPT,额,俺也模糊了,记得怎么用就行)
而密钥和初始化向量都在上方:
这个就比较简单了,因为可以看出这个没有进行混淆和加一些乱八七糟,不四不三的东西,是一个非常官方的ASE_256(密钥长度可以看的出来,16字节是AES_128,24字节是AES_192,32字节是AES_256)加密,那就不用扣JS代码了,python直接就有包给我们调用,不愧是python,真是包罗万象
首先得下载这个包:
pip insatnll pycryptodome
然后就可以开始调这个包创建AES解密器进行解密啦:
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
def AES_CBC(padding, data_str, key_str, iv):
mode=AES.MODE_CBC
#先对数据字符串进行utf-8编码
key_str = key_str.encode('utf-8')
#创建解密器
aes = AES.new(key_str, mode, iv)
#对数据字符串进行base64编码
data_str= base64.b64decode(data_str)
#解密
data_str= aes.decrypt(data_str)
#去除pkcs7填充
data_str= unpad(data_str, AES.block_size, style=padding)
#解码
data_str= data_str.decode('utf-8')
return data_str
上面的代码,也可以去百度查后者去博客找又或者去问GPT,一找一大堆
如下图,流程都写好了:
接下来就是编辑指令:
发版后可以看到我们工具指令集里就有AES解密这个指令了:
然后去试试能不能解出那段加密字符串,发现可以正常解密:
除此之外,还有一种响应数据是这种的,但是找他的JS代码找了好久都不知道是什么加密,真的是快要奔溃。。。:
后来找了大佬,大佬就看了几分钟就说,可能只是进行了base64编码了,解码一下试试,实在不行在细看。。。居然、居然,真是这样啊,天地良心啊,果然经验就是宝贵啊,路漫漫其修远兮,吾将上下而求索啊。
而影刀也直接提供了这个base64解码,我们直接用就行,嘿嘿,影刀RPA真贴心哩:
解码之后是一个二进制流,我们用python把二进制流写成excel文件就行了:
目前就遇到过这两种情况啦,遇到AES模式的加密在拓张指令了。