发布时间:2026-07-21阅读(2)
图/文:迷神
现在写爬虫也难啊,现在python爬虫写多了,发觉很多大型网站都开始用js 加密技术。记得,有次在利用webQQ登录时需要的某些参数时,从js中获取到的js的加密的函数。如果要转化成对应的Python代码,还是有点难度的。那又没办法直接执行JavaScript代码呢,答案是肯定有的。
为了实现我们自己的Python爬虫的春秋大梦,我们还是要一抗到底,对,突破它。
本次推荐推荐的主角是:PyExecJS
PyExecJS简单安装和实例python安装PyExecJS很简单:pip install PyExecJS
使用实例:
# -*- coding: UTF-8 -*-import execjs#hash33 是javascript函数encrypt_fun = execjs.compile("""function hash33(t) { for (var e = 0, i = 0, n = t.length; i < n; i) e = (e << 5) t.charCodeAt(i); return 2147483647 & e}""")print encrypt_fun.call("hash33", "5Kj0l5GEwtMm-VuxuL98Rt*2Qd-UDmNaaQgxtGtZcm9-Umco7PUC8GuQ5nI-3jut")#快速执行js代码,比如:#execjs.eval("1 2 3 4")#>结果:355347598
其实,这个主要利用的就是python可以执行JavaScript,execjs会自动使用当前电脑上的运行时环境(建议用nodejs,与Phantomjs)。现在很多网站都喜欢使用JavaScript生成各种密钥令牌,加密,主要是需要大家举一反三,触类旁通即可。
PyExecJS实战举例目标地址:ac。scmor。com 自己具体替换接口。
通过执行加密函数的js文件,来抓取活的最终这个上面的所有镜像网址。

目标地址
目标网址里面的地址,都是被加密过的,如图:

加密地址了
通过查看发觉是使用一个叫visit() 的js函数加密了:

加密
2个相关函数如下:
function visit(url) { var newTab = window.open(about:blank); if(Gword!=) url = strdecode(url); newTab.location.href = url;}#其实这个 Gword,是页面定义的变量:var Gword = "21b5del6oIO57e01a",function strdecode(string) { string = base64decode(string); key = Gword ok; len = key.length; code = ; for (i = 0; i < string.length; i ) { var k = i % len; code = String.fromCharCode(string.charCodeAt(i) ^ key.charCodeAt(k)) } return base64decode(code)}
我们实际用到的就是这个 strdecode函数,当然要加上密钥函数,密钥可以去网站实际搜索下,即可搜索到,有Gword和hn2个, 另外,这个strdecode函数还调用了另外一个函数:base64decode(),而base64decode又调用了一个 base64DecodeChars 的数组,把这些都 添加文件里面的js代码,encrypt.js 如下:

完整代码
有了加密的js文件,我们就要实现我们最终的python代码,主要流程就是先爬取网页,获取到js加密的网址,然后python调用执行JavaScript代码,进行还原即可。
最终代码如下:
# coding=utf-8import requestsimport execjsimport renode = execjs.get()# print(execjs.get().name)source_url = http://ac.scmor.com/source_headers = { User-Agent:Mozilla/5.0 (Windows; ) AppleWebKit/537 (KHTML, Gecko) Chrome/55 Safari/537,}source_res = requests.get(url=source_url, headers=source_headers)re_source = re.findall(rvar autourl=\["(.*)"\];var,source_res.text)re_source = re_source[0]file = ./encrypt.jsctx = node.compile(open(file).read())re_source = re_source.split(",")for each_source in re_source: #print(each_source) md_js = strdecode("%s") % each_source #破解中的函数, href = ctx.eval(md_js) print(href)
执行结果:

当初除了这个模块,还有一个:js2py,pip install js2py 即可安装,比较类似,大家自行学习啦。
好了,就这么多啦,有问题大家可以留言交流,觉得不错,也多多转发和关注迷神哦,后面还将继续分享更多的精彩内容哦。
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图