图片下载

网页图片下载功能

当前为 2025-07-22 提交的版本,查看 最新版本

// ==UserScript==
// @name         图片下载
// @namespace    http://tampermonkey.net/
// @version      1.0.0
// @description  网页图片下载功能
// @author       Fepic
// @match        *://*/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @grant        unsafeWindow
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 使用网页下载调用这个复制到控制台

    let pa = () => {
        var Yuan = document.querySelectorAll("img")
        var arr = []
        Yuan.forEach(e => {
            arr.push({
                name: e.getAttribute("src"),
                url: e.getAttribute("src"),
            })
        })
        var o = {
            //https://www.4khd.com/专用title
            // title: (document.querySelector(".wp-block-post-title.has-medium-font-size").innerHTML),
            title: (document.getElementsByTagName("title")[0].innerHTML),
            list: arr
        }
        console.log(o)
        return o
    }
    const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

    // 主下载函数
    async function downloadImages(pa) {
        let list = pa['list']; // 替换yourJsonData为实际变量名
        const t = pa['title']
        const downloadDelay = 1000; // 每个请求间隔1秒

        for (const [index, item] of list.entries()) {
            try {
                // 获取二进制数据
                const response = await fetch(item.url);
                if (!response.ok) throw new Error(`HTTP ${response.status}`);

                // 创建Blob对象
                const blob = await response.blob();

                // 生成文件名(使用id_encoded和原扩展名)
                let extArray = [
                    ".jpg",
                    ".png",
                    ".jpeg",
                    ".gif",
                    ".bmp",
                    ".webp",
                ]
                const ext = extArray.filter(e=>item.name.slice(item.name.lastIndexOf(".")).indexOf(e) > -1)[0] || ".jpg";
                const n = t + index
                const filename = n + `${ext}`;

                // 创建下载链接
                const link = document.createElement('a');
                link.href = URL.createObjectURL(blob);
                link.download = filename;
                link.style.display = 'none';

                // 触发下载
                document.body.appendChild(link);
                link.click();

                // 清理内存
                setTimeout(() => {
                    document.body.removeChild(link);
                    URL.revokeObjectURL(link.href);
                }, 100);

                console.log(`[${index + 1}/${list.length}] 下载成功: ${filename}`);

                // 请求延迟
                if (index < list.length - 1) await delay(downloadDelay);

            } catch (error) {
                console.error(`[${index + 1}] 下载失败:`, error.message);
            }
        }
    }
    let download = ()=>{
        let result = pa()
        downloadImages(result)
    }
    let createBtn = ()=>{
        var btn = document.createElement("button")
        btn.setAttribute("style" , `
    position:fixed;
    z-index:909999;
    right:50px;
    top:50px;
    width:100px;
    height:100px;
    border-radius:50%;
    opacity:0.8;
    background:#2d8cf0;
    color:#fff;
    font-size:18px;
`)
        btn.innerText = "点击我"
        btn.setAttribute('id' , 'cli')
        document.body.appendChild(btn);
    }
    createBtn()
    document.querySelector('#cli').onclick = download;
})();