Tampermonkey油猴 跨域请求下载图片示例

2024-06-22 19:28

本文主要是介绍Tampermonkey油猴 跨域请求下载图片示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Tampermonkey油猴 跨域请求下载图片示例

  • 前言
  • 项目
    • 目标网站
    • 代码编写
  • 运行效果

前言

需要用油猴采集并下载一个网站的图片,直接下下不了,搜了一下,是禁止跨域,使用CORS Unblock也不行,所以使用油猴自带的GM_xmlhttpRequest发送跨域请求。

项目

目标网站

目标网站

代码编写

代码仅作为学习使用,禁止商用。

// ==UserScript==
// @name         ***** Image Downloader and Zipper with GM_xmlhttpRequest
// @namespace    http://tampermonkey.net/
// @version      1.7
// @description  Download all matching product images as a zip file from the **** product page using GM_xmlhttpRequest (For learning purposes only)
// @author       slowfeather@163.com
// @match        
// @icon         
// @grant        GM_xmlhttpRequest
// @grant        GM_download
// @require      https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js
// ==/UserScript==(function() {'use strict';// List to store image URLslet imageUrls = new Set();// Function to periodically collect image URLsfunction collectImageUrls() {const imageElements = document.querySelectorAll('img');const regex1 = /*****\.com\/package-screenshot\/.+?_scaled\.jpg$/;const regex2 = /*****\.****\.com\/key-image\/.+?\.jpg$/;imageElements.forEach((img) => {const url = img.src;if ((regex1.test(url) || regex2.test(url)) && !imageUrls.has(url)) {imageUrls.add(url);showNotification('捕获了一张图片地址 :'+url);}});}// Function to show notificationfunction showNotification(message) {const notification = document.createElement('div');notification.innerText = message;notification.style.position = 'fixed';notification.style.top = '50px';notification.style.right = '10px';notification.style.zIndex = 1000;notification.style.backgroundColor = 'lightgreen';notification.style.padding = '5px';notification.style.border = '1px solid green';notification.style.borderRadius = '5px';document.body.appendChild(notification);setTimeout(() => {document.body.removeChild(notification);}, 1000);}// Set an interval to collect image URLs every secondsetInterval(collectImageUrls, 300);// Function to download all images in the list and zip themasync function downloadAndZipImages() {const zip = new JSZip();let count = 0;const fetchImage = (url, filename) => {return new Promise((resolve, reject) => {GM_xmlhttpRequest({method: 'GET',url: url,responseType: 'blob',onload: function(response) {if (response.status === 200) {zip.file(filename, response.response);count++;resolve();} else {reject(`HTTP error! status: ${response.status}`);}},onerror: function(error) {reject(`Failed to fetch image ${url}: ${error}`);}});});};const fetchPromises = Array.from(imageUrls).map((url, index) => {const filename = `image_${index + 1}.jpg`;return fetchImage(url, filename);});try {await Promise.all(fetchPromises);if (count > 0) {const content = await zip.generateAsync({ type: "blob" });saveAs(content, "images.zip");} else {alert("No matching images found.");}} catch (error) {console.error(error);}}// Wait for the page to fully loadwindow.addEventListener('load', () => {// Create a button to trigger the downloadconst button = document.createElement('button');button.innerText = 'Download All Images as Zip';button.style.position = 'fixed';button.style.top = '10px';button.style.right = '10px';button.style.zIndex = 1000;button.addEventListener('click', downloadAndZipImages);document.body.appendChild(button);});
})();

运行效果

成功捕获图片
下载图片

这篇关于Tampermonkey油猴 跨域请求下载图片示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085194

相关文章

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

golang panic 函数用法示例详解

《golangpanic函数用法示例详解》在Go语言中,panic用于触发不可恢复的错误,终止函数执行并逐层向上触发defer,最终若未被recover捕获,程序会崩溃,recover用于在def... 目录1. panic 的作用2. 基本用法3. recover 的使用规则4. 错误处理建议5. 常见错

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问