Greasy Fork is available in English.
BW Canvas Ripper
当前为
// ==UserScript==
// @name GrimRipper
// @namespace http://tampermonkey.net/
// @version 1.5
// @description BW Canvas Ripper
// @author XXXXXXXXXIII
// @match https://viewer.bookwalker.jp/*
// @license MIT
// ==/UserScript==
const height = 1600; // USER: Canvas will automatically set to double this value, and same for downloaded image size
const width = 1125;
(function() {
'use strict';
console.log("Hello There");
var id = setInterval(function setRenderer() {
var renderer = getRenderer();
if (!renderer) return;
renderer.style.width = width + 'px';
renderer.style.height = height + 'px';
//clearInterval(id); // Keep it running
}, 10);
setTimeout(main, 3000);
})();
function main() {
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();
saveCanvas(canvas, getPageNum());
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: Auto flip time interval
}
function getRenderer() {
return document.getElementById('renderer');
}
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(); // USER: Disable ask where to store file location setting for usability
document.body.removeChild(a);
}, "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, ""));
}