Greasy Fork

Greasy Fork is available in English.

蓝奏云自动点击下载

自动点击蓝奏云页面中的下载按钮,实现自动下载功能

目前为 2024-03-08 提交的版本,查看 最新版本

// ==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 http://greasyfork.icu/users/452911
// ==/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() {
    // 获取页面上所有的<a>元素
    var links = document.getElementsByTagName("a");
    
    // 遍历所有的<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');
  }
})();