// ==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';
}
});
})();