// ==UserScript==
// @name 网页图片下载
// @version v1.7
// @description 生成一个批量下载网页图片的按钮,点击后直接下载。目前支持网站:1. 微信公众号网页 2. 微博网页 3.其他网页使用通用方法下载
// @author nixingshiguang
// @match http*://mp.weixin.qq.com/s*
// @match https://m.weibo.cn/*
// @match https://weibo.com/*
// @icon https://cftc.160621.xyz/file/8d23583061c79384c94e0.png
// @grant GM_download
// @namespace https://greasyfork.org/users/943170
// @downloadURL none
// ==/UserScript==
(function () {
'use strict';
/**
* 网页图片下载功能
*/
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 ';
dlb.style.opacity = '0.5';
// 将按钮添加到页面中
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 random_string(length) {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
const charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
// 通用下载代码
function universal() {
// 给按钮绑定点击事件
dlb.addEventListener('click', function () {
// 获取页面上所有的img元素
imgElements = document.querySelectorAll('img');
//执行下载
download();
});
}
// 微信公众号下载代码
function wxggh() {
const erWeiMa = document.getElementById('js_pc_qr_code');
if (erWeiMa) {
erWeiMa.remove();
}
// 判断是图文链接、还是图片文字链接
// 获取用于判断的元素
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();
//给按钮绑定点击事件
dlb.addEventListener('click', function () {
//执行下载
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;
// 创建一个 标签
var link = document.createElement('a');
link.style.display = 'none';
document.body.appendChild(link);
// 创建一个 URL 对象
var url = window.URL.createObjectURL(blob);
// 设置 标签的 href 属性为 Blob URL
link.href = url;
// 设置下载图片的文件名
link.download = formattedDate + '.jpg'; // 可以根据需要修改文件名
// 模拟点击下载
link.click();
// 释放 URL 对象
window.URL.revokeObjectURL(url);
// 移除 标签
document.body.removeChild(link);
}
};
xhr.send();
});
console.log("下载完成");
console.groupEnd();
});
}
// 手机版网页微博下载代码
function weiboMobie() {
//给按钮绑定点击事件
dlb.addEventListener('click', function () {
console.clear();
console.group("微博手机版图片下载");
// 获取底部图片元素
imgElements = document.querySelectorAll("img[data-v-5deaae85]");
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;
// 创建一个 标签
var link = document.createElement('a');
link.style.display = 'none';
document.body.appendChild(link);
// 创建一个 URL 对象
var url = window.URL.createObjectURL(blob);
// 设置 标签的 href 属性为 Blob URL
link.href = url;
// 设置下载图片的文件名
link.download = formattedDate + '.jpg'; // 可以根据需要修改文件名
// 模拟点击下载
link.click();
// 释放 URL 对象
window.URL.revokeObjectURL(url);
// 移除 标签
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 + random_string(4) + '.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;
//匹配微博手机版原图:https://m.weibo.cn/
case currentUrl.includes("https://m.weibo.cn/"):
weiboMobie();
break;
// 使用通用下载代码
default:
universal();
}
}
})();