准备工作:
1、网址:https://www.vvvdj.com/play/221250.html
2、python3.9
3、发条JS工具
4、格式工厂
1、抓包
1-1、谷妹儿浏览器,F12
1-2、具体内看@ehepls 兄弟发布的方法
抓包01.jpg (276.43 KB, 下载次数: 0)
下载附件
2021-10-26 18:47 上传
经过分析发现,他的JS并不是独立的,而是在播放页面里面先执行,取得吗m3u8播放地址 + upt的值 + news
[HTML] 纯文本查看 复制代码https://tspc.vvvdj.com/c1/2021/10/221250-bf40bf/221250.m3u8?upt=d75e43361637855999&news
抓包02.jpg (240.33 KB, 下载次数: 0)
下载附件
2021-10-26 18:56 上传
2、解密
[JavaScript] 纯文本查看 复制代码 function DeCode() {
this.OO0O00OO00OO = function (a, b) {
return b > 0 ? a.substring(0, b) : null;
}, this.OO00OO0O00O0 = function (a, b) {
return a.length - b >= 0 && a.length >= 0 && a.length - b 10; ) {
k = (parseInt(k.substring(0, 10)) + parseInt(k.substring(10, k.length))).toString();
}
for (k = (e * k + f) % g, i = "", j = "", c = 0; c = 0 ? a.substr(b, c) : null;
}, this.O0O000000O0O0 = function (a) {
return a.length;
}, this.O000O0OO0O0OO = function (a,b) {
var h, i, j, k, l, m, n, o, p, c = b, d = this.O0O000000O0O0(c), e = d, f = new Array(), g = new Array();
for (l = 1; d >= l; l++) {
f[l] = this.O0000OO0OO00O(c, l - 1, 1).charCodeAt(0), g[e] = f[l], e -= 1;
}
for (h = "", i = a, m = this.OO0O00OO00OO(i, 2), i = this.OO00OO0O00O0(i, this.O0O000000O0O0(i) - 2),
l = 0; l 187Q190q193k196Q202N208?214m220W223_226M229o232I235j238[250k2591262J268R271C277:280>283D292A295?298I3012304C31053193325A3281331K3379343C346K355k358
这上面的就是他的加密代码,具体是干了些啥,反正我也不需要理解,主要是理解不了,但不影响我们
我们只知道他的加密入口及解密参数就行了
[JavaScript] 纯文本查看 复制代码var x=new DeCode();
playurl=x.O000O0OO0O0OO(参数1,参数2)
先请求页面获取参数1,参数2,然后得到在带上参数请求m3u8视频流列表,知道参数怎么来的就好办了
2、python3.9获取参数
需要加载几个模块
[color=]import
asyncio //这个协助
[color=]import
aiohttp //这个是下载
[color=]import
os
[color=]import
requests
[color=]import
re
[color=]import
execjs //这个是执行JS的
[JavaScript] 纯文本查看 复制代码function DeCode() {
this.OO0O00OO00OO = function(a, b) {
return b > 0 ? a.substring(0, b) : null;
},
this.OO00OO0O00O0 = function(a, b) {
return a.length - b >= 0 && a.length >= 0 && a.length - b 10;) {
k = (parseInt(k.substring(0, 10)) + parseInt(k.substring(10, k.length))).toString();
}
for (k = (e * k + f) % g, i = "", j = "", c = 0; c = 0 ? a.substr(b, c) : null;
},
this.O0O000000O0O0 = function(a) {
return a.length;
},
this.O000O0OO0O0OO = function(a, b) {
var h, i, j, k, l, m, n, o, p, c = b,
d = this.O0O000000O0O0(c),
e = d,
f = new Array(),
g = new Array();
for (l = 1; d >= l; l++) {
f[l] = this.O0000OO0OO00O(c, l - 1, 1).charCodeAt(0),
g[e] = f[l],
e -= 1;
}
for (h = "", i = a, m = this.OO0O00OO00OO(i, 2), i = this.OO00OO0O00O0(i, this.O0O000000O0O0(i) - 2), l = 0; l
python01.jpg (242.06 KB, 下载次数: 0)
下载附件
2021-10-26 19:14 上传
哈哈哈,可以得到我们想要的参数,请求时候记得一定要带上 headers
带上参数请求m3u8视频流列表信息
[Python] 纯文本查看 复制代码def htmlm3u8list(htmls, headers):
# 创建一个node对象
node = execjs.get()
# js源文件编译
ctx = node.compile(open('./1-01.js', encoding='utf-8').read())
# 执行JS涵数
funcname = 'playurl("{0}","{1}")'.format(htmls[0], htmls[1])
pwd = 'https:' + ctx.eval(funcname)
tsurl = pwd.split(".m3u8")[0]
numbeid = tsurl.split('/')[-1]
data = requests.get(url=pwd, headers=headers).text
name = numbeid + "-" + htmls[2].replace("(", "").replace(")", "")
print(name)
isExists = os.path.exists(name)
if not isExists:
os.makedirs(name)
tslist = re.findall(r'-\d+.ts\?upt=[a-zA-Z0-9]+', data)
urllist = []
for ts in tslist:
sss = tsurl + ts
urllist.append(sss)
urllists = [urllist, [name]]
return urllists
到了这里就完成了兄弟前面的效果,但是我想把这个在加深一些,下载
下载有个问题就是,因为一个音频文件他会分成几百个流文件,如果单线程下载的话,会比较慢,然后我就用协程的方法这样快一些
python02.jpg (290.2 KB, 下载次数: 0)
下载附件
2021-10-26 19:24 上传
[Python] 纯文本查看 复制代码async def downs(hj):
async with aiohttp.ClientSession() as session:
url_list = hj
name = url_list[1][0]
print(url_list)
print(name)
tasks = [asyncio.create_task(fetch(session, urls, name)) for urls in url_list[0]]
await asyncio.wait(tasks)
async def fetch(session, urls, name):
async with session.get(urls, verify_ssl=False) as response:
content = await response.content.read()
tslist = re.findall(r'-\d+.ts\?upt=[a-zA-Z0-9]+', urls)
for ts in tslist:
filename = ts.replace("-", "").split("?")[0]
print(filename)
path = './' + name + './' + filename
with open(path, "wb") as f:
f.write(content)
下载的时候把ID号和文件名建一个文件夹这样方便管理
例如:221250 + 四会DJ清扬-国粤语Club抖音DjHs华少秋风吹飘来好消息串烧
好,现在流文件下载下来了,就是解决文件合并和转MP3格式了
看到一个兄弟在说在线的视频流文件很小,音质达不到要求,我们把这个问题一起解决了
音质.jpg (65.05 KB, 下载次数: 0)
下载附件
2021-10-26 19:32 上传
音质1.jpg (217.44 KB, 下载次数: 0)
下载附件
2021-10-26 19:32 上传
网站显示的是 147.2MB 而我们下载下来的只有32.4MB,这个问题只要我们设置一下转换值就可以了
然后就是等几分钟转换好了
01.jpg (127.13 KB, 下载次数: 0)
下载附件
2021-10-26 19:37 上传
02.jpg (154.24 KB, 下载次数: 0)
下载附件
2021-10-26 19:37 上传
格式工厂比特率选择320,然后我们看一下转换后的文件是否与网站一致
03.jpg (227.06 KB, 下载次数: 0)
下载附件
2021-10-26 19:43 上传
一毛一样
这个是全代码
清风DJ.zip
(2.13 KB, 下载次数: 369)
2021-10-26 19:40 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB
https://tspc.vvvdj.com/c1/2021/10/221250-bf40bf/221250.m3u8?upt=d75e43361637855999&news"
https://tspc.vvvdj.com/c1/2021/10/221250-bf40bf/221250.m3u8?upt=d75e43361637855999&news