专业编程基础技术教程

网站首页 > 基础教程 正文

利用Python突破大型网站JavaScript反爬虫加密技术

ccvgpt 2024-12-03 11:02:50 基础教程 11 ℃

图/文:迷神

现在写爬虫也难啊,现在Python爬虫写多了,发觉很多大型网站都开始用js 加密技术。记得,有次在利用webQQ登录时需要的某些参数时,从js中获取到的js的加密的函数。如果要转化成对应的Python代码,还是有点难度的。那又没办法直接执行JavaScript代码呢,答案是肯定有的。

利用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-8
import requests
import execjs
import re
node = 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(r'var autourl=\["(.*)"\];var',source_res.text)
re_source = re_source[0]

file = './encrypt.js'
ctx = 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 即可安装,比较类似,大家自行学习啦。

好了,就这么多啦,有问题大家可以留言交流,觉得不错,也多多转发和关注迷神哦,后面还将继续分享更多的精彩内容哦。

Tags:

最近发表
标签列表