KDS-T Viewer Full Image Downloader

Descarga todas las imágenes de la página de KDS-T Viewer

当前为 2025-03-09 提交的版本,查看 最新版本

// ==UserScript==
// @name         KDS-T Viewer Full Image Downloader
// @namespace    kds-t-viewer-downloader
// @version      0.3
// @description  Descarga todas las imágenes de la página de KDS-T Viewer
// @match        https://kds-t.jp/viewer/*
// @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';
    
    // Creamos un botón fijo para iniciar la descarga
    const downloadBtn = document.createElement('button');
    downloadBtn.textContent = 'Descargar Imágenes';
    downloadBtn.style.cssText = `
        position: fixed;
        top: 10px;
        right: 10px;
        z-index: 9999;
        background: #6e8efb;
        color: #fff;
        padding: 8px 12px;
        border: none;
        border-radius: 4px;
        cursor: pointer;
    `;
    document.body.appendChild(downloadBtn);
    
    downloadBtn.addEventListener('click', async () => {
        downloadBtn.disabled = true;
        downloadBtn.textContent = 'Descargando...';
        try {
            // Si fuera necesario, se podría forzar scroll para cargar imágenes lazy load:
            // window.scrollTo(0, document.body.scrollHeight);
            
            // Capturamos todas las etiquetas <img> de la página
            const imgElements = Array.from(document.querySelectorAll('img'));
            // Extraemos la URL (atributo src) de cada imagen y filtramos las vacías
            const imageUrls = imgElements.map(img => img.src).filter(src => src);
            
            if (!imageUrls.length) {
                alert('No se encontraron imágenes en esta página.');
                resetButton();
                return;
            }
            
            console.log('Imágenes encontradas:', imageUrls);
            
            const zip = new JSZip();
            // Descargamos cada imagen secuencialmente
            for (let i = 0; i < imageUrls.length; i++) {
                const url = imageUrls[i];
                console.log(`Descargando imagen ${i+1}: ${url}`);
                const response = await fetch(url);
                const blob = await response.blob();
                // Nombramos los archivos con números de 3 dígitos
                const fileName = String(i+1).padStart(3, '0') + '.jpg';
                zip.file(fileName, blob);
            }
            
            // Generamos el ZIP y lo descargamos
            const zipContent = await zip.generateAsync({ type: 'blob' });
            saveAs(zipContent, 'kds_t_imagenes.zip');
            alert(`Descarga completa: ${imageUrls.length} imágenes descargadas.`);
        } catch (error) {
            console.error('Error durante la descarga:', error);
            alert('Ocurrió un error durante la descarga. Consulta la consola para más detalles.');
        }
        resetButton();
    });
    
    function resetButton() {
        downloadBtn.disabled = false;
        downloadBtn.textContent = 'Descargar Imágenes';
    }
})();