Greasy Fork

Greasy Fork is available in English.

网页图片下载

生成一个批量下载网页图片的按钮,点击后直接下载。目前支持网站:1. 微信公众号网页 2. 微博网页 3.其他网页使用通用方法下载

当前为 2024-04-03 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         网页图片下载
// @version      v1.3
// @description  生成一个批量下载网页图片的按钮,点击后直接下载。目前支持网站:1. 微信公众号网页 2. 微博网页 3.其他网页使用通用方法下载
// @author       nixingshiguang
// @match        http*://*/*
// @exclude      http*://www.xiaohongshu.com/*
// @exclude      *127.0.0.1*
// @icon         https://cftc.160621.xyz/file/8d23583061c79384c94e0.png
// @grant        GM_download
// @namespace http://greasyfork.icu/users/943170
// ==/UserScript==

(function () {
    'use strict';

    /**
     * 附加功能,隐藏滚动条
     */
    // 获取页面上的样式表
    var style = document.createElement('style');
    document.head.appendChild(style);
    var sheet = style.sheet;

    // 添加自定义滚动条样式
    sheet.insertRule('::-webkit-scrollbar { display: none; }', 0);

    /**
     * 网页图片下载功能
     */
    window.onload = function () {
        // 创建一个按钮
        var dlb = document.createElement('button');

        //设置按钮内容和样式
        dlb.innerHTML = '下载图片';
        dlb.style.position = 'fixed';
        dlb.style.top = '100px';
        dlb.style.color = 'black';
        dlb.style.right = '10px';
        dlb.style.zIndex = '9999';
        dlb.style.borderRadius = '10px';
        dlb.style.padding = '10px';
        dlb.style.border = '0';
        dlb.style.backgroundColor = 'white';
        dlb.style.boxShadow = '0 0 5px 5px skyblue ';

        // 将按钮添加到页面中
        document.body.appendChild(dlb);

        // 提前声明图片元素变量
        var imgElements;

        // 获取当前日期
        var today = new Date();

        // 格式化日期为 "aaaa-aa-aa"
        var year = today.getFullYear();
        var month = ('0' + (today.getMonth() + 1)).slice(-2);
        var day = ('0' + today.getDate()).slice(-2);
        var formattedDate = year + '-' + month + '-' + day;

        // 通用下载代码
        function universal() {
            // 给按钮绑定点击事件
            dlb.addEventListener('click', function () {
                // 获取页面上所有的img元素
                imgElements = document.querySelectorAll('img');
                //执行下载
                download();
            });
        }

        // 微信公众号下载代码
        function wxggh() {
            //给按钮绑定点击事件
            dlb.addEventListener('click', function () {
                // 判断是图文链接、还是图片文字链接
                // 获取用于判断的元素
                var diff = document.querySelector("#js_article");

                // 判断
                if (diff) {
                    if (diff.classList.contains('share_content_page')) {
                        // 获取页面上所有的img元素
                        imgElements = document.querySelectorAll('.swiper_item img');
                    } else {
                        // 获取页面上所有的img元素
                        imgElements = document.querySelectorAll('#img-content img');
                    }
                }

                //执行下载
                download();
            })
        };

        // 微博下载代码
        function weibo() {
            //给按钮绑定点击事件
            dlb.addEventListener('click', function () {
                console.clear();
                console.group("图片下载脚本");
                // 获取底部图片元素
                imgElements = document.querySelectorAll(".Viewer_prevItem_McSJ4 img");
                var count = 1;
                //替换字符,生成原图url
                imgElements.forEach(function (img) {
                    console.log("下载第" + count + "张图片");
                    count++;
                    var src = img.getAttribute("src");
                    var real_src = src.replace("orj360", "large");

                    // 创建一个 XMLHttpRequest 对象
                    var xhr = new XMLHttpRequest();
                    xhr.open('GET', real_src, true);
                    xhr.responseType = 'blob';

                    xhr.onload = function () {
                        if (xhr.status === 200) {
                            var blob = xhr.response;

                            // 创建一个 <a> 标签
                            var link = document.createElement('a');
                            link.style.display = 'none';
                            document.body.appendChild(link);

                            // 创建一个 URL 对象
                            var url = window.URL.createObjectURL(blob);

                            // 设置 <a> 标签的 href 属性为 Blob URL
                            link.href = url;

                            // 设置下载图片的文件名
                            link.download = formattedDate + '.jpg'; // 可以根据需要修改文件名

                            // 模拟点击下载
                            link.click();

                            // 释放 URL 对象
                            window.URL.revokeObjectURL(url);

                            // 移除 <a> 标签
                            document.body.removeChild(link);
                        }
                    };

                    xhr.send();
                });
                console.log("下载完成");
                console.groupEnd();
            });
        }

        // 下载按钮点击事件的通用代码
        function download() {
            // // 清空控制台内容
            // console.clear();
            console.group("图片下载脚本");
            // 存储所有img元素的data-src属性值
            var imageUrls = [];
            // 声明计数变量
            var count = 1;
            imgElements.forEach(function (img) {
                var dataSrc = img.getAttribute('data-src');
                var Src = img.getAttribute('src');
                if (dataSrc) {
                    console.log('从dataSrc获取的第' + count + '张的图片链接');
                    imageUrls.push(dataSrc);
                } else {
                    console.log("从src获取的第" + count + "张的图片链接");
                    imageUrls.push(Src);
                }
                count += 1;
            });
            console.log("下载开始");
            console.log(imageUrls);
            imageUrls.forEach(function (url) {
                GM_download({
                    url: url,
                    name: formattedDate + '.jpg'
                    // name: url.substring(url.lastIndexOf('/') + 1)
                });
            });
            console.log("下载结束");
            console.groupEnd();
        }

        // 通过判断当前网址来执行不同的下载获取图片代码
        // 获取当前网页url
        var currentUrl = window.location.href;

        // 使用Switch匹配执行代码
        switch (true) {
            //匹配微信公众号推文:mp.weixin.qq.com/s/
            case currentUrl.includes("mp.weixin.qq.com/s/"):
                wxggh();
                break;
            //匹配微博原图:https://weibo.com/*?layerid=
            case currentUrl.includes("https://weibo.com/"):
                weibo();
                break;
            // 使用通用下载代码
            default:
                universal();
        }
    }
})();