main
parent
6ada6d0efb
commit
cfe3db8de4
@ -0,0 +1,158 @@ |
||||
// ==UserScript==
|
||||
// @name hd4k_downloader
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 1.0
|
||||
// @description 提取页面图片并发送到后端
|
||||
// @author Jack
|
||||
// @match *://*/*
|
||||
// @grant GM_xmlhttpRequest
|
||||
// ==/UserScript==
|
||||
|
||||
(function() { |
||||
'use strict'; |
||||
|
||||
// 创建按钮
|
||||
const createButton = () => { |
||||
const button = document.createElement('button'); |
||||
button.textContent = '提取图片'; |
||||
button.id = 'hd4k-extract-btn'; |
||||
|
||||
// 按钮样式 - 修改为蓝色系
|
||||
button.style.position = 'fixed'; |
||||
button.style.top = '12.5%'; |
||||
button.style.right = '1%'; |
||||
button.style.transform = 'translateY(-50%)'; |
||||
button.style.padding = '6px 12px'; |
||||
button.style.fontSize = '12px'; |
||||
button.style.fontWeight = 'bold'; |
||||
button.style.backgroundColor = '#2c80ff'; |
||||
button.style.color = '#fff'; |
||||
button.style.border = 'none'; |
||||
button.style.borderRadius = '8px'; |
||||
button.style.cursor = 'pointer'; |
||||
button.style.zIndex = '10000'; |
||||
button.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)'; |
||||
button.style.transition = 'all 0.3s ease'; |
||||
|
||||
// 悬停效果
|
||||
button.addEventListener('mouseenter', () => { |
||||
button.style.backgroundColor = '#1a6ee0'; |
||||
button.style.transform = 'translateY(-50%) scale(1.05)'; |
||||
}); |
||||
|
||||
button.addEventListener('mouseleave', () => { |
||||
button.style.backgroundColor = '#2c80ff'; |
||||
button.style.transform = 'translateY(-50%) scale(1)'; |
||||
}); |
||||
|
||||
// 点击事件
|
||||
button.addEventListener('click', extractAndSendImages); |
||||
|
||||
return button; |
||||
}; |
||||
|
||||
// 获取所有图片URL
|
||||
const getAllImageUrls = () => { |
||||
const images = document.querySelectorAll('img'); |
||||
const imageUrls = {}; |
||||
let index = 1; |
||||
|
||||
images.forEach(img => { |
||||
let src = img.src || img.dataset.src || img.currentSrc; |
||||
|
||||
// 过滤掉空URL、base64和数据URL
|
||||
if (src && !src.startsWith('data:') && !src.startsWith('blob:')) { |
||||
const key = String(index).padStart(4, '0'); |
||||
imageUrls[key] = src; |
||||
index++; |
||||
} |
||||
}); |
||||
|
||||
return imageUrls; |
||||
}; |
||||
|
||||
// 提取并发送数据
|
||||
const extractAndSendImages = () => { |
||||
try { |
||||
// 获取当前页面信息
|
||||
const title = document.title || '无标题'; |
||||
const url = window.location.href; |
||||
const imageUrls = getAllImageUrls(); |
||||
|
||||
// 准备数据
|
||||
const data = { |
||||
title: title, |
||||
url: url, |
||||
imgs: imageUrls |
||||
}; |
||||
|
||||
console.log('提取的数据:', data); |
||||
|
||||
// 显示加载状态
|
||||
const button = document.getElementById('hd4k-extract-btn'); |
||||
const originalText = button.textContent; |
||||
button.textContent = '处理中...'; |
||||
button.disabled = true; |
||||
|
||||
// 发送到后端
|
||||
GM_xmlhttpRequest({ |
||||
method: 'POST', |
||||
url: 'http://127.0.0.1:55830/api/save_imgs', |
||||
headers: { |
||||
'Content-Type': 'application/json' |
||||
}, |
||||
data: JSON.stringify(data), |
||||
onload: function(response) { |
||||
console.log('发送成功:', response); |
||||
|
||||
// 恢复按钮状态并显示成功
|
||||
button.textContent = '成功!'; |
||||
button.style.backgroundColor = '#28a745'; |
||||
|
||||
setTimeout(() => { |
||||
button.textContent = originalText; |
||||
button.style.backgroundColor = '#2c80ff'; |
||||
button.disabled = false; |
||||
}, 1500); |
||||
}, |
||||
onerror: function(error) { |
||||
console.error('发送失败:', error); |
||||
|
||||
// 恢复按钮状态并显示错误
|
||||
button.textContent = '失败!'; |
||||
button.style.backgroundColor = '#dc3545'; |
||||
|
||||
setTimeout(() => { |
||||
button.textContent = originalText; |
||||
button.style.backgroundColor = '#2c80ff'; |
||||
button.disabled = false; |
||||
}, 1500); |
||||
|
||||
alert('发送失败,请检查后端服务是否运行: ' + error.statusText); |
||||
}, |
||||
timeout: 10000 |
||||
}); |
||||
|
||||
} catch (error) { |
||||
console.error('提取图片时出错:', error); |
||||
alert('提取图片时出错: ' + error.message); |
||||
} |
||||
}; |
||||
|
||||
// 初始化 - 添加按钮到页面
|
||||
const init = () => { |
||||
// 确保按钮不会重复添加
|
||||
if (!document.getElementById('hd4k-extract-btn')) { |
||||
const button = createButton(); |
||||
document.body.appendChild(button); |
||||
} |
||||
}; |
||||
|
||||
// 页面加载完成后初始化
|
||||
if (document.readyState === 'loading') { |
||||
document.addEventListener('DOMContentLoaded', init); |
||||
} else { |
||||
init(); |
||||
} |
||||
|
||||
})(); |
||||
Loading…
Reference in new issue