提交 74856666 编写于 作者: H hjdhnx

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

上级 8f394e95
......@@ -216,6 +216,7 @@ def vod():
return jsonify(error.failed('爬虫规则加载失败'))
# rule = ctx.eval('rule')
# print(type(ctx.rule.lazy()),ctx.rule.lazy().toString())
ruleDict = ctx.rule.to_dict()
ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
# print(ruleDict)
......
......@@ -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 verifyCode
from utils.safePython import safePython
from utils.parser import runPy,runJScode
from utils.parser import runPy,runJScode,JsObjectWrapper
from utils.htmlParser import jsoup
from urllib.parse import urljoin
from concurrent.futures import ThreadPoolExecutor # 引入线程池
......@@ -731,10 +731,13 @@ class CMS:
if not jxs:
jxs = []
if self.lazy:
print(f'{play_url}->开始执行免嗅代码->{self.lazy}')
print(f'{play_url}->开始执行免嗅代码{type(self.lazy)}->{self.lazy}')
t1 = time()
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)
if pycode:
# print(pycode)
......@@ -750,16 +753,19 @@ class CMS:
jscode = str(self.lazy).split('js:')[1]
# jscode = f'var input={play_url};{jscode}'
# print(jscode)
headers['Referer'] = getHome(play_url)
py_ctx.update({
'input': play_url,
'fetch_params':{'headers':headers,'timeout':self.d.timeout,'encoding':self.d.encoding},
'd': self.d,
'jxs':jxs,
'getParse':self.d.getParse,
'saveParse':self.d.saveParse,
'pdfh': self.d.jsp.pdfh,
'pdfa': self.d.jsp.pdfa, 'pd': self.d.jsp.pd,
})
ctx = py_ctx
# print(ctx)
t1 = time()
jscode = getPreJs() + jscode
# print(jscode)
loader,_ = runJScode(jscode,ctx=ctx)
......@@ -782,6 +788,8 @@ if __name__ == '__main__':
js_path = f'js/vip影院.js'
ctx, js_code = parser.runJs(js_path,before=before)
ruleDict = ctx.rule.to_dict()
# lazy = ctx.eval('lazy')
# print(lazy)
# ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
cms = CMS(ruleDict)
......
......@@ -17,7 +17,8 @@ var rule = {
// 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);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,
推荐:'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;;a&&href',
double:true, // 推荐内容是否双层定位
......
......@@ -6,5 +6,10 @@ searchUrl:'/search/**-fypage.html',
searchable:1,
quickSearch:1,
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:
cacheUrl = d.getParse(input);
// cacheUrl = d.getParse(input);
cacheUrl = getParse(input);
// print(cacheUrl);
if(cacheUrl){
input=cacheUrl;
}else{
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, fetch_params);
// js = pdfh(html,'.stui-player__video script:eq(0)&&Html');
// print(js);
let ret = html.match(/var player_(.*?)=(.*?)</)[2];
......@@ -14,7 +16,8 @@ if(cacheUrl){
if(url.length > 10){
real_url = 'https://player.buyaotou.xyz/?url='+url;
// log('免嗅地址:'+real_url);
d.saveParse(input,real_url);
// d.saveParse(input,real_url);
saveParse(input,real_url);
input = real_url;
}
}catch (e) {
......
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 headers = d.headers;
// headers['Referer'] = input;
// let fetch_params = {headers:headers,timeout:d.timeout,encoding:d.encoding};
print(fetch_params);
let html = fetch(input,fetch_params);
var player = JSON.parse(html.match(/r player_.*?=(.*?)</)[1]);
var jsurl = player.url;
......
......@@ -14,6 +14,7 @@ subprocess.Popen = partial(subprocess.Popen, encoding="utf-8") # 固定写法
# 解决execjs执行js时产生的乱码报错,需要在导入该模块之前,让Popen的encoding参数锁定为utf-8
# import execjs
import js2py
from js2py.base import JsObjectWrapper
# os.environ["EXECJS_RUNTIME"] = "JScript"
# print(execjs.get().name)
......@@ -155,7 +156,7 @@ def covert_demo():
print(loader.eval('r = requests.get("https://www.baidu.com/");r.encoding = "utf-8";r.text'))
# 下面是错误用法,没有loader环境没法正确eval_js,有loader用eval不需要eval_js
# 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()
print(yk)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册