// ==UserScript== // @name ZeroSumOnline Manga Downloader // @namespace custom-scripts // @version 2.0 // @description Descarga todas las imágenes de capítulos de manga desde ZeroSumOnline en un archivo ZIP. // @author TuNombre // @license MIT // @match https://zerosumonline.com/* // @grant GM_download // @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js // @downloadURL none // ==/UserScript== (function () { "use strict"; // Crear botón para descargar las imágenes const downloadButton = document.createElement("button"); downloadButton.textContent = "Descargar Todas las Imágenes"; downloadButton.style = ` position: fixed; top: 10px; right: 10px; z-index: 10000; background-color: #007bff; color: white; border: none; padding: 10px 20px; font-size: 14px; border-radius: 5px; cursor: pointer; `; document.body.appendChild(downloadButton); // Evento al hacer clic en el botón downloadButton.addEventListener("click", async () => { try { const images = Array.from(document.querySelectorAll("img.G54Y0W_page")); if (images.length === 0) { alert("No se encontraron imágenes en el capítulo."); return; } const zip = new JSZip(); const folder = zip.folder("manga_images"); for (let i = 0; i < images.length; i++) { const imgElement = images[i]; const blob = await fetchImageBlob(imgElement.src); if (blob) { const fileName = `page_${String(i + 1).padStart(3, "0")}.jpg`; folder.file(fileName, blob); console.log(`Añadida al ZIP: ${fileName}`); } else { console.warn(`No se pudo procesar la imagen ${i + 1}`); } } const zipBlob = await zip.generateAsync({ type: "blob" }); saveAs(zipBlob, "manga_chapter.zip"); alert(`Se descargaron ${images.length} imágenes en el archivo ZIP.`); } catch (error) { console.error("Error durante la descarga:", error); alert("Ocurrió un error al descargar las imágenes. Revisa la consola para más detalles."); } }); // Descargar el contenido de la imagen desde la URL async function fetchImageBlob(url) { try { const response = await fetch(url); if (response.ok) { return await response.blob(); } else { console.error(`Error al obtener la imagen: ${url}`); return null; } } catch (error) { console.error(`Error al intentar descargar ${url}:`, error); return null; } } })();