// ==UserScript== // @name 蓝奏云优化 // @version 4.1 // @description 蓝奏云apk文件重定向域名,自动点击下载,记住分享密码自动填写 // @author ChatGPT // @include *.lanosso.com/* // @include *.lanzn.com/* // @include *.lanzog.com/* // @include *.lanpw.com/* // @include *.lanpv.com/* // @include *.lanzv.com/* // @include *://*.lanz*.com/* // @include *://lanz*.com/* // @run-at document-end // @grant none // @namespace https://greasyfork.org/users/452911 // @downloadURL https://update.greasyfork.icu/scripts/489281/%E8%93%9D%E5%A5%8F%E4%BA%91%E4%BC%98%E5%8C%96.user.js // @updateURL https://update.greasyfork.icu/scripts/489281/%E8%93%9D%E5%A5%8F%E4%BA%91%E4%BC%98%E5%8C%96.meta.js // ==/UserScript== // 获取页面中所有的iframe元素 const iframes = document.getElementsByTagName('iframe'); // 如果有找到iframe if (iframes.length > 0) { // 遍历所有iframe for (let i = 0; i < iframes.length; i++) { // 获取iframe的src属性(链接) const iframeSrc = iframes[i].src; // 检查src是否有效(非空且不是about:blank) if (iframeSrc && iframeSrc !== 'about:blank') { // 在当前标签页打开链接 window.location.href = iframeSrc; break; // 只打开第一个有效的iframe链接 } } } //当前标签打开 // 修改所有链接的target属性 function modifyLinks() { const links = document.getElementsByTagName('a'); for (let i = 0; i < links.length; i++) { links[i].setAttribute('target', '_self'); } // 处理base标签 let base = document.getElementsByTagName('base')[0]; if (base) { base.setAttribute('target', '_self'); } else { const head = document.getElementsByTagName('head')[0]; const newBase = document.createElement('base'); newBase.setAttribute('target', '_self'); head.appendChild(newBase); } } modifyLinks(); //重定向域名 // 检查页面是否包含"会员"文本 if (document.body.innerText.includes('会员')) { // 检查当前网址是否不包含目标域名 if (!window.location.href.includes('https://www.lanzn.com/')) { // 创建一个URL对象以便于操作 const currentUrl = new URL(window.location.href); // 替换域名部分 currentUrl.hostname = 'www.lanzn.com'; // 保留协议(http/https) const newUrl = currentUrl.toString(); // 重定向到新URL window.location.href = newUrl; return; // 确保重定向后不再执行后续代码 } } //自动下载 // 定义要点击的选择器数组 const selectorsToClick = [ 'a.appa', 'a[href="javascript:filego();"]', 'a[href^="/tp/"]' ]; // 遍历每个选择器并点击匹配的元素 selectorsToClick.forEach(selector => { document.querySelectorAll(selector).forEach(link => link.click()); }); // 选择要监视的目标元素 const targetNode = document.body; // 配置观察器的选项(监视子节点变动) const config = { childList: true, subtree: true }; // 创建一个观察器实例并指定回调函数 const observer = new MutationObserver(function(mutationsList) { for(const mutation of mutationsList) { if (mutation.type === 'childList') { mutation.addedNodes.forEach(node => { if (node.tagName && node.tagName.toLowerCase() === 'a') { // 查找具有 onclick='m_load();' 属性的父元素,并在该父元素中查找子元素 进行点击 const mLoadLink = document.querySelector("[onclick='m_load();'] > a"); if (mLoadLink) { mLoadLink.click(); } // 获取所有 href 包含 "/file/" 的 标签,并自动点击 document.querySelectorAll('a[href*="/file/"]').forEach(link => { link.click(); }); } }); } } }); // 通过观察器实例与目标节点绑定 observer.observe(targetNode, config); // 获取所有 href 包含 "/file/" 的 标签,并自动点击 document.querySelectorAll('a[href*="/file/"]').forEach(link => { link.click(); }); function extractAndNavigateURL() { // 获取整个页面的 HTML 源码,包括 script 标签中的内容 var htmlSource = document.documentElement.innerHTML; // 使用正则表达式匹配并提取 vkjxld 和 hyggid 变量的值 var vkjxldMatch = htmlSource.match(/\nvar vkjxld\s*=\s*['"]([^'"]+)['"];/); var hyggidMatch = htmlSource.match(/var hyggid\s*=\s*['"]([^'"]+)['"];/); // 确保匹配并提取成功 if (vkjxldMatch && hyggidMatch) { // 分别获取匹配到的值 var vkjxldValue = vkjxldMatch[1]; var hyggidValue = hyggidMatch[1]; // 拼接得到完整 URL var completeURL = vkjxldValue + hyggidValue; // 在当前标签页打开拼接好的 URL window.location.href = completeURL; } else { (function() { // 获取整个页面的 HTML 源码,包括 script 标签中的内容 var htmlSource = document.documentElement.innerHTML; // 使用正则表达式匹配并提取 link 变量的值 var urlptMatch = htmlSource.match(/var urlpt\s*=\s*['"]([^'"]+)['"];/); var linkMatch = htmlSource.match(/var link\s*=\s*['"]([^'"]+)['"];/); if (urlptMatch && linkMatch) { // 获取当前页面的域名,包括协议部分 let urlptValue = urlptMatch[1]; if(urlptValue === '/' ) urlptValue = window.location.origin; // 获取匹配到的 link 变量的值 var linkValue = linkMatch[1]; // 拼接当前域名和 link 变量的值 var completeURL = urlptValue + '/' + linkValue; // 在当前标签页打开拼接好的 URL window.location.href = completeURL; } else { } })(); } } extractAndNavigateURL(); //记住密码 (function() { 'use strict'; function init() { retrieveAndFill(); monitorChanges(); } function retrieveAndFill() { document.querySelectorAll('input[type="text"], textarea').forEach(function(element) { const id = getElementIdentifier(element); const storedValue = localStorage.getItem(id); if (storedValue) { element.value = storedValue; } }); } function monitorChanges() { document.querySelectorAll('input[type="text"], textarea').forEach(function(element) { element.removeEventListener('input', handleInputChange); // 防止重复监听 element.addEventListener('input', handleInputChange); }); } function handleInputChange(event) { const element = event.target; const id = getElementIdentifier(element); localStorage.setItem(id, element.value); } function getElementIdentifier(element) { // 使用页面URL、元素的name、id或类名的组合作为唯一标识符 let identifier = window.location.hostname + window.location.pathname; identifier += ':' + (element.name || element.id || element.classList[0] || getXPathForElement(element)); return identifier; } function getXPathForElement(element) { const paths = []; for (; element && element.nodeType === Node.ELEMENT_NODE; element = element.parentNode) { let index = 0; let hasFollowingSiblings = false; for (let sibling = element.previousSibling; sibling; sibling = sibling.previousSibling) { if (sibling.nodeType === Node.DOCUMENT_TYPE_NODE) continue; if (sibling.nodeName === element.nodeName) ++index; } for (let sibling = element.nextSibling; sibling && !hasFollowingSiblings; sibling = sibling.nextSibling) { if (sibling.nodeName === element.nodeName) hasFollowingSiblings = true; } const tagName = element.nodeName.toLowerCase(); const pathIndex = (index || hasFollowingSiblings ? "[" + (index + 1) + "]" : ""); paths.splice(0, 0, tagName + pathIndex); } return paths.length ? "/" + paths.join("/") : null; } // 监听DOM变化来支持动态加载的内容 const observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.addedNodes.length) { init(); // 如果检测到新增节点,则重新初始化 } }); }); observer.observe(document.body, { childList: true, subtree: true }); init(); // 初始执行 })(); //会员文件提示 document.querySelector('div.fbox').textContent = "会员文件,需要开桌面模式下载";