您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
一键下载Liblib.art模型+配图+简介
当前为
// ==UserScript== // @name Liblib tool // @namespace http://tampermonkey.net/ // @version 1.21 // @description 一键下载Liblib.art模型+配图+简介 // @author 宇泽同学 // @license MIT // @match https://www.liblib.art/* // @grant GM_download // ==/UserScript== (function() { 'use strict'; // 添加按钮和选择器的样式 var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = ` .custom-button { background-color: #4CAF50; /* Green */ color: white; width: 100px; height: 35px; padding: 5px 15px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 5px 2px; cursor: pointer; border: none; border-radius: 20px; } .image-count-selector { width: 65px; /* 边框宽度 */ height: 35px; padding: 5px; border: 1px solid #4CAF50; /* Green border */ border-radius: 20px; margin-left: 5px; display: inline-block; border-width:1.5px 1.5px 1.5px 1.5px } `; document.head.appendChild(style); // 检查并添加按钮的函数 function checkAndAddButtons() { const generateButton = document.querySelector('.ModelActionCard_runPic__0I9wi'); if (generateButton && !document.querySelector('.one-click-download')) { // 创建"下载全部"按钮 const downloadButton = document.createElement('button'); downloadButton.innerHTML = '下载全部'; downloadButton.className = 'custom-button one-click-download'; downloadButton.onclick = autoDownload; // 创建"下载图片"按钮 const downloadImageButton = document.createElement('button'); downloadImageButton.innerHTML = '下载图片'; downloadImageButton.className = 'custom-button download-images-only'; downloadImageButton.onclick = function() { const modelName = getModelName(); const imageCount = document.querySelector('.image-count-selector').value; downloadImages(modelName, imageCount); }; // 创建图片数量选择器 const imageCountSelector = document.createElement('input'); imageCountSelector.type = 'number'; imageCountSelector.min = '1'; imageCountSelector.value = '1'; // 默认值为1 imageCountSelector.className = 'image-count-selector'; // 将"下载图片"按钮和图片数量选择器添加到页面上 generateButton.parentNode.insertBefore(downloadButton, generateButton.nextSibling); generateButton.parentNode.insertBefore(downloadImageButton, downloadButton.nextSibling); generateButton.parentNode.insertBefore(imageCountSelector, downloadImageButton.nextSibling); // 创建"下载简介"按钮 const downloadDocButton = document.createElement('button'); downloadDocButton.innerHTML = '下载简介'; downloadDocButton.className = 'custom-button download-doc-only'; downloadDocButton.onclick = function() { const modelName = getModelName(); saveAsPlainText(modelName); }; generateButton.parentNode.insertBefore(downloadDocButton, imageCountSelector.nextSibling); } } // 建立MutationObserver以监视DOM变化 const observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type === 'childList') { checkAndAddButtons(); } }); }); // 在DOMContentLoaded事件中初始化按钮和观察者 document.addEventListener('DOMContentLoaded', function() { checkAndAddButtons(); observer.observe(document.body, { childList: true, subtree: true }); }); // 获取选中的Tab名称 function getSelectedTabName() { //...保留原有的getSelectedTabName函数... // 获取所有的tab var tabs = document.querySelectorAll('.ant-tabs-tab'); // 遍历所有的tab for (var i = 0; i < tabs.length; i++) { // 获取aria-selected属性 var isSelected = tabs[i].querySelector('.ant-tabs-tab-btn').getAttribute('aria-selected'); // 检查tab是否被选中 if (isSelected === 'true') { // 获取tab的标题 var title = tabs[i].textContent; return title; // 返回标题 } } } // 获取模型名称 function getModelName() { var version = getSelectedTabName(); var modelName = document.querySelector('.ModelInfoHead_title__p5txd').innerText; modelName += "_" + version; return modelName; } // 自动下载函数 function autoDownload() { var modelName = getModelName(); downloadModel(); saveAsPlainText(modelName); var imageCount = document.querySelector('.image-count-selector').value; downloadImages(modelName, imageCount); } // 下载模型函数 function downloadModel() { var downloadButton = document.querySelector('.ModelActionCard_inner__XBdzk'); if (downloadButton) { downloadButton.click(); } } // 选择简介函数 function selectReadme() { var mainElement = document.querySelector('.mantine-AppShell-main'); return mainElement.querySelector('[class^="ModelDescription_desc"]'); } // 记录URL函数 function recordURL(modelName) { var url = window.location.href; var blob = new Blob([url], { type: 'text/plain' }); var urlObject = window.URL.createObjectURL(blob); var downloadLink = document.createElement('a'); downloadLink.href = urlObject; downloadLink.download = modelName + '_URL.txt'; downloadLink.click(); window.URL.revokeObjectURL(urlObject); } function saveAsHTML(modelName) { var descriptionElement = selectReadme(); if (descriptionElement) { var htmlText = descriptionElement.innerHTML; var blob = new Blob([htmlText], { type: 'text/html' }); var url = window.URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = modelName + '.html'; link.style.display = 'none'; document.body.appendChild(link); console.log('Attempting to download HTML file:', link.download); link.click(); document.body.removeChild(link); } else { console.log('Description element not found.'); } } function saveAsPlainText(modelName) { var descriptionElement = selectReadme(); if (descriptionElement) { var plainText = descriptionElement.innerText; // Append the model URL and empty lines plainText += "\n\n☑️本模型地址:" + window.location.href + "\n\n"; var blob = new Blob([plainText], { type: 'text/plain' }); var url = window.URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = modelName + '.txt'; link.style.display = 'none'; document.body.appendChild(link); console.log('Attempting to download text file:', link.download); link.click(); document.body.removeChild(link); } else { console.log('Description element not found.'); } } async function downloadImages(modelName, maxImages) { var images = document.querySelectorAll('img'); var count = 0; if (images.length > 0) { for (var i = 0; i < images.length && count < maxImages; i++) { // 检查图片地址是否符合预期的格式 if (images[i].src.startsWith('https://liblibai-online.vibrou.com/img/') || images[i].src.startsWith('https://liblibai-online.vibrou.com/web/image/')) { var url = new URL(images[i].src); var pathSegments = url.pathname.split('/').filter(Boolean); // 分割路径并过滤空值 // 拼接出清洁的URL,移除任何额外的查询参数或片段 var cleanUrl = url.protocol + '//' + url.host + '/' + pathSegments.join('/'); // 如果 count 为 0,不添加后缀,如果 count 大于 0,后缀从 _2 开始 var fileNameSuffix = count > 0 ? '_' + (count + 1) : ''; GM_download({ url: cleanUrl, name: modelName + fileNameSuffix + '.png', // 添加 fileNameSuffix 以区分下载的图片 saveAs: true }); count++; // 增加 count await new Promise(resolve => setTimeout(resolve, 1000)); // 等待1秒钟以避免服务器过载 } } } } //...保留其他必要的代码和函数... })();