Greasy Fork

YNJN Full-Page Downloader

Descarga imágenes grandes (páginas) de Young Jump Web Comics (YNJN)

目前为 2025-02-18 提交的版本。查看 最新版本

// ==UserScript==
// @name         YNJN Full-Page Downloader
// @namespace    ynjn-downloader
// @version      0.1
// @description  Descarga imágenes grandes (páginas) de Young Jump Web Comics (YNJN)
// @match        https://ynjn.jp/title/*/chapter/*
// @require      https://cdn.jsdelivr.net/npm/jszip@3/dist/jszip.min.js
// @require      https://cdn.jsdelivr.net/npm/file-saver@2/dist/FileSaver.min.js
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Crear un botón para descargar
    const downloadBtn = document.createElement('button');
    downloadBtn.textContent = 'Descargar Páginas Grandes';
    downloadBtn.style.cssText = `
        position: fixed;
        top: 10px;
        right: 10px;
        z-index: 9999;
        background: #e63946;
        color: #fff;
        padding: 8px 12px;
        border: none;
        border-radius: 4px;
        cursor: pointer;
    `;
    document.body.appendChild(downloadBtn);

    // Al hacer clic, busca imágenes y genera el ZIP
    downloadBtn.addEventListener('click', async () => {
        downloadBtn.disabled = true;
        downloadBtn.textContent = 'Descargando...';
        try {
            // Capturar imágenes precargadas en <link rel="preload">
            const preloadLinks = Array.from(document.querySelectorAll('link[rel="preload"]'))
                .map(link => link.href)
                .filter(href => href.includes('cdn.ynjn.jp/public/'));

            // Capturar imágenes grandes en <img>
            const bigImages = Array.from(document.querySelectorAll('img'))
                .map(img => img.src)
                .filter(src => src.includes('cdn.ynjn.jp/public/'));

            // Unir ambas listas y quitar duplicados
            const allUrls = Array.from(new Set([...preloadLinks, ...bigImages]));
            if (!allUrls.length) {
                alert('No se encontraron imágenes grandes. Asegúrate de cargar todo el capítulo.');
                resetButton();
                return;
            }

            // Crear un ZIP
            const zip = new JSZip();

            // Descargar cada imagen
            for (let i = 0; i < allUrls.length; i++) {
                const url = allUrls[i];
                console.log(`Descargando página ${i+1}: ${url}`);
                const resp = await fetch(url);
                const blob = await resp.blob();
                const fileName = String(i+1).padStart(3, '0') + '.jpg';
                zip.file(fileName, blob);
            }

            // Generar y guardar el ZIP
            const zipContent = await zip.generateAsync({ type: 'blob' });
            saveAs(zipContent, 'ynjn_paginas.zip');
            alert(`Descarga completa: ${allUrls.length} imágenes grandes`);
        } catch (error) {
            console.error('Error al descargar páginas:', error);
            alert('Ocurrió un error. Revisa la consola para más detalles.');
        }
        resetButton();
    });

    function resetButton() {
        downloadBtn.disabled = false;
        downloadBtn.textContent = 'Descargar Páginas Grandes';
    }
})();