// ==UserScript== // @name YNJN Full-Page Downloader (Actualizado) // @namespace ynjn-downloader // @version 0.2 // @description Descarga imágenes grandes (páginas) de Young Jump Web Comics (YNJN) // @match https://ynjn.jp/* // @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 // @downloadURL none // ==/UserScript== (function() { 'use strict'; // Esperar a que la página cargue completamente function waitForPageLoad(callback) { if (document.readyState === 'complete') { callback(); } else { window.addEventListener('load', callback); } } waitForPageLoad(() => { console.log("📥 Script YNJN Downloader activo"); // 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; font-size: 14px; `; document.body.appendChild(downloadBtn); // Evento de clic en el botón downloadBtn.addEventListener('click', async () => { downloadBtn.disabled = true; downloadBtn.textContent = 'Descargando...'; try { // Capturar imágenes precargadas en const preloadLinks = Array.from(document.querySelectorAll('link[rel="preload"]')) .map(link => link.href) .filter(href => href.includes('/public/')); // Capturar imágenes grandes en const bigImages = Array.from(document.querySelectorAll('img')) .map(img => img.src) .filter(src => src.includes('/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. Intenta hacer scroll hasta el final del 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'; } }); })();