您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Aluk-js可以帮助用户选择元素,get/post/jsop请求
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/488144/1333062/Aluk-js.js
- /*
- Aluk Query Library
- (c)2023-2024 Flutas,All rights,Reserved.
- (Powered by Xbodw)
- Linense MIT
- */
- (function() {
- /**
- * @param {*} s - Selector
- * @param {*} [m] - Mode
- * @param {*} [e] - The base object
- */
- window.aluk = function(s, m, e) {
- return new querylist(s, m, e);
- }
- var al = {
- fn: {
- request: (o, method) => {
- if (!o) {
- o = { promise: false, url: '' }
- }
- if (o.jsonp) {
- return new Promise((resolve) => {
- var script = document.createElement('script');
- let url = new URL(o.url);
- let param = url.searchParams;
- let callback = aluk.generateRandomFunctionName();
- if (!(param.get('callback'))) {
- param.set('callback', callback);
- }
- script.src = url.href;
- window[callback] = function (data) {
- delete window[callback];
- document.body.removeChild(script);
- resolve(data);
- };
- document.body.appendChild(script);
- });
- }
- return new Promise((resolve, reject) => {
- if (o.promise) {
- fetch(o.url, {
- method: method || 'GET',
- headers: o.headers,
- body: o.body,
- })
- .then(response => {
- if (!response.ok) {
- throw new Error('Network response was not ok');
- }
- resolve(response);
- })
- .catch(error => {
- reject(error);
- });
- } else {
- var xhr = new XMLHttpRequest();
- xhr.open(method || 'GET', o.url);
- if (o.headers) {
- for (var header in o.headers) {
- xhr.setRequestHeader(header, o.headers[header]);
- }
- }
- xhr.onload = () => {
- if (xhr.status >= 200 && xhr.status < 300) {
- resolve(xhr.response);
- } else {
- reject(xhr.statusText);
- }
- };
- xhr.onerror = () => {
- reject(xhr.statusText);
- };
- xhr.send(o.body);
- }
- });
- }
- }
- }
- aluk.version = '1.5.1';
- aluk.language = 'zh-cn';
- aluk.generateRandomFunctionName = () => {
- const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- const length = 10;
- let randomFunctionName = 'aluk';
- for (let i = 0; i < length; i++) {
- randomFunctionName += characters.charAt(Math.floor(Math.random() * characters.length));
- }
- return randomFunctionName;
- }
- /**
- * @param {*} s - Selector
- * @param {*} [m] - Mode
- * @param {*} [e] - The base object
- */
- function querylist(s, m = {}, e = document) {
- var ce;
- if (s == '' || s == undefined) {
- ce = '';
- return;
- }
- if (typeof (s) == 'string' && aluk.checkHtml(s) === false) {
- try {
- ce = e.querySelectorAll(s);
- } catch (ex) {
- ce = e;
- throw new Error("Failed to execute aluk(s,m,e): selector is undefined or Query Failed")
- }
- } else {
- if (typeof (s) == 'number') {
- ce = '';
- } else {
- if (typeof (s) == 'object') {
- ce = new Array(s);
- } else {
- if (aluk.checkHtml(s) === true) {
- ce = new Array(aluk.htmlToElement(s));
- }
- }
- }
- }
- if (m.shadowroot == true) {
- ce = Array.from(ce).reduce((acc, curr) => {
- acc.push(curr);
- if (curr.shadowRoot) {
- let shadowRootElements = curr.shadowRoot.querySelectorAll('*');
- acc.push(...shadowRootElements);
- shadowRootElements.forEach(element => {
- let nestedShadowRootElements = queryShadowRoots(element);
- acc.push(...nestedShadowRootElements);
- });
- }
- return acc;
- }, []);
- }
- if (ce.length > 1) {
- ce.forEach(element => {
- this.push(element);
- });
- } else {
- if (ce.length > 0) {
- this.push(ce[0]);
- }
- }
- this.NormalResult = document;
- }
- function queryShadowRoots(element) {
- if (element.shadowRoot) {
- let elements = element.shadowRoot.querySelectorAll('*');
- let result = Array.from(elements);
- elements.forEach(el => {
- let nestedShadowRootElements = queryShadowRoots(el);
- result.push(...nestedShadowRootElements);
- });
- return result;
- } else {
- return [];
- }
- }
- /*
- function querylist(s,m = {},e = document) {
- var ce;
- if (s == '' || s == undefined) {
- ce = '';
- return;
- }
- if (typeof (s) == 'string' && aluk.checkHtml(s) === false) {
- try {
- ce = e.querySelectorAll(s);
- } catch(ex) {
- ce = e;
- throw new Error("Failed to execute aluk(s,m,e): selector is undefined or Query Failed")
- }
- } else {
- if (typeof (s) == 'number') {
- ce = '';
- } else {
- if (typeof (s) == 'object') {
- ce = new Array(s);
- } else {
- if (aluk.checkHtml(s) === true) {
- ce = new Array(aluk.htmlToElement(s));
- }
- }
- }
- }
- if(m.shadowroot == true) {
- ce = [];
- }
- if (ce.length > 1) {
- ce.forEach(element => {
- this.push(element);
- });
- } else {
- if (ce.length > 0) {
- this.push(ce[0]);
- }
- }
- this.NormalResult = document;
- }
- */
- querylist.prototype = new Array();
- querylist.prototype.createChildElement = function (index, options) {
- if (typeof (options) != 'object') {
- if (aluk.language != 'zh-cn') {
- throw new Error('Element Options Type Must as the Object');
- } else {
- throw new Error('Element选项必须是Object');
- }
- }
- if (options.ElementType == undefined) {
- if (aluk.language != 'zh-cn') {
- throw new Error('Element name not specified or empty')
- } else {
- throw new Error('Element类型不能为空');
- }
- }
- if (options.ElementType == '') {
- if (aluk.language != 'zh-cn') {
- throw new Error('Element name not specified or empty')
- } else {
- throw new Error('Element类型不能为空');
- }
- }
- var result = document.createElement(options.ElementType);
- if (options.Class == undefined) {
- } else {
- result.classList.value += options.Class;
- }
- if (options.id == undefined) {
- } else {
- result.id = options.id;
- }
- if (options.innerHTML == undefined) {
- } else {
- result.innerHTML = options.innerHTML;
- }
- this[index].appendChild(result);
- return Promise.resolve(this[index]);
- }
- aluk.objectToCss = function (o, m = {}) {
- return Object.entries(o)
- .map(([key, value]) => `${key}: ${value};`)
- //.join('\n');
- }
- querylist.prototype.SetCss = function (index, cssList) {
- if (typeof (index) == 'object') {
- var csst = aluk.objectToCss(index);
- var cssaddcount = 0;
- this.forEach((e) => {
- e.style.cssText = '';
- csst.forEach(h => {
- e.style.cssText += h;
- cssaddcount++;
- })
- })
- return cssaddcount;
- }
- if (index > this.length - 1) {
- throw new Error('Index超出了预期范围');
- } else if (index == undefined || index == null) {
- throw new Error('Index为空或不存在');
- }
- if (typeof (cssList) != 'object') {
- throw new Error('Css列表必须为Object');
- }
- var csst = aluk.objectToCss(cssList);
- this[index].style.cssText = '';
- var cssaddcount = 0;
- csst.forEach(h => {
- this[index].style.cssText += h;
- cssaddcount++;
- })
- return cssaddcount;
- }
- querylist.prototype.AppendorMoveto = function (index, index2, appender) {
- var append;
- if (appender instanceof querylist) {
- if (index > appender.length - 1) {
- throw new Error('Index超出了预期范围');
- } else if (index == undefined || index == null) {
- throw new Error('Index为空或不存在: 如果使用aluk querylist对象代替Element,那么请指定Index');
- }
- append = appender[index];
- } else {
- if (!aluk.isHtmlElement(appender)) {
- throw new Error('请指定html元素或者aluk querylist对象');
- }
- append = appender;
- }
- if (index2 > this.length - 1) {
- throw new Error('Index2超出了预期范围');
- } else if (index2 == undefined || index2 == null) {
- throw new Error('Index2为空或不存在: 选择第几项来插入到appender的' + index2 + '项', '那么请指定Index2');
- }
- append.appendChild(this[index]);
- }
- querylist.prototype.RemoveX = function () {
- let count = 0;
- this.forEach(s => {
- s.remove();
- count++;
- })
- return count;
- }
- querylist.prototype.continue = function (s) {
- if (s == undefined || s == '') {
- if (aluk.language != 'zh-cn') {
- throw new Error('Your Selector was empty or undefined,please.');
- } else {
- throw new Error('您的选择器为空或未定义');
- }
- }
- var newe = [];
- for (var i = 0; i < this.length; i++) {
- var m = aluk(s,{},this[i]);
- newe.push(m);
- }
- var n = new querylist('<null>');
- n.shift();
- newe.forEach(y => {
- y.forEach(z => {
- n.push(z)
- })
- })
- n.NormalResult = n[0];
- return n;
- }
- querylist.prototype.gsval = function (text) {
- if (text == undefined) {
- var result = [];
- this.forEach(e => {
- result.push(e.value)
- })
- return result;
- } else {
- this.forEach(e => {
- e.value = text;
- })
- }
- }
- querylist.prototype.gstext = function (text) {
- if (text == undefined) {
- var result = [];
- this.forEach(e => {
- result.push(e.innerText)
- })
- return result;
- } else {
- this.forEach(e => {
- e.innerText = text;
- })
- }
- }
- querylist.prototype.newclicke = function (call) {
- if (call == undefined || typeof call != 'function') {
- throw new Error('函数为空');
- }
- this.forEach(ef => {
- ef.addEventListener('click', function (e) {
- call(e);
- })
- })
- }
- querylist.prototype.Prep = function (call) {
- var events = ['addEventListener'];
- var getEvent = function (index) {
- index = index - 0;
- var eventName = events[index];
- return eventName;
- };
- document[getEvent(0)]('DOMContentLoaded', function (event) {
- call(event);
- });
- }
- querylist.prototype.event = (o,s,t) => {
- if(typeof (o) == 'number') {
- if(this.length > 0) {
- this[o].addEventListener(s,t);
- } else {
- throw new Error('Failed to event(o,s,t): Beyond the bounds of an array')
- }
- } else {
- if(this.length > 1) {
- this.forEach(element => {
- element.addEventListener(o,s);
- })
- } else {
- if(this.length > 0) {
- this[0].addEventListener(o,s);
- }
- }
- }
- }
- querylist.prototype.hide = (i) => {
- if(typeof(i) == 'undefined') {
- if(this.length > 1) {
- this.forEach(e => {
- e.SetCss({'display' : 'none'});
- })
- } else {
- this[0].SetCss({'display' : 'none'});
- }
- } else {
- this[i].SetCss({'display' : 'none'});
- }
- }
- querylist.prototype.show = (i) => {
- if(typeof(i) == 'undefined') {
- if(this.length > 1) {
- this.forEach(e => {
- e.SetCss({'display' : ''});
- })
- } else {
- this[0].SetCss({'display' : ''});
- }
- } else {
- this[i].SetCss({'display' : ''});
- }
- }
- aluk.isHtmlElement = (variable) => {
- return variable instanceof Element || variable instanceof HTMLElement;
- }
- aluk.createElementX = (options) => {
- if (typeof (options) != 'object') {
- if (aluk.language != 'zh-cn') {
- throw new Error('Element Options Type Must as the Object');
- } else {
- throw new Error('Element选项必须是Object');
- }
- }
- if (options.ElementType == undefined) {
- if (aluk.language != 'zh-cn') {
- throw new Error('Element name not specified or empty')
- } else {
- throw new Error('Element类型不能为空');
- }
- }
- if (options.ElementType == '') {
- if (aluk.language != 'zh-cn') {
- throw new Error('Element name not specified or empty')
- } else {
- throw new Error('Element类型不能为空');
- }
- }
- var result = document.createElement(options.ElementType);
- if (options.Class == undefined) {
- } else {
- result.classList.value += options.Class;
- }
- if (options.id == undefined) {
- } else {
- result.id = options.id;
- }
- if (options.innerHTML == undefined) {
- } else {
- result.innerHTML = options.innerHTML;
- }
- return aluk(result);
- }
- aluk.htmlEscape = (htmlStr) => {
- return htmlStr.replace(/<|>|"|&/g, match => {
- switch (match) {
- case '<':
- return '<';
- case '>':
- return '>';
- case '"':
- return '"';
- case '&':
- return '&';
- }
- })
- }
- aluk.htmlUnescape = (html) => {
- return html.replace(/<|>|"|&/g, match => {
- switch (match) {
- case '<':
- return '<';
- case '>':
- return '>';
- case '"':
- return '"';
- case '&':
- return '&';
- }
- })
- }
- aluk.appendHTMLX = (appender, element, options) => {
- if (appender == undefined) {
- if (aluk.language != 'zh-cn') {
- throw new Error('AppendElement name not specified or empty')
- } else {
- throw new Error('追加者Element类型不能为空');
- }
- }
- if (element == undefined) {
- if (aluk.language != 'zh-cn') {
- throw new Error('Append HTML not specified or empty')
- } else {
- throw new Error('追加的HTML不能为空');
- }
- }
- if (typeof (options) != 'boolean') {
- if (options != undefined) {
- if (aluk.language != 'zh-cn') {
- throw new Error('Options not specified or empty')
- } else {
- throw new Error('选项为空或不存在');
- }
- }
- }
- let fixr = element.innerHTML;
- let fixed = fixr;
- if (options) {
- fixed = aluk.htmlEscape(fixr);
- }
- appender.innerHTML += fixed;
- return Promise.resolve(appender.innerHTML);
- }
- aluk.checkHtml = (htmlStr) => {
- var reg = /<[a-z][\s\S]*>/i;
- return reg.test(htmlStr);
- }
- aluk.htmlToElement = (html) => {
- const parser = new DOMParser();
- const doc = parser.parseFromString(html, 'text/html');
- return doc.body.firstChild;
- }
- aluk.WebUrlToBase64 = function (url, callback) {
- var methods = [
- 'send',
- 'responseType',
- 'onload'
- ];
- var getMethod = function (index) {
- index = index - 0;
- var methodName = methods[index];
- return methodName;
- };
- var xhr = new XMLHttpRequest();
- xhr[getMethod(2)] = function () {
- var fileReader = new FileReader();
- fileReader.onloadend = function () {
- callback(fileReader.result);
- };
- fileReader.readAsDataURL(xhr.response);
- };
- xhr.open('GET', url);
- xhr[getMethod(1)] = 'blob';
- xhr[getMethod(0)]();
- }
- aluk.ajax = (o) => {
- return new al.fn.ajax(o, o.method);
- }
- aluk.encodeX = (code, key = 0) => {
- var keys;
- if (key == undefined) {
- keys = '0';
- } else {
- keys = key;
- }
- var codeb;
- if (typeof code == 'object') {
- codeb = JSON.stringify(code)
- } else {
- codeb = code;
- }
- var codea = window.btoa(window.encodeURI(codeb));
- var lista = [];
- for (var i = 0; i < codea.length; i++) {
- var asciic = escape(codea.charCodeAt(i) + key).replace(/\%u/g, '/u');
- lista.push(asciic);
- } return lista;
- }
- aluk.decodeX = (code, key = 0) => {
- if (!Array.isArray(code)) { return }
- var keys;
- if (key == undefined) {
- keys = '0';
- } else {
- keys = key;
- }
- var result = '';
- var resultb = '';
- code.forEach(e => {
- var sh = unescape(String.fromCharCode(e - key)).replace(/\/u/g, '%u');
- resultb += sh;
- })
- result = window.decodeURI(window.atob(resultb));
- return result;
- }
- Terminal = function (output) {
- if (!aluk.isHtmlElement(output)) {
- return this;
- }
- this.Resultelement = output;
- }
- TerminalAPI = function () { return this; };
- var API = undefined;
- var consolebak = undefined;
- function InTerminal(e) {
- consolebak = console.log;
- console.log = function (e) { return e; };
- API = new TerminalAPI();
- API.InvertHTMLinit = function () {
- aluk.createElementX({
- ElementType: "style",
- id: "InvertHTMLStyleSheet",
- innerHTML: "*.invert {filter: invert(100%);}"
- }).AppendorMoveto(0, 0, document.head);
- }
- API.Invert = function () {
- aluk('*').forEach(e => {
- e.classList.add('invert');
- })
- }
- API.Revert = function () {
- aluk('*').forEach(e => {
- e.classList.remove('invert');
- })
- }
- }
- Terminal.prototype = new Object();
- Terminal.prototype.command = function (command) {
- InTerminal('');
- var t = '<br>' + eval(command) + '<br>';
- this.Resultelement.innerHTML += t;
- API = undefined;
- console.log = consolebak;
- }
- function Alarm(construct, title) {
- this.onalarmisdiscard = null; // 初始化 onalarmisdiscard 事件为 null
- this.obj = construct;
- this.title = '提示';
- if (title != undefined) {
- this.title = title;
- }
- }
- // 定义 show 函数
- Alarm.prototype.show = function () {
- // 创建提示框元素
- var alarmBox = document.createElement('div');
- alarmBox.className = 'alarm-box';
- alarmBox.innerHTML = '<h4 id="alarm-title">' + this.title + '</h4><span id="alarm-text">' + this.obj + '</span>';
- // 创建关闭按钮元素
- var closeButton = document.createElement('div');
- closeButton.className = 'close-button';
- closeButton.innerText = '×';
- alarmBox.appendChild(closeButton);
- var styleElement = document.createElement('style');
- styleElement.classList.add('alarmbox-style');
- var cssCode = `
- .alarm-box {
- position: fixed;
- top: 20px;
- left: 0px;
- right: 0px;
- width: 300px;
- height: 500px
- margin: auto;
- padding: 20px;
- background-color: #f9f9f9;
- border-radius: 5px;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
- z-index: 9999;
- overflow: auto; /* 添加滚动条 */
- }
- .alarm-box .close-button {
- position: absolute;
- top: 10px;
- right: 10px;
- width: 20px;
- height: 20px;
- line-height: 20px;
- text-align: center;
- cursor: pointer;
- color: #888;
- }
- .alarm-box>* {
- font-family: "Microsoft YaHei Ui Light",ui-sans-serif,system-ui,Segoe UI;
- font-size: 95%;
- max-width: fix-content;
- }
- .alarm-box .close-button:hover {
- color: #000;
- }
- `;
- styleElement.appendChild(document.createTextNode(cssCode));
- document.head.appendChild(styleElement);
- document.body.appendChild(alarmBox);
- closeButton.onclick = 'this.parentNode.removeChild(this)';
- closeButton.addEventListener('click', async function () {
- await aluk('.alarmbox-style').RemoveX();
- await closeButton.parentElement.remove();
- if (this.onalarmisdiscard) {
- this.onalarmisdiscard();
- }
- }.bind(this));
- };
- return aluk;
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址