// ==UserScript==
// @name 蓝奏云自动点击下载
// @version 1.2
// @description 自动点击蓝奏云页面中的下载按钮,实现自动下载功能
// @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 none
// ==/UserScript==
// 获取元素
var submitButton = document.getElementById("submit");
// 检查元素是否存在
if (submitButton) {
// 模拟点击
submitButton.click();
} else {
console.log("元素未找到");
}
// 定义一个回调函数,当观察到变动时将执行此函数
const callback = function(mutationsList, observer) {
for(const mutation of mutationsList) {
if (mutation.type === 'childList') {
// 检查添加或删除的节点是否为超链接元素
const addedNodes = Array.from(mutation.addedNodes);
const removedNodes = Array.from(mutation.removedNodes);
const isLinkAdded = addedNodes.some(node => node.tagName === 'A');
const isLinkRemoved = removedNodes.some(node => node.tagName === 'A');
if (isLinkAdded || isLinkRemoved) {
// 定义一个函数来自动点击文本为"立即下载"的超链接
function autoClickDownloadLink() {
// 获取页面上所有的元素
var links = document.getElementsByTagName("a");
// 遍历所有的元素
for (var i = 0; i < links.length; i++) {
// 检查超链接的文本内容是否为"立即下载"
if (links[i].textContent === "立即下载") {
// 如果找到,则执行点击操作
links[i].click();
// 找到后可以根据需要决定是否终止循环
// break; // 如果只需要点击第一个匹配的链接,则取消注释这一行
}
}
}
// 调用函数来自动点击对应的超链接
autoClickDownloadLink();
}
}
}
};
// 通过MutationObserver的构造器创建一个observer实例,并传入回调函数
const observer = new MutationObserver(callback);
// 配置observer对象:监听子节点的增减
const config = { childList: true, subtree: true };
// 选择目标节点(在这个例子中,我们监听整个文档体)
const targetNode = document.body;
// 调用observe方法,开始监听目标节点
observer.observe(targetNode, config);
// 注意:如果你想要停止监听,可以调用observer.disconnect();
function extractAndNavigateURL() {
// 获取整个页面的 HTML 源码,包括 script 标签中的内容
var htmlSource = document.documentElement.innerHTML;
// 使用正则表达式匹配并提取 vkjxld 和 hyggid 变量的值
var vkjxldMatch = htmlSource.match(/var 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 {
// 如果没有匹配到,抛出错误提示
console.error('未能找到 vkjxld 或 hyggid 变量');
}
}
extractAndNavigateURL();
(function() {
// 获取整个页面的 HTML 源码,包括 script 标签中的内容
var htmlSource = document.documentElement.innerHTML;
// 使用正则表达式匹配并提取 link 变量的值
var linkMatch = htmlSource.match(/var link\s*=\s*['"]([^'"]+)['"];/);
if (linkMatch) {
// 获取当前页面的域名,包括协议部分
var currentDomain = window.location.origin;
// 获取匹配到的 link 变量的值
var linkValue = linkMatch[1];
// 拼接当前域名和 link 变量的值
var completeURL = currentDomain + '/' + linkValue;
// 在当前标签页打开拼接好的 URL
window.location.href = completeURL;
} else {
// 如果没有匹配到 link 变量,抛出一个错误提示
console.error('未能找到变量 link');
}
})();