您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
爬取课件url
当前为
// ==UserScript== // @name 小雅爬爬爬 // @match *://ccnu.ai-augmented.com/* // @grant none // @description 爬取课件url // @license MIT // @author Yi // @version 1.0.2 // @namespace https://gf.qytechs.cn/users/1268039 // ==/UserScript== // 定义要抓取的后缀名 var extensions = [".doc", ".pdf", ".docx", ".ppt", ".pptx", ".xls", ".xlsx"]; // 创建一个元素,用于显示抓取到的 url var list = document.createElement("div"); list.style.position = "fixed"; list.style.top = "10px"; list.style.right = "0"; list.style.width = "300px"; list.style.height = "10%"; list.style.overflow = "auto"; list.style.zIndex = "9999"; list.style.padding = "10px"; // 定义一个函数来改变边框颜色 function changeBorderColor() { // 根据当前时间的秒数来计算一个颜色值 let color = "hsl(" + new Date().getSeconds() * 3 + ", 100%, 50%)"; // 设置一个动态的边框颜色 list.style.border = "5px solid " + color; // 用 requestAnimationFrame 来在下一帧渲染时再次调用 changeBorderColor 函数 requestAnimationFrame(changeBorderColor); } // 调用一次 changeBorderColor 函数,开始动画 changeBorderColor(); // 为元素添加一个渐变的背景色 list.style.background = "linear-gradient(to right bottom, #ffc700, #ffa500)"; // 为元素添加一个阴影效果 list.style.boxShadow = "0 4px 8px 0 rgba(0, 0, 0, 0.2)"; // 为元素添加一个圆角效果 list.style.borderRadius = "10px"; // 为元素添加一个动画效果,让它在鼠标悬停时放大 list.style.transition = "transform 0.3s"; list.addEventListener("mouseover", function() { list.style.transform = "scale(1.1)"; }); list.addEventListener("mouseout", function() { list.style.transform = "scale(1)"; }); list.innerHTML = "<h3><span style=\"font-family: '微软雅黑'; font-weight: bold; font-style: italic; font-size: 16px;\">抓取到的 url</span></h3>"; // 添加 draggable 属性,让元素可以被拖动 list.setAttribute("draggable", "true"); // 添加 resize 属性,让元素可以调整大小 list.style.resize = "both"; // 添加事件监听器,处理拖动事件 list.addEventListener("dragstart", function(e) { // 设置拖动元素的透明度 e.target.style.opacity = "0.5"; // 设置拖动元素的 id e.dataTransfer.setData("text/plain", e.target.id); // 记录拖动元素的初始位置和鼠标的初始位置 e.target.startX = e.clientX; e.target.startY = e.clientY; e.target.offsetX = e.target.offsetLeft; e.target.offsetY = e.target.offsetTop; }); list.addEventListener("drag", function(e) { // 如果鼠标的位置有效,根据鼠标的移动距离,更新拖动元素的位置 if (e.clientX > 0 && e.clientY > 0) { e.target.style.left = e.target.offsetX + e.clientX - e.target.startX + "px"; e.target.style.top = e.target.offsetY + e.clientY - e.target.startY + "px"; } }); list.addEventListener("dragend", function(e) { // 恢复拖动元素的透明度 e.target.style.opacity = "1"; }); document.body.appendChild(list); // 创建一个数组,用于存储已经抓取过的 url var crawled_urls = []; // 监听 xhr 请求,检查响应的 url 是否符合条件 var open = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url, async, user, pass) { this.addEventListener("load", function() { // 如果 url 包含指定的后缀名之一,且没有被抓取过 for (var i = 0; i < extensions.length; i++) { if (url.includes(extensions[i]) && !crawled_urls.includes(url)) { // 将 url 添加到已抓取的数组中 crawled_urls.push(url); // 发送一个新的 xhr 请求,获取真正的下载地址 var xhr = new XMLHttpRequest(); xhr.open("GET", url, true); xhr.onload = function() { // 如果响应的文本中包含一个以 http 或 https 开头的 url,将其添加到列表中 // 在此之前,先将响应的文本中的 "}}" 和引号替换为空字符串,去掉多余的符号 var text = xhr.responseText.replace("}}", "").replace(/"/g, ""); var match = text.match(/(http|https):\/\/\S+/); if (match) { var link = document.createElement("a"); link.href = match[0]; link.target = "_blank"; link.textContent = match[0]; link.style.color = "#00aeeb"; list.appendChild(link); list.appendChild(document.createElement("br")); } }; xhr.send(); break; } } }); open.call(this, method, url, async, user, pass); };
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址