1
This commit is contained in:
19
js/README.md
Normal file
19
js/README.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# 编写 uz 可执行的脚本
|
||||
|
||||
1. 感谢您的关注,由于作者对 js 了解甚少,所以内置的代码不够全面。**如果您要编写 uz 可执行的脚本需要添加代码或其他问题,可以联系[机器人](https://t.me/uzVideoAppbot)**
|
||||
2. uzCode.js 内部定义了一些类和方法,您需要在脚本中实现 WebApiBase 的所有方法。
|
||||
3. uz 内部仅有一个运行时,所有代码(包括脚本)都在一起加载执行。所以您的脚本内类名一定要特殊,实例名称也要特殊。
|
||||
4. 不支持 import export
|
||||
5. 集成了 cat.js ,由于不支持 export ,对 cat.js 做了简单修改。
|
||||
6. 成对使用 `// ignore` uz 内部会忽略包裹的内容
|
||||
7. 为您的脚本编写以下 json 配置文件
|
||||
```
|
||||
{
|
||||
"name": "厂长视频",
|
||||
"api": "脚本链接",
|
||||
"instance": "实例名称",
|
||||
"webSite": "视频站地址,当获取分类时传入该地址",
|
||||
"remark": "备注"
|
||||
}
|
||||
|
||||
```
|
||||
27456
js/core/cat.js
Normal file
27456
js/core/cat.js
Normal file
File diff suppressed because one or more lines are too long
7316
js/core/uzCode.js
Normal file
7316
js/core/uzCode.js
Normal file
File diff suppressed because one or more lines are too long
133
js/package-lock.json
generated
Normal file
133
js/package-lock.json
generated
Normal file
@@ -0,0 +1,133 @@
|
||||
{
|
||||
"name": "jsbox",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"dependencies": {
|
||||
"node-html-parser": "^6.1.13"
|
||||
}
|
||||
},
|
||||
"node_modules/boolbase": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
||||
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
|
||||
},
|
||||
"node_modules/css-select": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
|
||||
"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
|
||||
"dependencies": {
|
||||
"boolbase": "^1.0.0",
|
||||
"css-what": "^6.1.0",
|
||||
"domhandler": "^5.0.2",
|
||||
"domutils": "^3.0.1",
|
||||
"nth-check": "^2.0.1"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/fb55"
|
||||
}
|
||||
},
|
||||
"node_modules/css-what": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
|
||||
"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/fb55"
|
||||
}
|
||||
},
|
||||
"node_modules/dom-serializer": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
|
||||
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
|
||||
"dependencies": {
|
||||
"domelementtype": "^2.3.0",
|
||||
"domhandler": "^5.0.2",
|
||||
"entities": "^4.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/domelementtype": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
|
||||
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/fb55"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/domhandler": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
|
||||
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
|
||||
"dependencies": {
|
||||
"domelementtype": "^2.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/domhandler?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/domutils": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
|
||||
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
|
||||
"dependencies": {
|
||||
"dom-serializer": "^2.0.0",
|
||||
"domelementtype": "^2.3.0",
|
||||
"domhandler": "^5.0.3"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/domutils?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
|
||||
"engines": {
|
||||
"node": ">=0.12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/entities?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/he": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
||||
"bin": {
|
||||
"he": "bin/he"
|
||||
}
|
||||
},
|
||||
"node_modules/node-html-parser": {
|
||||
"version": "6.1.13",
|
||||
"resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz",
|
||||
"integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==",
|
||||
"dependencies": {
|
||||
"css-select": "^5.1.0",
|
||||
"he": "1.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/nth-check": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
|
||||
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
|
||||
"dependencies": {
|
||||
"boolbase": "^1.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/nth-check?sponsor=1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
5
js/package.json
Normal file
5
js/package.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"node-html-parser": "^6.1.13"
|
||||
}
|
||||
}
|
||||
367
js/spider/changZhang20240614.js
Normal file
367
js/spider/changZhang20240614.js
Normal file
@@ -0,0 +1,367 @@
|
||||
// ignore
|
||||
import { WebApiBase, VideoClass } from "../core/uzCode.js";
|
||||
import { parse } from "node-html-parser";
|
||||
// ignore
|
||||
|
||||
class ChangZhang20240614 extends WebApiBase {
|
||||
webSite = "https://www.czys.top";
|
||||
/**
|
||||
* 异步获取分类列表的方法。
|
||||
* @param {UZArgs} args
|
||||
* @returns {Promise<RepVideoClassList>}
|
||||
*/
|
||||
async getClassList(args) {
|
||||
let webUrl = args.url;
|
||||
// 如果通过首页获取分类的话,可以将对象内部的首页更新
|
||||
this.webSite = this.removeTrailingSlash(webUrl);
|
||||
var backData = new RepVideoClassList();
|
||||
try {
|
||||
const pro = await req(webUrl);
|
||||
backData.error = pro.error;
|
||||
let proData = pro.data;
|
||||
if (proData) {
|
||||
var document = parse(proData);
|
||||
var allClass = document.querySelectorAll("ul.submenu_mi > li > a");
|
||||
var list = [];
|
||||
for (let index = 0; index < allClass.length; index++) {
|
||||
const element = allClass[index];
|
||||
var isIgnore = this.isIgnoreClassName(element.text);
|
||||
if (isIgnore) {
|
||||
continue;
|
||||
}
|
||||
var type_name = element.text;
|
||||
var url = element.attributes["href"];
|
||||
url = this.combineUrl(url);
|
||||
|
||||
if (url.length > 0 && type_name.length > 0) {
|
||||
var videoClass = new VideoClass();
|
||||
videoClass.type_id = url;
|
||||
videoClass.type_name = type_name;
|
||||
list.push(videoClass);
|
||||
}
|
||||
}
|
||||
backData.data = list;
|
||||
}
|
||||
} catch (error) {
|
||||
backData.error = "获取分类失败~";
|
||||
}
|
||||
return backData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取分类视频列表
|
||||
* @param {UZArgs} args
|
||||
* @returns {Promise<RepVideoList>}
|
||||
*/
|
||||
async getVideoList(args) {
|
||||
var listUrl = this.removeTrailingSlash(args.url) + "/page/" + args.page;
|
||||
var backData = new RepVideoClassList();
|
||||
try {
|
||||
let pro = await req(listUrl, null);
|
||||
backData.error = pro.error;
|
||||
let proData = pro.data;
|
||||
if (proData) {
|
||||
var document = parse(proData);
|
||||
var allVideo = document
|
||||
.querySelector(".bt_img.mi_ne_kd.mrb")
|
||||
.querySelectorAll("ul > li");
|
||||
var videos = [];
|
||||
for (let index = 0; index < allVideo.length; index++) {
|
||||
const element = allVideo[index];
|
||||
var vodUrl = element.querySelector("a")?.attributes["href"] ?? "";
|
||||
var vodPic =
|
||||
element.querySelector("a > img")?.attributes["data-original"] ?? "";
|
||||
var vodName =
|
||||
element.querySelector("a > img")?.attributes["alt"] ?? "";
|
||||
var vodDiJiJi = element.querySelector("div.jidi > span")?.text;
|
||||
var vodHD =
|
||||
element.querySelector("div.hdinfo > span.qb")?.text ??
|
||||
element.querySelector("div.hdinfo > span.furk")?.text;
|
||||
|
||||
var vodDouBan = element.querySelector("div.rating")?.text ?? "";
|
||||
vodUrl = this.combineUrl(vodUrl);
|
||||
|
||||
let videoDet = new VideoDetail();
|
||||
videoDet.vod_id = vodUrl;
|
||||
videoDet.vod_pic = vodPic;
|
||||
videoDet.vod_name = vodName;
|
||||
videoDet.vod_remarks = vodDiJiJi ?? vodHD;
|
||||
videoDet.vod_douban_score = vodDouBan;
|
||||
videos.push(videoDet);
|
||||
}
|
||||
backData.data = videos;
|
||||
}
|
||||
} catch (error) {
|
||||
backData.error = "获取列表失败~";
|
||||
}
|
||||
return backData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取视频详情
|
||||
* @param {UZArgs} args
|
||||
* @returns {Promise<RepVideoDetail>}
|
||||
*/
|
||||
async getVideoDetail(args) {
|
||||
var backData = new RepVideoDetail();
|
||||
try {
|
||||
var webUrl = args.url;
|
||||
let pro = await req(webUrl, null);
|
||||
backData.error = pro.error;
|
||||
let proData = pro.data;
|
||||
if (proData) {
|
||||
var document = parse(proData);
|
||||
var vod_pic =
|
||||
document.querySelector(".dyimg.fl > img")?.attributes["src"] ?? "";
|
||||
var vod_name =
|
||||
document.querySelector("div.moviedteail_tt > h1")?.text ?? "";
|
||||
var detList =
|
||||
document.querySelector(".moviedteail_list")?.querySelectorAll("li") ??
|
||||
[];
|
||||
var vod_year = "";
|
||||
var vod_director = "";
|
||||
var vod_actor = "";
|
||||
var vod_area = "";
|
||||
var vod_lang = "";
|
||||
var vod_douban_score = "";
|
||||
var type_name = "";
|
||||
|
||||
for (let index = 0; index < detList.length; index++) {
|
||||
const element = detList[index];
|
||||
if (element.text.includes("年份")) {
|
||||
vod_year = element.text.replace("年份:", "");
|
||||
} else if (element.text.includes("导演")) {
|
||||
vod_director = element.text.replace("导演:", "");
|
||||
} else if (element.text.includes("主演")) {
|
||||
vod_actor = element.text.replace("主演:", "");
|
||||
} else if (element.text.includes("地区")) {
|
||||
vod_area = element.text.replace("地区:", "");
|
||||
} else if (element.text.includes("语言")) {
|
||||
vod_lang = element.text.replace("语言:", "");
|
||||
} else if (element.text.includes("类型")) {
|
||||
type_name = element.text.replace("类型:", "");
|
||||
} else if (element.text.includes("豆瓣")) {
|
||||
vod_douban_score = element.text.replace("豆瓣:", "");
|
||||
}
|
||||
}
|
||||
|
||||
var vod_content = "";
|
||||
var vodBlurbDocument = document.querySelector(".yp_context");
|
||||
|
||||
if (vodBlurbDocument) {
|
||||
vod_content = vodBlurbDocument.text;
|
||||
|
||||
var allP = vodBlurbDocument.querySelectorAll("p");
|
||||
|
||||
for (let index = 0; index < allP.length; index++) {
|
||||
const element = allP[index];
|
||||
vod_content = vod_content + element.text;
|
||||
}
|
||||
}
|
||||
|
||||
var juJiDocment =
|
||||
document.querySelector(".paly_list_btn")?.querySelectorAll("a") ?? [];
|
||||
|
||||
var vod_play_url = "";
|
||||
for (let index = 0; index < juJiDocment.length; index++) {
|
||||
const element = juJiDocment[index];
|
||||
|
||||
vod_play_url += element.text;
|
||||
vod_play_url += "$";
|
||||
vod_play_url += element.attributes["href"];
|
||||
vod_play_url += "#";
|
||||
}
|
||||
|
||||
let detModel = new VideoDetail();
|
||||
detModel.vod_year = vod_year;
|
||||
detModel.type_name = type_name;
|
||||
detModel.vod_director = vod_director;
|
||||
detModel.vod_actor = vod_actor;
|
||||
detModel.vod_area = vod_area;
|
||||
detModel.vod_lang = vod_lang;
|
||||
detModel.vod_douban_score = vod_douban_score;
|
||||
detModel.vod_content = vod_content;
|
||||
detModel.vod_pic = vod_pic;
|
||||
detModel.vod_name = vod_name;
|
||||
detModel.vod_play_url = vod_play_url;
|
||||
detModel.vod_id = webUrl;
|
||||
backData.data = detModel;
|
||||
}
|
||||
} catch (error) {
|
||||
backData.error = "获取视频详情失败";
|
||||
}
|
||||
|
||||
return backData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取视频的播放地址
|
||||
* @param {UZArgs} args
|
||||
* @returns {Promise<RepVideoPlayUrl>}
|
||||
*/
|
||||
async getVideoPlayUrl(args) {
|
||||
var backData = new RepVideoPlayUrl();
|
||||
try {
|
||||
const pro = await req(args.url);
|
||||
backData.error = pro.error;
|
||||
let proData = pro.data;
|
||||
|
||||
if (proData) {
|
||||
var document = parse(proData);
|
||||
|
||||
let jsUrl = document.querySelector("iframe")?.attributes["src"] ?? "";
|
||||
if (jsUrl.length > 0) {
|
||||
let pro2 = await req(jsUrl, {
|
||||
headers: {
|
||||
Referer: this.webSite,
|
||||
"Sec-Fetch-Dest": "iframe",
|
||||
"Sec-Fetch-Mode": "navigate",
|
||||
},
|
||||
});
|
||||
pro2.error += pro.error;
|
||||
if (pro2.data) {
|
||||
let root = parse(pro2.data);
|
||||
let scripts = root.querySelectorAll("script");
|
||||
var code1 = "";
|
||||
if (scripts.length - 2 > 0) {
|
||||
code1 = scripts[scripts.length - 2].text;
|
||||
// console.log(code1);
|
||||
if (code1.indexOf("var player") > -1) {
|
||||
let player = code1.match(/var player = "(.*?)"/);
|
||||
let rand = code1.match(/var rand = "(.*?)"/);
|
||||
// console.log(player[1]);
|
||||
// console.log(rand[1]);
|
||||
let content = JSON.parse(
|
||||
this.cryptJs(player[1], "VFBTzdujpR9FWBhe", rand[1])
|
||||
);
|
||||
backData.data = content["url"];
|
||||
} else {
|
||||
// let path = scripts[scripts.length - 1].attributes["src"];
|
||||
// let host = UZUtils.getHostFromURL(jsUrl);
|
||||
// let pro = await req(host + path, {
|
||||
// headers: {
|
||||
// Referer: this.webSite,
|
||||
// "Sec-Fetch-Dest": "iframe",
|
||||
// "Sec-Fetch-Mode": "navigate",
|
||||
// },
|
||||
// });
|
||||
|
||||
// 浏览器里这样执行可以。。。
|
||||
// let c =
|
||||
// 'document[_0x2911("43", "EL@a")](_0x82e421)[_0x2911("44", "vU#R")] =';
|
||||
// var videoHtml = "";
|
||||
// let code2 = pro.data.replace(c, "videoHtml =");
|
||||
|
||||
// console.log(code2);
|
||||
// var res = eval('var videoHtml = "";' + code1 + code2);
|
||||
// console.log(res);
|
||||
backData.data = "";
|
||||
backData.error = "这个加密不知道怎么解~";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let x =
|
||||
document.querySelectorAll("script:contains(window.wp_nonce)") ?? [];
|
||||
if (x.length > 0) {
|
||||
let code = x[0].text;
|
||||
let group = code.match(/(var.*)eval\((\w*\(\w*\))\)/);
|
||||
const md5 = Crypto;
|
||||
const result = eval(group[1] + group[2]);
|
||||
let url = result.match(/url:.*?['"](.*?)['"]/)[1];
|
||||
backData.data = url;
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
backData.error = "获取视频播放地址失败";
|
||||
}
|
||||
return backData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索视频
|
||||
* @param {UZArgs} args
|
||||
* @returns {Promise<RepVideoList>}
|
||||
*/
|
||||
async searchVideo(args) {
|
||||
var backData = new RepVideoList();
|
||||
// let url =
|
||||
// this.removeTrailingSlash(this.webSite) +
|
||||
// "/daoyongjiekoshibushiyoubing?q=" +
|
||||
// args.searchWord +
|
||||
// "&f=_all&p=" +
|
||||
// args.page;
|
||||
// let pro = await req(url, {
|
||||
// headers: {
|
||||
// "Cookie":
|
||||
// "cf_clearance=FNTfIrcfhaIjgq31GXM.lheyLTqcDDdOmUG6ci8xZo0-1718372164-1.0.1.1-3Sd9Aat3W4QbdrO8l4t6UF2dCLFjuHFeRVeH6VIXDAsYpitprJkKkESjPbPpendwyIuQMfYHzTqj_EXPeDselw; Hm_lvt_07305e6f6305a01dd93218c7fe6bc9c3=1717259553; Hm_lvt_06341c948291d8e90aac72f9d64905b3=1717259553; Hm_lvt_0653ba1ead8a9aabff96252e70492497=1717259553; myannoun=1",
|
||||
// "User-Agent":
|
||||
// "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
|
||||
// },
|
||||
// });
|
||||
// backData.error = pro.error;
|
||||
// let proData = pro.data;
|
||||
// if (proData) {
|
||||
// var document = parse(proData);
|
||||
|
||||
// let allVideo =
|
||||
// document
|
||||
// .querySelector(".bt_img.mi_ne_kd.search_list")
|
||||
// ?.querySelectorAll("ul > li") ?? [];
|
||||
// }
|
||||
return backData;
|
||||
}
|
||||
|
||||
ignoreClassName = ["关于", "公告", "官方", "备用", "群", "地址"];
|
||||
|
||||
cryptJs(text, key, iv, type) {
|
||||
let key_value = Crypto.enc.Utf8.parse(key || "PBfAUnTdMjNDe6pL");
|
||||
let iv_value = Crypto.enc.Utf8.parse(iv || "sENS6bVbwSfvnXrj");
|
||||
let content;
|
||||
if (type) {
|
||||
content = Crypto.AES.encrypt(text, key_value, {
|
||||
iv: iv_value,
|
||||
mode: Crypto.mode.CBC,
|
||||
padding: Crypto.pad.Pkcs7,
|
||||
});
|
||||
} else {
|
||||
content = Crypto.AES.decrypt(text, key_value, {
|
||||
iv: iv_value,
|
||||
padding: Crypto.pad.Pkcs7,
|
||||
}).toString(Crypto.enc.Utf8);
|
||||
}
|
||||
return content;
|
||||
}
|
||||
|
||||
combineUrl(url) {
|
||||
if (url === undefined) {
|
||||
return "";
|
||||
}
|
||||
if (url.indexOf(this.webSite) !== -1) {
|
||||
return url;
|
||||
}
|
||||
if (url.startsWith("/")) {
|
||||
return this.webSite + url;
|
||||
}
|
||||
return this.webSite + "/" + url;
|
||||
}
|
||||
|
||||
isIgnoreClassName(className) {
|
||||
for (let index = 0; index < this.ignoreClassName.length; index++) {
|
||||
const element = this.ignoreClassName[index];
|
||||
if (className.indexOf(element) !== -1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
removeTrailingSlash(str) {
|
||||
if (str.endsWith("/")) {
|
||||
return str.slice(0, -1);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
}
|
||||
var changZhang20240614 = new ChangZhang20240614();
|
||||
7
js/spider/changZhang20240614.json
Normal file
7
js/spider/changZhang20240614.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "厂长视频",
|
||||
"api": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/YYDS678/uzVideo/main/js/spider/changZhang20240614.js",
|
||||
"instance": "changZhang20240614",
|
||||
"webSite": "https://www.czys.top",
|
||||
"remark": "部分视频不会解密,不支持搜索"
|
||||
}
|
||||
Reference in New Issue
Block a user