提交 74856666 编写于 作者: H hjdhnx

优化了免嗅写法的注入函数,不需要d.saveParse了

上级 8f394e95
...@@ -216,6 +216,7 @@ def vod(): ...@@ -216,6 +216,7 @@ def vod():
return jsonify(error.failed('爬虫规则加载失败')) return jsonify(error.failed('爬虫规则加载失败'))
# rule = ctx.eval('rule') # rule = ctx.eval('rule')
# print(type(ctx.rule.lazy()),ctx.rule.lazy().toString())
ruleDict = ctx.rule.to_dict() ruleDict = ctx.rule.to_dict()
ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用 ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
# print(ruleDict) # print(ruleDict)
......
...@@ -14,7 +14,7 @@ from utils.log import logger ...@@ -14,7 +14,7 @@ from utils.log import logger
from utils.encode import base64Encode,baseDecode,fetch,post,request,getCryptoJS,getPreJs,buildUrl,getHome from utils.encode import base64Encode,baseDecode,fetch,post,request,getCryptoJS,getPreJs,buildUrl,getHome
from utils.encode import verifyCode from utils.encode import verifyCode
from utils.safePython import safePython from utils.safePython import safePython
from utils.parser import runPy,runJScode from utils.parser import runPy,runJScode,JsObjectWrapper
from utils.htmlParser import jsoup from utils.htmlParser import jsoup
from urllib.parse import urljoin from urllib.parse import urljoin
from concurrent.futures import ThreadPoolExecutor # 引入线程池 from concurrent.futures import ThreadPoolExecutor # 引入线程池
...@@ -731,10 +731,13 @@ class CMS: ...@@ -731,10 +731,13 @@ class CMS:
if not jxs: if not jxs:
jxs = [] jxs = []
if self.lazy: if self.lazy:
print(f'{play_url}->开始执行免嗅代码->{self.lazy}') print(f'{play_url}->开始执行免嗅代码{type(self.lazy)}->{self.lazy}')
t1 = time() t1 = time()
try: try:
if not str(self.lazy).startswith('js:'): if type(self.lazy) == JsObjectWrapper:
logger.info(f'lazy非纯文本免嗅失败耗时:{get_interval(t1)}毫秒,播放地址:{play_url}')
elif not str(self.lazy).startswith('js:'):
pycode = runPy(self.lazy) pycode = runPy(self.lazy)
if pycode: if pycode:
# print(pycode) # print(pycode)
...@@ -750,16 +753,19 @@ class CMS: ...@@ -750,16 +753,19 @@ class CMS:
jscode = str(self.lazy).split('js:')[1] jscode = str(self.lazy).split('js:')[1]
# jscode = f'var input={play_url};{jscode}' # jscode = f'var input={play_url};{jscode}'
# print(jscode) # print(jscode)
headers['Referer'] = getHome(play_url)
py_ctx.update({ py_ctx.update({
'input': play_url, 'input': play_url,
'fetch_params':{'headers':headers,'timeout':self.d.timeout,'encoding':self.d.encoding},
'd': self.d, 'd': self.d,
'jxs':jxs, 'jxs':jxs,
'getParse':self.d.getParse,
'saveParse':self.d.saveParse,
'pdfh': self.d.jsp.pdfh, 'pdfh': self.d.jsp.pdfh,
'pdfa': self.d.jsp.pdfa, 'pd': self.d.jsp.pd, 'pdfa': self.d.jsp.pdfa, 'pd': self.d.jsp.pd,
}) })
ctx = py_ctx ctx = py_ctx
# print(ctx) # print(ctx)
t1 = time()
jscode = getPreJs() + jscode jscode = getPreJs() + jscode
# print(jscode) # print(jscode)
loader,_ = runJScode(jscode,ctx=ctx) loader,_ = runJScode(jscode,ctx=ctx)
...@@ -782,6 +788,8 @@ if __name__ == '__main__': ...@@ -782,6 +788,8 @@ if __name__ == '__main__':
js_path = f'js/vip影院.js' js_path = f'js/vip影院.js'
ctx, js_code = parser.runJs(js_path,before=before) ctx, js_code = parser.runJs(js_path,before=before)
ruleDict = ctx.rule.to_dict() ruleDict = ctx.rule.to_dict()
# lazy = ctx.eval('lazy')
# print(lazy)
# ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用 # ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
cms = CMS(ruleDict) cms = CMS(ruleDict)
......
...@@ -17,7 +17,8 @@ var rule = { ...@@ -17,7 +17,8 @@ var rule = {
// lazy:'干饭', // lazy:'干饭',
// lazy:'@js:cacheUrl = d.getParse(input);print(cacheUrl);input=cacheUrl', // lazy:'@js:cacheUrl = d.getParse(input);print(cacheUrl);input=cacheUrl',
// lazy:'js:cacheUrl = d.getParse(input);print(cacheUrl);input=cacheUrl', // lazy:'js:cacheUrl = d.getParse(input);print(cacheUrl);input=cacheUrl',
lazy:'js:cacheUrl=d.getParse(input);if(cacheUrl){input=cacheUrl}else{try{let html=fetch(input,{headers:d.headers,timeout:d.timeout,encoding:d.encoding});let ret=html.match(/var player_(.*?)=(.*?)</)[2];let url=JSON.parse(ret).url;if(url.length>10){real_url="https://player.buyaotou.xyz/?url="+url;d.saveParse(input,real_url);input=real_url}}catch(e){print("网络请求发生错误:"+e.message)}}', // lazy:'js:cacheUrl=d.getParse(input);if(cacheUrl){input=cacheUrl}else{try{let html=fetch(input,{headers:d.headers,timeout:d.timeout,encoding:d.encoding});let ret=html.match(/var player_(.*?)=(.*?)</)[2];let url=JSON.parse(ret).url;if(url.length>10){real_url="https://player.buyaotou.xyz/?url="+url;d.saveParse(input,real_url);input=real_url}}catch(e){print("网络请求发生错误:"+e.message)}}',
lazy:'js:cacheUrl=getParse(input);if(cacheUrl){input=cacheUrl}else{try{let html=fetch(input,fetch_params);let ret=html.match(/var player_(.*?)=(.*?)</)[2];let url=JSON.parse(ret).url;if(url.length>10){real_url="https://player.buyaotou.xyz/?url="+url;saveParse(input,real_url);input=real_url}}catch(e){print("网络请求发生错误:"+e.message)}}',
limit:5, limit:5,
推荐:'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;;a&&href', 推荐:'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;;a&&href',
double:true, // 推荐内容是否双层定位 double:true, // 推荐内容是否双层定位
......
...@@ -6,5 +6,10 @@ searchUrl:'/search/**-fypage.html', ...@@ -6,5 +6,10 @@ searchUrl:'/search/**-fypage.html',
searchable:1, searchable:1,
quickSearch:1, quickSearch:1,
class_parse:'.navbar-items li:gt(1):lt(8);a&&Text;a&&href;/(\\d+).html', class_parse:'.navbar-items li:gt(1):lt(8);a&&Text;a&&href;/(\\d+).html',
lazy:'js:var MY_HOME="http://lanmeiguojiang.com:5244/d/%E8%93%9D%E8%8E%93%E4%BA%91%E7%9B%98";let headers=d.headers;headers["Referer"]=input;let fetch_params={headers:headers,timeout:d.timeout,encoding:d.encoding};let html=fetch(input,fetch_params);var player=JSON.parse(html.match(/r player_.*?=(.*?)</)[1]);var jsurl=player.url;var from=player.from;if(player.encrypt=="1"){var jsurl=unescape(jsurl)}else if(player.encrypt=="2"){var jsurl=unescape(base64Decode(jsurl))}else{jsurl}if(/ddzy|duoduo/.test(from)){let mx=false;if(mx){let html=request(MY_HOME+"/pzwj.js");eval(html);var jx=MacPlayerConfig.player_list[from].parse;print("第1次多多解析:",jx);eval(fetch(jx+jsurl,fetch_params).match(/var config = {[\\s\\S]*?}/)[0]);jx=jx.replace("?url=","");eval(fetch(jx+"js/decode.js",fetch_params));jxk=fetch(jx+"js/setting.js",fetch_params).split(",");jx+="555tZ4pvzHE3BpiO838.php";print("第2次多多解析:",jx);config.tm=(new Date).getTime();config.sign="F4penExTGogdt6U8";input=getVideoInfo(JSON.parse(fetch(buildUrl(jx,config),fetch_params)).url)}}else{let jxurl="https://lanmeiguojiang.com/dd/?url="+jsurl;input=maoss(jxurl,jxurl,"A42EAC0C2B408472")}', // lazy:'js:print(fetch_params);var MY_HOME="http://lanmeiguojiang.com:5244/d/%E8%93%9D%E8%8E%93%E4%BA%91%E7%9B%98";let headers=d.headers;headers["Referer"]=input;let fetch_params={headers:headers,timeout:d.timeout,encoding:d.encoding};let html=fetch(input,fetch_params);var player=JSON.parse(html.match(/r player_.*?=(.*?)</)[1]);var jsurl=player.url;var from=player.from;if(player.encrypt=="1"){var jsurl=unescape(jsurl)}else if(player.encrypt=="2"){var jsurl=unescape(base64Decode(jsurl))}else{jsurl}if(/ddzy|duoduo/.test(from)){let mx=false;if(mx){let html=request(MY_HOME+"/pzwj.js");eval(html);var jx=MacPlayerConfig.player_list[from].parse;print("第1次多多解析:",jx);eval(fetch(jx+jsurl,fetch_params).match(/var config = {[\\s\\S]*?}/)[0]);jx=jx.replace("?url=","");eval(fetch(jx+"js/decode.js",fetch_params));jxk=fetch(jx+"js/setting.js",fetch_params).split(",");jx+="555tZ4pvzHE3BpiO838.php";print("第2次多多解析:",jx);config.tm=(new Date).getTime();config.sign="F4penExTGogdt6U8";input=getVideoInfo(JSON.parse(fetch(buildUrl(jx,config),fetch_params)).url)}}else{let jxurl="https://lanmeiguojiang.com/dd/?url="+jsurl;input=maoss(jxurl,jxurl,"A42EAC0C2B408472")}',
lazy:'js:var MY_HOME="http://lanmeiguojiang.com:5244/d/%E8%93%9D%E8%8E%93%E4%BA%91%E7%9B%98";print(fetch_params);let html=fetch(input,fetch_params);var player=JSON.parse(html.match(/r player_.*?=(.*?)</)[1]);var jsurl=player.url;var from=player.from;if(player.encrypt=="1"){var jsurl=unescape(jsurl)}else if(player.encrypt=="2"){var jsurl=unescape(base64Decode(jsurl))}else{jsurl}if(/ddzy|duoduo/.test(from)){let mx=false;if(mx){let html=request(MY_HOME+"/pzwj.js");eval(html);var jx=MacPlayerConfig.player_list[from].parse;print("第1次多多解析:",jx);eval(fetch(jx+jsurl,fetch_params).match(/var config = {[\\s\\S]*?}/)[0]);jx=jx.replace("?url=","");eval(fetch(jx+"js/decode.js",fetch_params));jxk=fetch(jx+"js/setting.js",fetch_params).split(",");jx+="555tZ4pvzHE3BpiO838.php";print("第2次多多解析:",jx);config.tm=(new Date).getTime();config.sign="F4penExTGogdt6U8";input=getVideoInfo(JSON.parse(fetch(buildUrl(jx,config),fetch_params)).url)}}else{let jxurl="https://lanmeiguojiang.com/dd/?url="+jsurl;input=maoss(jxurl,jxurl,"A42EAC0C2B408472")}',
// lazy:(function(input){
// console.log(typeof(pdfh))
// return input
// }),
}); });
\ No newline at end of file
js: js:
cacheUrl = d.getParse(input); // cacheUrl = d.getParse(input);
cacheUrl = getParse(input);
// print(cacheUrl); // print(cacheUrl);
if(cacheUrl){ if(cacheUrl){
input=cacheUrl; input=cacheUrl;
}else{ }else{
try { try {
// let html = fetch([input, {headers:d.headers,timeout:d.timeout,encoding:d.encoding}]); // let html = fetch([input, {headers:d.headers,timeout:d.timeout,encoding:d.encoding}]);
let html = fetch(input, {headers:d.headers,timeout:d.timeout,encoding:d.encoding}); // let html = fetch(input, {headers:d.headers,timeout:d.timeout,encoding:d.encoding});
let html = fetch(input, fetch_params);
// js = pdfh(html,'.stui-player__video script:eq(0)&&Html'); // js = pdfh(html,'.stui-player__video script:eq(0)&&Html');
// print(js); // print(js);
let ret = html.match(/var player_(.*?)=(.*?)</)[2]; let ret = html.match(/var player_(.*?)=(.*?)</)[2];
...@@ -14,7 +16,8 @@ if(cacheUrl){ ...@@ -14,7 +16,8 @@ if(cacheUrl){
if(url.length > 10){ if(url.length > 10){
real_url = 'https://player.buyaotou.xyz/?url='+url; real_url = 'https://player.buyaotou.xyz/?url='+url;
// log('免嗅地址:'+real_url); // log('免嗅地址:'+real_url);
d.saveParse(input,real_url); // d.saveParse(input,real_url);
saveParse(input,real_url);
input = real_url; input = real_url;
} }
}catch (e) { }catch (e) {
......
js: js:
var MY_HOME='http://lanmeiguojiang.com:5244/d/%E8%93%9D%E8%8E%93%E4%BA%91%E7%9B%98'; var MY_HOME='http://lanmeiguojiang.com:5244/d/%E8%93%9D%E8%8E%93%E4%BA%91%E7%9B%98';
let headers = d.headers; // let headers = d.headers;
headers['Referer'] = input; // headers['Referer'] = input;
let fetch_params = {headers:headers,timeout:d.timeout,encoding:d.encoding}; // let fetch_params = {headers:headers,timeout:d.timeout,encoding:d.encoding};
print(fetch_params);
let html = fetch(input,fetch_params); let html = fetch(input,fetch_params);
var player = JSON.parse(html.match(/r player_.*?=(.*?)</)[1]); var player = JSON.parse(html.match(/r player_.*?=(.*?)</)[1]);
var jsurl = player.url; var jsurl = player.url;
......
...@@ -14,6 +14,7 @@ subprocess.Popen = partial(subprocess.Popen, encoding="utf-8") # 固定写法 ...@@ -14,6 +14,7 @@ subprocess.Popen = partial(subprocess.Popen, encoding="utf-8") # 固定写法
# 解决execjs执行js时产生的乱码报错,需要在导入该模块之前,让Popen的encoding参数锁定为utf-8 # 解决execjs执行js时产生的乱码报错,需要在导入该模块之前,让Popen的encoding参数锁定为utf-8
# import execjs # import execjs
import js2py import js2py
from js2py.base import JsObjectWrapper
# os.environ["EXECJS_RUNTIME"] = "JScript" # os.environ["EXECJS_RUNTIME"] = "JScript"
# print(execjs.get().name) # print(execjs.get().name)
...@@ -155,7 +156,7 @@ def covert_demo(): ...@@ -155,7 +156,7 @@ def covert_demo():
print(loader.eval('r = requests.get("https://www.baidu.com/");r.encoding = "utf-8";r.text')) print(loader.eval('r = requests.get("https://www.baidu.com/");r.encoding = "utf-8";r.text'))
# 下面是错误用法,没有loader环境没法正确eval_js,有loader用eval不需要eval_js # 下面是错误用法,没有loader环境没法正确eval_js,有loader用eval不需要eval_js
# print(js2py.eval_js('r = requests.get("https://www.baidu.com/");r.encoding = "utf-8";r.text')) # print(js2py.eval_js('r = requests.get("https://www.baidu.com/");r.encoding = "utf-8";r.text'))
with open('../js/夜空.js',encoding='utf-8') as f: with open('../js/蓝莓影视.js',encoding='utf-8') as f:
yk = f.read() yk = f.read()
print(yk) print(yk)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册