您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Download Pixiv Fanbox Images.
当前为
// ==UserScript== // @name Fanbox图片下载器 // @name:en Fanbox Downloader // @namespace http://tampermonkey.net/ // @namespace https://github.com/709924470/pixiv_fanbox_downloader // @version beta_1.14.514.2 // @description Download Pixiv Fanbox Images. // @description:en Download Pixiv Fanbox Images. // @author [email protected] // @match https://www.pixiv.net/fanbox/creator/*/post/* // @grant GM_xmlhttpRequest // @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js // ==/UserScript== (function() { 'use strict'; var dlList = []; var observer = new MutationObserver(rootObserver); var observeFlag = false; var lastLoc = window.location.href; observer.observe(document.getElementById("root"), { childList: true }); var count = 0, downloaded = 0; var zip; function rootObserver(mutations) { mutations.forEach(function(mutation) { for (var i = 0; i < mutation.addedNodes.length; i++){ // if(mutation.addedNodes[i].innerText.includes("点赞")){ // mainFunc(); // observeFlag = false; // } // if(!observeFlag){ // break; // } if (window.location.href !== lastLoc){ console.log("Refreshing page..."); lastLoc = window.location.href; observeFlag = false; } if(!observeFlag){ observeFlag = mainFunc(); observer.observe(mutation.addedNodes[i],{ childList: true, characterData: true, subtree: true }); }else{ break; } } }); } function mainFunc(){ // for(var e in document.getElementsByTagName('a')){ // if(document.getElementsByTagName('a')[e].classList && document.getElementsByTagName('a')[e].classList.length == 2 && document.getElementsByTagName('a')[e].classList[0].length == 21 && document.getElementsByTagName('a')[e].classList[1].length == 20){ // console.log(document.getElementsByTagName('a')[e]) // } // } //observer.disconnect(); zip = new JSZip(); count = 0; var button = document.evaluate('//*[@id="root"]/div[5]/div[1]/div/div[3]/div/div/div[1]/div/div[1]/div/button', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); button = button.singleNodeValue; if (button === null){ console.error("[Fanbox Downloader.js] Cannot add download button!"); return false; } console.log("[Fanbox Downloader.js] Successfully added the button."); var newButton = document.createElement("button"); button.classList.forEach(function(item){ newButton.classList.add(item); }); newButton.id = "dl_images"; newButton.innerText = "下载图片\nDirect download"; newButton.onclick = function(){ downloadImages(...getAllImageUrl()); }; button.parentNode.appendChild(newButton); var zipButton = document.createElement("button"); button.classList.forEach(function(item){ zipButton.classList.add(item); }); zipButton.id = "dl_zip"; zipButton.innerText = "打包下载\nDownload as Zip"; zipButton.onclick = function(){ downloadImages_ZIP(...getAllImageUrl()); }; button.parentNode.appendChild(zipButton); return true; } function downloadImages(...urls){ urls.forEach(function(url){ forceDownload(url,generateName(url),false); }); return undefined; } function downloadImages_ZIP(...urls){ var i = 0; urls.forEach(function(url){ if(url === undefined){ console.warn("undefined url! > [" + i + "]" , urls); i++; return; } forceDownload(url,generateName(url),true); i++; }); return undefined; } function getAllImageUrl(){ var elements = document.querySelectorAll("img.lazyloaded"); var result = []; for(var i = 0; i < elements.length; i++){ result.push(elements[i].parentNode.parentNode.getAttribute("href")); } return result; } function generateName(url){ return document.title.split("|")[0] + ( "_" + count++ ) + "." + url.split(".")[url.split(".").length - 1]; } function addFile(name,content){ zip.file(name,content); } function forceDownload(url, fileName,zipFlag){ if(dlList.includes(fileName)){ return; } dlList.push(fileName); GM_xmlhttpRequest({ method: "GET", url: url, binary: true, responseType: "blob", onload: function(response) { var urlCreator = window.URL || window.webkitURL; var imageUrl = urlCreator.createObjectURL(response.response); if(!zipFlag){ var tag = document.createElement('a'); tag.href = imageUrl; tag.download = fileName; document.body.appendChild(tag); tag.click(); document.body.removeChild(tag); return; } addFile(fileName,response.response); downloaded++; if(dlList.length == downloaded){ zip.generateAsync({type:'blob'}).then(function(blob){ var imageUrl = urlCreator.createObjectURL(blob); var tag = document.createElement('a'); tag.href = imageUrl; tag.download = document.title.split("|")[0] + ".zip"; document.body.appendChild(tag); tag.click(); document.body.removeChild(tag); }); } } }); } })();