// ==UserScript== // @name GrimRipper // @namespace http://tampermonkey.net/ // @version 1.1 // @description BW Canvas Ripper // @author XXXXXXXXXIII // @match https://viewer.bookwalker.jp/* // @license MIT // @downloadURL none // ==/UserScript== // TODO: First page may not download properly (function() { 'use strict'; console.log("Hello There"); var saved = false; var page = -1; setInterval(() => { try { if (page < 1) page = getPageNum(); if (page != getPageNum()) saved = false; if (page < 1 || saved) return; if (isLoading()) return; console.log("rippin' page " + getPageNum()); let canvas = getActiveCanvas(); canvas.style.width = '1125'; canvas.style.height = '1600'; saveCanvas(canvas, page); saved = true; page = getPageNum(); NFBR.a6G.Initializer.Z4p.menu.options.a6l.moveToNext(); // USER: Auto page flip, comment out if not needed } catch (e) { console.log("Not Ready"); saved = false; } }, 3000); // USER: Time interval })(); function saveCanvas(canvas, page) { //let image = canvas.toDataURL("image/jpeg", 1.0); // Very Slow, highly not recommended. canvas.toBlob((blob) => { var image = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = image; document.body.appendChild(a); a.download = page + ".png"; a.click(); }, "image/png", 1.0); } function isLoading() { if (document.getElementById('viewport0').style.visibility == 'visible') { return document.getElementById('viewport0').getElementsByClassName("loading")[0].style.visibility == 'visible'; } else { return document.getElementById('viewport1').getElementsByClassName("loading")[0].style.visibility == 'visible'; } } function getActiveCanvas() { if (document.getElementById('viewport0').style.visibility == 'visible') { return document.getElementById('viewport0').getElementsByTagName("CANVAS")[0]; } else { return document.getElementById('viewport1').getElementsByTagName("CANVAS")[0]; } } function getPageNum() { var pageNum = document.getElementById('pageSliderCounter').innerHTML; return Number(pageNum.replace(/\/.*/i, "")); }