您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
从画世界网页版(PC端UA)下载原图的脚本
// ==UserScript== // @name 画世界下载原图 // @name:zh-CN 画世界下载原图 // @namespace 画世界下载原图 // @homepage https://gist.github.com/kaixinol/a7521662de470d427db2eb9d45cd843e/ // @version 0.4 // @license MIT // @description:zh-cn 从画世界网页版(PC端UA)下载原图的脚本 // @description 从画世界网页版(PC端UA)下载原图的脚本 // @author Kaesinol // @match https://*.huashijie.art/work/detail/* // @grant GM_xmlhttpRequest // @grant GM_download // @connect app.huashijie.art // ==/UserScript== (function () { "use strict"; // 存储拦截到的图片URL和作品信息 let interceptedImages = []; let workInfo = null; // 获取作品ID function getWorkId() { const path = window.location.pathname; return path.split("/").pop(); } // 获取文件扩展名 function getFileExtension(url) { const match = url.match(/\.([^.]+)(?:\?|$)/); return match ? match[1].toLowerCase() : "jpg"; } // 从API获取作品信息 async function fetchWorkInfo(workId) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url: `https://app.huashijie.art/api/work/detailV2?workId=${workId}`, headers: { Accept: "application/json", }, onload: function (response) { try { const data = JSON.parse(response.responseText); if (data && data.data) { resolve(data.data); } else { reject("Invalid API response"); } } catch (e) { reject(e); } }, onerror: reject, }); }); } // 拦截 canvas.drawImage() const originalDrawImage = CanvasRenderingContext2D.prototype.drawImage; CanvasRenderingContext2D.prototype.drawImage = function (img, ...args) { if ( img instanceof HTMLImageElement && !interceptedImages.includes(img.src) ) { interceptedImages.push(img.src); console.log("Intercepted image:", img.src); } return originalDrawImage.apply(this, [img, ...args]); }; // 添加下载按钮 async function addDownloadButton() { const likeButton = document.querySelector(".common-like.click-hover"); if (!likeButton) { setTimeout(addDownloadButton, 1000); return; } // 获取作品信息 const workId = getWorkId(); try { workInfo = await fetchWorkInfo(workId); } catch (error) { console.error("Failed to fetch work info:", error); } const downloadButton = document.createElement("button"); downloadButton.textContent = "下载图片"; downloadButton.style.cssText = ` margin-left: 10px; padding: 5px 10px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer; `; downloadButton.addEventListener("click", async () => { if (interceptedImages.length === 0) { alert("未检测到图片,请先浏览作品"); return; } if (!workInfo) { alert("未能获取作品信息,将使用默认文件名"); } let filename = null; for (let i = 0; i < interceptedImages.length; i++) { const url = interceptedImages[i]; const extension = getFileExtension(url); if (!workInfo) { filename = `${Date.now()} - ${i + 1}.${extension}`; } else { filename = `${workInfo.user.nick} - ${workInfo.id} - ${ workInfo.userId } - ${i + 1}.${extension}`; } GM_download({ url: url, name: filename, saveAs: false, onerror: (error) => { console.error("Download failed:", error); alert(`下载失败: ${error}`); }, }); } console.log(`开始下载 ${interceptedImages.length} 张图片`); }); likeButton.parentNode.insertBefore(downloadButton, likeButton.nextSibling); } // 页面加载完成后添加按钮 window.addEventListener("load", addDownloadButton); })();