|
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。
想看一个动漫,因为是2018年的,所以比较难搜,搜到的下载速度也上不去,通过js逆向解密下载地址,写了个m3u8直接下载樱花在线动漫。
【樱花动漫下载器视频演示说明】https://pan.baidu.com/s/1xJj5ugBMROHSlXE3ZOy4CQ?pwd=cskx 提取码: cskx
【樱花动漫下载器下载】https://pan.baidu.com/s/1J3_srEti6GU6-8iocE1UBQ?pwd=9ufm 提取码: 9ufm
使用本程序需要安装Nodejs【Nodejs下载地址】http://nodejs.cn/download/
以下为源码:
[Python] 纯文本查看 复制代码 import requests
import execjs as js
import re
import json
import os
import subprocess as proc
def get_js_data(url):
res = requests.get(url)
data = re.findall(
r'<script type="text/javascript">var player_aaaa=(.*\d})?</script>', res.text)
result = json.loads(data[0])
url = result['url']
encrty = result['encrypt']
return url, encrty
def decode_jsurl(url):
encodeurl, encrty = get_js_data(url)
with open(os.path.join(os.path.dirname(__file__), 'jsencrypt.js'), 'r', encoding='utf8') as f:
code = f.read()
func = js.compile(code)
url_result = func.call('get_url', encodeurl, encrty)
return url_result
def mkdir(path):
if not os.path.exists(path):
os.makedirs(path)
return path
def download(url, num):
msg = proc.check_call([os.path.join(os.path.dirname(__file__),'download_m3u8.exe'), decode_jsurl(url), '--workDir', mkdir(
os.path.join(os.path.dirname(__file__), 'download')), '--saveName', num, '--enableDelAfterDone'])
print(msg)
if __name__ == '__main__':
# 地址入口
for num in range(2,13):
url = 'https://www.xyhdm.cc/vodplay/8052-3-{num}.html'.format(num=num)
download(url,str(num))
[JavaScript] 纯文本查看 复制代码 var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64DecodeChars = new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);
//函数解密
function base64decode(str) {
var c1, c2, c3, c4;
var i, len, out;
len = str.length;
i = 0;
out = "";
while (i < len) {
do {
c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]
} while (i < len && c1 == -1);
if (c1 == -1)
break;
do {
c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]
} while (i < len && c2 == -1);
if (c2 == -1)
break;
out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
do {
c3 = str.charCodeAt(i++) & 0xff;
if (c3 == 61)
return out;
c3 = base64DecodeChars[c3]
} while (i < len && c3 == -1);
if (c3 == -1)
break;
out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
do {
c4 = str.charCodeAt(i++) & 0xff;
if (c4 == 61)
return out;
c4 = base64DecodeChars[c4]
} while (i < len && c4 == -1);
if (c4 == -1)
break;
out += String.fromCharCode(((c3 & 0x03) << 6) | c4)
}
return out
}
// 关键代码
get_url = function (url,encrypt) {
this.Status = true;
this.Parse = '';
if (encrypt == '1') {
playurl = unescape(url);
return playurl
} else if (encrypt == '2') {
playurl = unescape(base64decode(url));
return playurl
}}
// data = "JTY4JTc0JTc0JTcwJTczJTNBJTJGJTJGJTYzJTY0JTZFJTJFJTdBJTZGJTc1JTYyJTc1JTc0JTY5JTZFJTY3JTJFJTYzJTZGJTZEJTJGJTMyJTMwJTMyJTMxJTMwJTM3JTMxJTM4JTJGJTZGJTcxJTUxJTc5JTU3JTQ1JTM5JTMxJTJGJTY5JTZFJTY0JTY1JTc4JTJFJTZEJTMzJTc1JTM4";
// encrypt = '2';
// console.log(get_url(data,encrypt))
|
|