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