KDS-T Viewer Downloader + Screenshot

Descarga imágenes <img> y permite capturar la pantalla (html2canvas) en KDS-T Viewer

目前为 2025-03-09 提交的版本。查看 最新版本

// ==UserScript==
// @name         KDS-T Viewer Downloader + Screenshot
// @namespace    kds-t-viewer-downloader
// @version      0.4
// @description  Descarga imágenes <img> y permite capturar la pantalla (html2canvas) en 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
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/html2canvas.min.js
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // === CREAR BOTONES ===
    const downloadBtn = document.createElement('button');
    downloadBtn.textContent = 'Descargar Imágenes <img>';
    styleButton(downloadBtn, 10);

    const screenshotBtn = document.createElement('button');
    screenshotBtn.textContent = 'Captura de Pantalla';
    styleButton(screenshotBtn, 60);

    document.body.appendChild(downloadBtn);
    document.body.appendChild(screenshotBtn);

    // === EVENTO: DESCARGAR IMÁGENES (DIRECTAS) ===
    downloadBtn.addEventListener('click', async () => {
        downloadBtn.disabled = true;
        downloadBtn.textContent = 'Descargando...';

        try {
            // Capturamos todos los <img> de la página
            const imgElements = Array.from(document.querySelectorAll('img'));
            const imageUrls = imgElements.map(img => img.src).filter(src => src);

            if (!imageUrls.length) {
                alert('No se encontraron imágenes <img>. Quizá el visor use <canvas> o cifrado.');
                resetDownloadBtn();
                return;
            }

            console.log('Imágenes encontradas:', imageUrls);

            // Creamos el ZIP
            const zip = new JSZip();
            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 3 dígitos
                const fileName = String(i+1).padStart(3, '0') + '.jpg';
                zip.file(fileName, blob);
            }

            // Generamos el ZIP
            const zipContent = await zip.generateAsync({ type: 'blob' });
            saveAs(zipContent, 'kds_t_imagenes.zip');
            alert(`Descarga completa: ${imageUrls.length} imágenes.`);
        } catch (error) {
            console.error('Error al descargar imágenes:', error);
            alert('Ocurrió un error durante la descarga. Revisa la consola para más detalles.');
        }

        resetDownloadBtn();
    });

    // === EVENTO: CAPTURA DE PANTALLA (html2canvas) ===
    screenshotBtn.addEventListener('click', async () => {
        screenshotBtn.disabled = true;
        screenshotBtn.textContent = 'Capturando...';

        try {
            // Opción: Asegurarnos de que todo el contenido está visible
            //         Haz scroll manual antes para cargar todo.
            const canvas = await html2canvas(document.body, {
                useCORS: true
            });
            canvas.toBlob(function(blob) {
                saveAs(blob, 'captura_kds_t.png');
            });
            alert('Captura finalizada. Imagen descargada como captura_kds_t.png');
        } catch (error) {
            console.error('Error en la captura de pantalla:', error);
            alert('Ocurrió un error al hacer la captura. Revisa la consola para más detalles.');
        }

        resetScreenshotBtn();
    });

    // === FUNCIONES DE ESTILO Y RESETEO ===
    function styleButton(btn, topPx) {
        btn.style.position = 'fixed';
        btn.style.top = `${topPx}px`;
        btn.style.right = '10px';
        btn.style.zIndex = '9999';
        btn.style.background = '#6e8efb';
        btn.style.color = '#fff';
        btn.style.padding = '8px 12px';
        btn.style.border = 'none';
        btn.style.borderRadius = '4px';
        btn.style.cursor = 'pointer';
    }

    function resetDownloadBtn() {
        downloadBtn.disabled = false;
        downloadBtn.textContent = 'Descargar Imágenes <img>';
    }

    function resetScreenshotBtn() {
        screenshotBtn.disabled = false;
        screenshotBtn.textContent = 'Captura de Pantalla';
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址