您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Sleazy Fork is available in English.
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.2 // @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})/, re3 =/\.[0-9a-z]+$/i; var REyandeResult = REyande.test(originUrl); var REkonachanResult = REkonachan.test(originUrl); var REdanbooruResult = REdanbooru.test(originUrl); if (REyandeResult === true) { yandeInit(); } else if (REkonachanResult === true) { konachanInit(); } else if (REdanbooruResult === true) { danbooruInit(); } function yandeInit() { 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="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> <a style="color: #ee8887;display: inline;cursor:pointer;">press X download larger version</a> </li> </ul>`; main_menu.firstElementChild.appendChild(confBord); var postsItems = posts.querySelectorAll('li'); for (let 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}')`); var checkboxEl = document.createElement('div'); checkboxEl.style.position = 'relative' checkboxEl.style.textAlign = 'center' checkboxEl.innerHTML = '<input type="checkbox" class="checkbox" id="cb(' + p + ')" >'; postsItems[i].insertBefore(checkboxEl, postsItems[i].firstChild); } } /* konachan */ function konachanInit() { 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="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><a style="color: #ee8887;display: inline;cursor:pointer;">press X download larger version</a></li></ul>'; main_menu.firstElementChild.appendChild(confBord); var postsItems = posts.querySelectorAll('li'); for (let 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]); document.getElementById("p" + p).setAttribute('onclick', `myselect('${p}')`); var checkboxEl = document.createElement('div'); checkboxEl.style.position = 'relative' checkboxEl.style.textAlign = 'center' checkboxEl.innerHTML = '<input type="checkbox" class="checkbox" id="cb(' + p + ')" >'; postsItems[i].insertBefore(checkboxEl, postsItems[i].firstChild); } } /* danbooru */ function danbooruInit() { 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="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></ul>'; main_menu.firstElementChild.appendChild(confBord); var postsItems = posts.querySelectorAll('article'); for (let i = 0; i < postsItems.length; i++) { postsItems[i].classList.add('imgItem'); postsItems[i].firstElementChild.setAttribute('onclick', 'return false'); var p = postsItems[i].dataset.id; postsItems[i].setAttribute('onclick', `myselect('${p}')`); 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-color; } .imgItemChecked { outline: 1px solid Highlight;outline: 1px auto -webkit-focus-ring-color; } article.post-preview { float:none;}'); var removeFav = document.getElementById('remove-from-favs') var addFav = document.getElementById('add-to-favs') function downloadLarger() { pUrls.map(pic => { GMDownload(`${pic.largeFileUrl}`, `${pic.id}${re3.exec(pic.largeFileUrl)[0]}`) }) } function downloadOriginal() { pUrls.map(pic => { GMDownload(`${pic.fileUrl}`, `${pic.id}${re3.exec(pic.fileUrl)[0]}`) }) } // GM downloader function GMDownload(url, fileName) { var arg = { url, name: fileName, 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 largerImage = document.getElementById('highres-show') function GMhandler(e) { // danbooru if(REdanbooruResult) { GMhandlerDanbooru(e) return; } // yande.re || konachan // larger if (e.key === 'x') { if (largerImage) { GMDownload(largerImage.href, largerImage.href.match(re2)[0]) } else { logJson() downloadLarger() } } // 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() } } function GMhandlerDanbooru(e) { // larger if (e.key === 'x') { logDanbooruJson() downloadLarger() } // original if (e.key === 's') { logDanbooruJson() downloadOriginal() } } 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); })();