Imgsrc.ru Downloader

Mass downloads all images from a collection on one page

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

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


})();