Imgsrc.ru Downloader

Mass downloads all images from a collection on one page

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Imgsrc.ru Downloader
// @namespace    https://imgsrc.ru
// @version      1.0.0
// @description  Mass downloads all images from a collection on one page
// @author       You
// @match        https://imgsrc.ru/main/tape.php*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=imgsrc.ru
// @grant        GM_xmlhttpRequest
// @license      MIT
// ==/UserScript==

if (typeof GM_download !== 'function') {
    if (typeof GM_xmlhttpRequest !== 'function') {
        throw new Error('GM_xmlhttpRequest is undefined. Please set @grant GM_xmlhttpRequest at metadata block.');
    }

    function GM_download (url, name) {
        if (url == null) return;

        var data = {
            method: 'GET',
            responseType: 'arraybuffer',

            onload: function (res) {
                var blob = new Blob([res.response], {type: 'application/octet-stream'});
                var url = URL.createObjectURL(blob); // blob url

                var a = document.createElement('a');
                a.setAttribute('href', url);
                a.setAttribute('download', data.name != null ? data.name : 'filename');
                document.documentElement.appendChild(a);

                // call download
                // a.click() or CLICK the download link can't modify filename in Firefox (why?)
                // Solution from FileSaver.js, https://github.com/eligrey/FileSaver.js/
                var e = new MouseEvent('click');
                a.dispatchEvent(e);

                document.documentElement.removeChild(a);

                setTimeout(function(){
                    // reduce memory usage
                    URL.revokeObjectURL(url);
                    if ('close' in blob) blob.close(); // File Blob.close() API, not supported by all the browser right now
                    blob = undefined;
                }, 1000);

                if (typeof data.onafterload === 'function') data.onafterload(); // call onload function
            }

            // error object of onerror function is not supported right now
        };

        if (typeof url === 'string') {
            data.url = url;
            data.name = name;
        }
        else {
            if (url instanceof Object === false) return;

            // as documentation, you can only use [url, name, headers, saveAs, onload, onerror] function, but we won't check them
            // Notice: saveAs is not supported
            if (url.url == null) return;

            for (var i in url) {
                if (i === 'onload') data.onafterload = url.onload; // onload function support
                else data[i] = url[i];
            }
        }

        // it returns this GM_xhr, thought not mentioned in documentation
        return GM_xmlhttpRequest(data);
    }
}

(function() {
    'use strict';

    const imageUrls = []
    const imageElements = document.querySelectorAll('.fts')

    const imageDiv = document.querySelector('.h100')

    for (let i = 0; i < imageElements.length; i++) {
        const url = 'https://' + imageElements[i].getAttribute('src');
        imageUrls.push(url)
    }

    const buttonDiv = document.createElement("div")
    buttonDiv.style.display = 'flex'
    buttonDiv.style['justify-content'] = 'center'


    const btn = document.createElement("button")
    btn.innerText = 'Download all images on this page'
    btn.id = 'download'
    btn.style.color = '#fff'
    btn.style.background = '#000'
    btn.style.border = 'none'
    btn.style.padding = '20px'
    btn.style['border-radius'] = '15px'

    buttonDiv.append(btn)


    imageDiv.prepend(buttonDiv)

    btn.addEventListener("mouseenter", () => {
        btn.style.background = '#4e4e4e'
        btn.style.cursor = 'pointer'
    })
    btn.addEventListener("mouseleave", () => {
        btn.style.background = '#000'
    })

    btn.addEventListener("click", () => {
        for (let i = 0; i < imageUrls.length; i++) {
            GM_download({
                url: imageUrls[i],
                name: imageUrls[i].split('/')[imageUrls[i].split('/').length - 1],
                saveAs: false
            });
        }
    })


})();