您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
selector the pictures, consolog which you want and download the pictures online or use Node.js
当前为
// ==UserScript== // @name Booru-Selector-Downloader // @namespace http://tampermonkey.net/ // @version 3.1 // @description selector the pictures, consolog which you want and download the pictures online or use Node.js // @author Beats0 // @match *://yande.re/post* // @match *://konachan.com/* // @match *://danbooru.donmai.us/* // @include *://yande.re/* // @include *://konachan.com/* // @include *://konachan.net/* // @include *://konachan.com/* // @include *://danbooru.donmai.us/* // @grant GM_download // @grant GM_info // @grant GM.download // @grant GM.info // ==/UserScript== (function () { 'use strict'; var originUrl = document.location.origin; var REyande = /yande/, REkonachan = /konachan/, REdanbooru = /danbooru/; var re1 = /\d\w+/, re2 = /([a-fA-F0-9]{32})/; var REyandeResult = REyande.test(originUrl); var REkonachanResult = REkonachan.test(originUrl); var REdanbooruResult = REdanbooru.test(originUrl); if (REyandeResult === true) { yande(); } else if (REkonachanResult === true) { konachan(); } else if (REdanbooruResult === true) { danbooru(); } function yande() { var main_menu = document.getElementById("main-menu"); var confBord = document.createElement('li'); var posts = document.getElementById('post-list-posts'); if (!posts) return confBord.setAttribute('class', 'static'); confBord.innerHTML = `<a href="#">Download</a> <a class="submenu-button" href="#">■</a> <ul class="submenu" style="display: block;"> <li> <a class="help-item post current-menu ManagementButton" id="ButtonSelectAll" onclick="javascript:UpdateBatchCount();" style="color: #ee8887;display: inline;cursor:pointer;">Select All</a> </li> <li> <a style="color: #ee8887;display: inline;cursor:pointer;" onclick="logJson()">logJson</a> </li> </li> <li> <a style="color: #ee8887;display: inline;cursor:pointer;" onclick="logJson();Yande.sample()">sample version</a> </li> <li> <a style="color: #ee8887;display: inline;cursor:pointer;" onclick="directlinkArr();Yande.larger()">larger version</a> </li> <li> <a style="color: #ee8887;display: inline;cursor:pointer;" onclick="logJson();Yande.original()">original version</a> </li> </ul>`; main_menu.firstElementChild.appendChild(confBord); var postsItems = posts.querySelectorAll('li'); for (var i = 0; i < postsItems.length; i++) { postsItems[i].classList.add('imgItem'); postsItems[i].firstElementChild.firstElementChild.setAttribute('onclick', 'return false'); var p = (re1.exec(postsItems[i].id)[0]); var md5 = (re2.exec(postsItems[i].querySelectorAll('.directlink, .largeimg')[0].href)[0]); document.getElementById("p" + p).setAttribute('onclick', 'myselect(' + p + ',"' + md5 + '")'); var checkboxEl = document.createElement('div'); checkboxEl.setAttribute('position', 'relative'); checkboxEl.innerHTML = '<input type="checkbox" class="checkbox" id="cb(' + p + ')" >'; postsItems[i].insertBefore(checkboxEl, postsItems[i].firstChild); } } /* konachan */ function konachan() { var main_menu = document.getElementById("main-menu"); var confBord = document.createElement('li'); var posts = document.getElementById('post-list-posts'); if (!posts) return confBord.setAttribute('class', 'static'); confBord.innerHTML = '<a href="#">Download</a> <a class="submenu-button" href="#">■</a> <ul class="submenu" style="display: block;"> <li><a class="help-item post current-menu ManagementButton" id="ButtonSelectAll" onclick="javascript:UpdateBatchCount();" style="color: #ee8887;display: inline;cursor:pointer;">Select All</a> </li><li><a style="color: #ee8887;display: inline;cursor:pointer;" onclick="logJson()">logJson</a></li></li><li><a style="color: #ee8887;display: inline;cursor:pointer;" onclick="directlinkArr();Konachan.larger()">larger version</a></li><li><a style="color: #ee8887;display: inline;cursor:pointer;" onclick="logJson();Konachan.original()">original for PNG</a></li></ul>'; main_menu.firstElementChild.appendChild(confBord); var postsItems = posts.querySelectorAll('li'); for (var i = 0; i < postsItems.length; i++) { postsItems[i].classList.add('imgItem'); postsItems[i].firstElementChild.firstElementChild.setAttribute('onclick', 'return false'); var p = (re1.exec(postsItems[i].id)[0]); var md5 = (re2.exec(postsItems[i].querySelectorAll('.directlink, .largeimg')[0].href)[0]); document.getElementById("p" + p).setAttribute('onclick', 'myselect(' + p + ',"' + md5 + '")'); var checkboxEl = document.createElement('div'); checkboxEl.setAttribute('position', 'relative'); checkboxEl.innerHTML = '<input type="checkbox" class="checkbox" id="cb(' + p + ')" >'; postsItems[i].insertBefore(checkboxEl, postsItems[i].firstChild); } } /* danbooru */ function danbooru() { var main_menu = document.getElementById('nav'); var confBord = document.createElement('li'); var posts = document.getElementById('posts'); if (!posts) return; confBord.setAttribute('class', 'static'); confBord.innerHTML = '<a href="#">Download</a> <a class="submenu-button" href="#">■</a> <ul class="submenu" style="display: block;"> <li><a class="help-item post current-menu ManagementButton" id="ButtonSelectAll" onclick="javascript:UpdateBatchCount();" style="color: #ee8887;display: inline;cursor:pointer;">Select All</a> </li><li><a style="color: #ee8887;display: inline;cursor:pointer;" onclick="logDanbooruJson()">logJson</a></li></li><li><a style="color: #ee8887;display: inline;cursor:pointer;" onclick="logDanbooruJson();Danbooru.original()">download original(for jpg and png)</a></li></ul>'; main_menu.firstElementChild.appendChild(confBord); var postsItems = posts.querySelectorAll('article'); for (var i = 0; i < postsItems.length; i++) { postsItems[i].classList.add('imgItem'); postsItems[i].firstElementChild.setAttribute('onclick', 'return false'); var p = postsItems[i].dataset.id; var md5 = postsItems[i].dataset.md5; postsItems[i].setAttribute('onclick', 'Danboorumyselect(' + p + ',"' + md5 + '")'); var checkboxEl = document.createElement('div'); checkboxEl.setAttribute('position', 'relative'); checkboxEl.innerHTML = '<input type="checkbox" class="checkbox" id="cb(' + p + ')" >'; postsItems[i].insertBefore(checkboxEl, postsItems[i].firstChild); } } function loadCssCode(code) { var style = document.createElement('style'); style.type = 'text/css'; style.rel = 'stylesheet'; style.appendChild(document.createTextNode(code)); var head = document.getElementsByTagName('head')[0]; head.appendChild(style); } loadCssCode('ul#post-list-posts li {float:none}.imgItem:hover, .imgItem:focus { outline: 1px solid Highlight;outline: 1px auto -webkit-focus-ring-colo; } .imgItemChecked { outline: 1px solid Highlight;outline: 1px auto -webkit-focus-ring-colo; } article.post-preview { float:none;}'); var removeFav = document.getElementById('remove-from-favs') var addFav = document.getElementById('add-to-favs') var flag = false // sample version function downloadSample() { for (let i = 0; i < pUrls.length; i++) { let url = '' if (REyandeResult) { url = 'https://files.yande.re/sample/' + pUrls[i].md5 + '/' + pUrls[i].id + '.jpg'; GMDownload(url, pUrls[i].id) } else if (REkonachanResult) { url = 'https://konachan.com/sample/' + pUrls[i].md5 + '/' + pUrls[i].id + '.jpg'; GMDownload(url, pUrls[i].id) } } } // larger version let largerArr = Array.from(document.querySelectorAll('.largeimg')).map((pic, index) => pic.href) let unMathArr = [] function downloadLarger() { for (let i = 0; i < pUrls.length; i++) { let re = new RegExp(pUrls[i].md5, 'i') largerArr.map((pic, index) => { if (re.test(pic)) { GMDownload(pic, pUrls[i].md5) } else { unMathArr = [...unMathArr, `${pUrls[i].id}/${pUrls[i].md5}`] } }) } unMathArr.map((pic, index) => { console.warn(`${pic} dosen't match`) }) } // GM downloader function GMDownload(url, name) { var arg = { url, name: name + '.jpg', onprogress: downloadProgress } console.log(arg) GM_download(arg) } // press key 'Left' or 'Right' to paginate var pageRight = document.querySelector('#paginator > div > a.next_page') var pageLeft = document.querySelector('#paginator > div > a.previous_page') // in single page var image = document.getElementById('image') var largerImage = document.getElementById('highres-show') var highres = document.getElementById('highres') function GMhandler(e) { // sample if (e.key === 'z') { if (image) { GMDownload(image.src, image.src.match(re2)[0]) return } flag = true logJson() downloadSample() } // larger if (e.key === 'x') { if (largerImage) { GMDownload(largerImage.href, largerImage.href.match(re2)[0]) return } flag = true logJson() downloadLarger() } // original if (e.key === 's' && highres) { GMDownload(highres.href, highres.href.match(re2)[0]) } // change fav if (e.key === 'c' && removeFav && addFav) { var addLink = addFav.firstElementChild var removeLink = removeFav.firstElementChild removeFav.style.display === 'none' ? addLink.click() : removeLink.click() } // paginate if (e.key === 'd' && pageRight) { pageRight.click() } if (e.key === 'a' && pageLeft) { pageLeft.click() } } window.addEventListener('keydown', GMhandler, false) // create progress var body = document.getElementsByTagName('body')[0]; var progressEl = document.createElement('div'); progressEl.innerHTML = ` <div id='stripe' style=" position: fixed; height: 2px; width: 0; margin: 0 -3em; top: 0; background: #ee8887; box-shadow: 0 0 10px rgba(249,144,141,0.7); transition: width .4s ease; "></div>` body.appendChild(progressEl) // downloader progress function downloadProgress(xhr) { try { if (!xhr.lengthComputable) return; var stripe = document.getElementById('stripe'), width = Math.floor(xhr.loaded / xhr.total * 100); width === 100 ? stripe.style.width = 0 : stripe.style.width = `${width}%` } catch (e) { console.error(e); } } // myselect.js var HeadEl = document.getElementsByTagName('head').item(0); var ScriptEl = document.createElement("script"); ScriptEl.type = "text/javascript"; ScriptEl.src = "https://beats0.github.io/scripter/Booru-Selector-Downloader/myselect.js"; HeadEl.appendChild(ScriptEl); })();