Greasy Fork is available in English.

neoCmoaRipper

GrimRipper Cmoa upgraded

// ==UserScript==
// @name         neoCmoaRipper
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  GrimRipper Cmoa upgraded
// @author       XXXXXXXXXIII, weebuwy
// @match        https://www.cmoa.jp/bib/speedreader/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=cmoa.jp
// @license      MIT
// ==/UserScript==

const width = 1125; // USER: image size
const height = 1600;

let downloaded = [];

(function() {
    'use strict';
    var page = -1;

    setInterval(() => {
        try {
            if (page < 1) page = getPageNum();
          	page = getPageNum();
          
          	for (let i = 1; i <= page; i++) {
            	if (downloaded.includes(i)) continue;
              setContainer(i);
              let imgs = getImgs(i);
              saveImage(imgs, i);
              downloaded.push(i);
            }
        } catch (e) {
            console.log(e.message);
        }
    }, 100);
})();

function saveImage(imgs, page) {
  	console.log(`saved page ${page}`);
  
    let canvas = document.createElement('canvas');
    let ctx = canvas.getContext('2d');
    canvas.width = 1125;
    canvas.height = 1600;
    ctx.drawImage(imgs[0], 0, 0);
    ctx.drawImage(imgs[1], 0, canvas.height * 0.3325);
    ctx.drawImage(imgs[2], 0, canvas.height * 0.665 );
    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);
}

function setContainer(page) {
    var container = document.getElementById('content-p' + page);
    container.style.width = width + 'px';
    container.style.height = height + 'px';
}

function getImgs(page) {
    return document.getElementById('content-p' + page).getElementsByTagName('IMG');
}

function getPageNum() {
    var pageNum = document.getElementById('menu_slidercaption').innerHTML;
    return Number(pageNum.replace(/\/.*/i, ""));
}