// ==UserScript==
// @name MissAv批量备份收藏视频
// @name:zh-CN MissAv批量备份收藏视频
// @namespace https://github.com/ChinaGodMan/UserScripts
// @version 1.2.3.73
// @description 从当前missav页面获取图片文件和视频信息,并合并结果后提供下载生成的网页文件
// @description:zh-CN 从当前missav页面获取图片文件和视频信息,并合并结果后提供下载生成的网页文件
// @license MIT
// @author 人民的勤务员 <china.qinwuyuan@gmail.com> & ChatGPT
// @match https://missav.com/*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_xmlhttpRequest
// @grant GM_download
// @grant GM_openInTab
// @icon data:image/png;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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
// @iconbak https://pic.616pic.com/ys_bnew_img/00/35/79/Gv93yQh7v6.jpg
// @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js
// @require https://update.greasyfork.org/scripts/498124/1396763/video.js
// @require https://update.greasyfork.org/scripts/498149/1395619/%E4%BF%A1%E6%81%AF%E6%9F%A5%E7%9C%8B%E5%99%A8.js
// @supportURL https://github.com/ChinaGodMan/UserScripts/issues
// @homepageURL https://github.com/ChinaGodMan/UserScripts
// ==/UserScript==
(function () {
'use strict'
var controlButton = createButton('备份', '10px', '10px')
var buttonA = createButton('备份当前', '70px', '10px')
var buttonB = createButton('备份片单', '130px', '10px')
var buttonC = createButton('设置选项', '190px', '10px')
var webdavbutton = createButton('WebDav', '250px', '10px')
// 设置按钮的背景颜色和样式
controlButton.style.backgroundColor = 'blue' // 控制按钮改为蓝色背景
buttonA.style.backgroundColor = 'green'
buttonB.style.backgroundColor = 'blue'
buttonC.style.backgroundColor = 'red'
webdavbutton.style.backgroundColor = 'blue'
// 隐藏初始的三个按钮
buttonA.style.display = 'none'
buttonB.style.display = 'none'
buttonC.style.display = 'none'
webdavbutton.style.display = 'none'
// 添加按钮到页面
document.body.appendChild(controlButton)
document.body.appendChild(buttonA)
document.body.appendChild(buttonB)
document.body.appendChild(buttonC)
document.body.appendChild(webdavbutton)
// 控制按钮的点击事件
controlButton.addEventListener('click', function () {
if (buttonA.style.display === 'none') {
// 显示三个按钮
buttonA.style.display = 'block'
buttonB.style.display = 'block'
buttonC.style.display = 'block'
webdavbutton.style.display = 'block'
controlButton.innerHTML = '隐藏'
} else {
// 隐藏三个按钮
buttonA.style.display = 'none'
buttonB.style.display = 'none'
buttonC.style.display = 'none'
webdavbutton.style.display = 'none'
controlButton.innerHTML = '备份'
}
})
webdavbutton.addEventListener('click', function () {
// 点击按钮时执行的操作
WebDAVManager.listFilesAndFolders(webdavfold)
})
// 按钮A的点击事件
buttonA.addEventListener('click', function () {
resetGlobalVariables()
singleFileDownload = true
window.showLogContainer()
var currentDate = new Date()
var currentTime = currentDate.getFullYear() + '-' + (currentDate.getMonth() + 1) + '-' + currentDate.getDate() + '_' + currentDate.getHours() + '-' + currentDate.getMinutes() + '-' + currentDate.getSeconds()
if (useDefaultTitle) {
name = document.querySelector('meta[name="twitter:title"]').content
} else {
const twitterTitleContent = document.querySelector('meta[name="twitter:title"]').content
name = prompt('请输入自定义名称:', twitterTitleContent)
if (name === null) {
name = twitterTitleContent
}
}
inurl = window.location.href
const defaultPages = getTotalPagesd()
const totalPages = setTotalPage(defaultPages)
allpages = totalPages
//const delay = settime();
if (totalPages) {
start(totalPages)
}
})
// 按钮B的点击事件
buttonB.addEventListener('click', function () {
// 点击按钮时执行的操作
resetGlobalVariables()
fetchJsonData()
})
// 按钮C的点击事件
buttonC.addEventListener('click', function () {
createSettingsUI()
// 这里可以添加按钮C点击后的具体操作,比如打开链接或执行其他动作
})
// 创建按钮的辅助函数
function createButton(text, top, left) {
var button = document.createElement('button')
button.innerHTML = text
button.style.position = 'fixed'
button.style.bottom = top
button.style.right = left
button.style.zIndex = '1000'
button.style.padding = '10px'
button.style.border = 'none'
button.style.cursor = 'pointer'
button.style.color = '#fff'
button.style.fontSize = '14px'
button.style.fontWeight = 'bold'
button.style.textAlign = 'center'
button.style.width = '100px' // 调整按钮宽度
return button
}
// 全局变量
var allResults = [] // 存储所有的结果数据
var zip = new JSZip() // 创建一个压缩文件实例
var allzip = new JSZip() // 另一个可能的压缩文件实例
var imgFolder = zip.folder('img') // 在 zip 中创建一个名为 "img" 的文件夹,用于存储图片文件
var allimgFolder = allzip.folder('img') // 在 allzip 中创建一个名为 "img" 的文件夹,可能用于另一个压缩文件的图片存储
var ALLfiledown = false // 标识是否所有文件已下载完毕的布尔变量
var videos = [] // 存储视频文件或相关信息的数组
var finalData = [] // 存储最终处理数据的数组
var inurl = '' // 当前下载地址的变量
var pendingRequests = 0 // 当前待处理的请求数量
var delayTime // 延迟时间,以毫秒为单位,用于控制异步操作的时间间隔
var currentPage = 1 // 当前处理的页数,可能用于分页处理或其他进度跟踪
var currentUrlIndex = 0 // 当前处理的 urls 数组中的索引位置
var name = '' // 当前下载的名称
var urls = [] // 存储需要处理的网址数组
var a = -1 // 循环中的计数或索引,初始值为 -1
var allZipContents = [] // 存储所有压缩文件内容的数组
var singleFileDownload = false // 标识是否为单个文件下载模式的布尔变量
var names = [] // 存储下载名称列表的数组
var allpages = 0 // 存储总页数或其他页面处理相关信息的变量
var modalContainer = null // 存储模态窗口容器的全局变量,用于显示下载进度或其他信息
var shouldReplace = false // 控制是否在下载大图时进行替换操作的布尔变量
var temporaryData = []
var saveJson = false
var useDefaultTitle = true
var pageCount = true
var saveVideoInfo = false
var saveImage = false
var downloadLog = {}
var errorLogs = {}
var downloadLogFileA = false // 这里设置为 true 时载日志
var webdavfold = 'missavsave'
//var webdavfold="1111";
var savetowebdav = false
var webdavUrl = ''
var webdavUsername = ''
var webdavPassword = ''
var deleteSelected = false
ini()//读取配置
function resetGlobalVariables() {
zip = new JSZip() // 重置为一个新的 JSZip 实例,用于创建新的压缩文件
allzip = new JSZip() // 可能是另一个新的 JSZip 实例,用于其他用途的压缩文件
if (saveImage) {
imgFolder = zip.folder('img') // 在 zip 中创建一个名为 "img" 的文件夹,用于存储图片文件
allimgFolder = allzip.folder('img') // 在 allzip 中创建一个名为 "img" 的文件夹,可能用于另一个压缩文件的图片存储
}
downloadLog = {}
errorLogs = {}
ALLfiledown = false // 重置为 false,表示所有文件未下载完毕
videos = [] // 清空存储视频文件或相关信息的数组
finalData = [] // 清空存储最终处理数据的数组
inurl = '' // 重置当前下载地址为空字符串
pendingRequests = 0 // 重置待处理的请求数量为 0
currentPage = 1 // 重置当前处理的页数为 1
currentUrlIndex = 0 // 重置当前处理的 urls 数组索引为 0
name = '' // 重置当前下载的名称为空字符串
urls = [] // 清空存储需要处理的网址数组
a = -1 // 重置循环中的计数或索引为 -1
allZipContents = [] // 清空存储所有压缩文件内容的数组
singleFileDownload = false // 重置为 false,表示不是单个文件下载模式
names = [] // 清空存储下载名称列表的数组
allpages = 0 // 重置存储总页数或其他页面处理相关信息的变量为 0
temporaryData = []
}
async function processUrls() {
//delayTime = 20;
let completedTasks = 0 // 计数已完成的任务数量
for (const url of urls) {
a = a + 1 // 每次循环递增 a
inurl = url
console.log('正在处理网址:', url, names[a])
window.addToLog('处理:' + url + names[a], 'info')
name = names[a]
try {
const totalPages = await getTotalPages(url) // 等待 getTotalPages 返回结果
console.log('Total pages for', url, ':', totalPages) // 显示总页数
window.addToLog(name + ' 总页数:' + url + totalPages, 'info')
allpages = totalPages
start(totalPages) // 启动处理流程
// 等待当前页面的请求完成
while (pendingRequests > 0) {
await new Promise(resolve => setTimeout(resolve, 100)) // 每隔 100 毫秒检查一次是否所有请求都已完成
}
completedTasks++ // 标记当前任务已完成
} catch (error) {
console.error('Error processing URL:', url, error) // 处理错误信息
allpages = 1
start(1) // 启动处理流程
while (pendingRequests > 0) {
await new Promise(resolve => setTimeout(resolve, 100)) // 每隔 100 毫秒检查一次是否所有请求都已完成
}
completedTasks++ // 标记当前任务已完成
}
}
// 如果所有任务都已完成且 urls 数组不为空,则调用下载函数
if (completedTasks === urls.length && urls.length !== 0) {
downloadAllZips()
}
}
function getAllCookies() {
return document.cookie
}
// 获取指定 JSON 数据的函数
function fetchJsonData() {
const cookies = getAllCookies()
//alert(cookies);
console.log('Current page cookies:', cookies)
// 构建 API URL
const apiUrl = 'https://missav.com/api/playlists/dfe-057'
// 发送带有 cookies 的请求
GM_xmlhttpRequest({
method: 'GET',
url: apiUrl,
headers: {
'Cookie': cookies
},
onload: function (response) {
if (response.status === 200) {
try {
const jsonResponse = JSON.parse(response.responseText)
if (jsonResponse && Array.isArray(jsonResponse.data)) {
createReportUI(jsonResponse.data, 500) // 假设每页显示 10 个项目
// 调用 processUrls 函数处理 URLs
} else {
console.error('JSON 格式无效')
showModal('JSON 格式无效', 2000)
}
} catch (error) {
console.error('Error parsing JSON:', error)
showModal('解析错误' + error, 2000)
}
} else {
console.error('Request failed with status:', response.status)
showModal('解析错误', 2000)
}
},
onerror: function (error) {
showModal('解析错误' + error, 2000)
}
})
}
function processUrl(url) {
// 检查是否包含 `page=` 参数
var pageIndex = url.indexOf('page=')
if (pageIndex !== -1) {
// 找到 `page=` 参数并删除它及其后的所有内容
var baseUrl = url.substring(0, pageIndex + 5) // +5 to include `page=`
return baseUrl
} else {
// 检查是否已有其他参数
if (url.includes('?')) {
// 有其他参数,添加 `&page=`
return url + '&page='
} else {
// 没有其他参数,添加 `?page=`
return url + '?page='
}
}
}
function settime() {
// 让用户输入延时时间
delayTime = prompt('请输入每页请求的延时时间(毫秒):', '1000')
// 检查用户是否取消输入
if (delayTime === null) {
alert('输入取消')
return
}
delayTime = parseInt(delayTime)
// 检查输入的延时时间是否有效
if (isNaN(delayTime) || delayTime <= 0) {
alert('请输入有效的延时时间(正整数)!')
return
}
// 返回有效的延时时间
return delayTime
}
function getTotalPagesd() { // 获取总页数
var totalPagesElement = document.querySelector('#price-currency')
var totalPagesText = totalPagesElement ? totalPagesElement.innerText : ''
var totalPages = parseInt(totalPagesText.replace('/', '').trim(), 10)
// 如果获取总页数失败,则返回 1
if (isNaN(totalPages) || totalPages <= 0) {
totalPages = 1
}
return totalPages
}
function getTotalPages(url) {
return new Promise((resolve, reject) => {
// 如果没有提供 URL,则使用当前页面的 URL
if (!url) {
url = window.location.href
}
// 发起 GM_xmlhttpRequest 请求获取页面内容
GM_xmlhttpRequest({
method: 'GET',
url: url,
headers: { 'Cookie': document.cookie },
onload: function (response) {
// 处理响应
if (response.status === 200) {
const parser = new DOMParser()
const doc = parser.parseFromString(response.responseText, 'text/html')
const totalPagesElement = doc.querySelector('#price-currency') // 替换为实际选择器
if (totalPagesElement) {
const totalPagesText = totalPagesElement.innerText
const totalPages = parseInt(totalPagesText.replace('/', '').trim(), 10)
resolve(totalPages) // 成功时返回总页数
} else {
window.addToLog('页面中没有找到总页数,默认为1页', 'warning')
reject('Total pages element not found') // 页面中没有找到总页数元素
}
} else {
window.addToLog('请求失败', 'warning')
reject(`Request failed with status ${response.status}`) // 请求失败
}
},
onerror: function () {
window.addToLog('请求出错', 'warning')
reject('Request failed') // 请求出错
}
})
})
}
// 设置总页数
function setTotalPage(defaultPages) {
if (!pageCount) {
return defaultPages
}
const inputPages = parseInt(prompt(`当前 ${name} 总页数为 ${defaultPages}。请输入你想要抓取的页数(不输入抓取全部):`, defaultPages), 10)
if (isNaN(inputPages) || inputPages <= 0) {
return defaultPages
}
return inputPages
}
// 开始处理页面抓取
function start(totalPages, callback) {
const pages = Array.from({ length: totalPages }, (_, i) => i + 1)
pendingRequests = pages.length
fetchPage(pages.shift(), pages, callback)
}
// 点击按钮时执行操作
// 异步获取页面内容
function fetchPage(pageNum, pages, callback) {
const pageUrl = `${processUrl(inurl)}${pageNum}`
console.log(`正在获取第 ${pageNum} 页的内容...`)
//showModal(`正在获取${name} 第 ${pageNum} / ${allpages}页 `);
if (a !== -1) {
showModal(`${a + 1}/${names.length} 正在获取 ${name} 第 ${pageNum} / ${allpages} 页`)
} else {
showModal(`正在获取 ${name} 第 ${pageNum} / ${allpages} 页`)
}
GM_xmlhttpRequest({
method: 'GET',
url: pageUrl,
headers: { 'Cookie': document.cookie },
onload: function (response) {
if (response.status === 200) {
processPageContent(response.responseText, pageNum, pages, callback)
} else {
pendingRequests--
checkIfComplete(callback)
if (pages.length > 0) {
setTimeout(() => fetchPage(pages.shift(), pages, callback), delayTime)
}
}
}
})
}
//获取视频信息
function extractInformation(htmlContent) {
let data = {} // 创建一个对象来存储提取的数据
let xhr = new XMLHttpRequest()
xhr.open('GET', htmlContent, false) // 同步方式打开请求
xhr.send()
// 创建一个虚拟的 <div> 元素来加载 HTML 内容
let tempDiv = document.createElement('div')
tempDiv.innerHTML = xhr.responseText
// 获取所有包含信息的父元素列表
let parentElements = tempDiv.querySelectorAll('div.space-y-2 > div')
if (parentElements.length > 0) {
let allInfo = {} // 初始化一个空对象来存储所有信息
// 遍历每个包含信息的 <div> 元素
parentElements.forEach(div => {
let span = div.querySelector('span') // 获取第一个 <span> 元素
if (span) {
let category = span.textContent.trim() // 获取主分类名称
if (!allInfo[category]) {
allInfo[category] = [] // 初始化一个空数组来存储该分类下的所有信息
}
// 查找所有的 <a> 元素和 <time> 元素
div.querySelectorAll('a, time').forEach(element => {
let info = {}
// 判断元素是否是 <a> 元素
if (element.tagName === 'A') {
info['name'] = element.textContent.trim() // 获取名称
info['link'] = element.href.trim() // 获取链接
} else if (element.tagName === 'TIME') {
info = element.textContent.trim() // 如果是 <time> 元素,则直接保存其文本内容
}
// 添加信息对象到相应的主分类数组中
allInfo[category].push(info)
})
// 如果没有找到 <a> 元素,则尝试获取 <span> 标签内的文本内容
if (div.querySelectorAll('a').length === 0) {
let spanText = div.querySelector('span.font-medium')
if (spanText) {
let info = spanText.textContent.trim()
allInfo[category].push(info)
}
}
}
})
// 提取 class="mb-1 text-secondary break-all line-clamp-2" 的内容
let descriptionElement = tempDiv.querySelector('.mb-1.text-secondary.break-all.line-clamp-2')
let descriptionContent = descriptionElement ? descriptionElement.textContent.trim() : ''
allInfo['简介'] = descriptionContent
// 将所有信息存储到 data 对象中
data['videosinfo'] = allInfo
// 查找包含 x-cloak 和 x-show="currentTab === 'magnets'" 的第二个元素
let secondElement = tempDiv.querySelector('div[x-cloak][x-show="currentTab === \'magnets\'"]')
if (secondElement) {
let linksAndInfo = []
// 遍历第二个元素内的 <a> 元素
secondElement.querySelectorAll('a[rel="nofollow"]').forEach(a => {
let linkInfo = {
name: a.textContent.trim(),
link: a.href.trim()
}
// 查找相邻的 <td> 元素,获取大小和日期信息
let sizeTd = a.closest('td').nextElementSibling
if (sizeTd && sizeTd.classList.contains('font-mono')) {
linkInfo['size'] = sizeTd.textContent.trim() // 获取大小信息
}
let dateTd = sizeTd ? sizeTd.nextElementSibling : null
if (dateTd && dateTd.classList.contains('hidden')) {
linkInfo['date'] = dateTd.textContent.trim() // 获取日期信息
}
let nextSibling = a.nextElementSibling
// 循环处理所有紧邻的<span>元素
while (nextSibling && nextSibling.tagName === 'SPAN') {
let spanText = nextSibling.textContent.trim()
linkInfo['name'] += ' ' + spanText // 将<span>元素的文本内容追加到name中
nextSibling = nextSibling.nextElementSibling // 继续查找下一个兄弟元素
}
linksAndInfo.push(linkInfo)
})
// 将第二个元素的链接和信息添加到 data 中
data['secondElementLinksInfo'] = linksAndInfo
} else {
console.error('未找到包含 x-cloak 和 x-show="currentTab === \'magnets\'" 的第二个元素。')
}
return data // 返回结构化的数据
} else {
console.error('未找到匹配的父元素 div.space-y-2')
return null // 如果未找到匹配的父元素,返回 null
}
} ///大
// 使用XMLHttpRequest获取页面内容
function fetchPageforinfo(url) {
let xhr = new XMLHttpRequest()
xhr.onreadystatechange = function () {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
extractInformation(xhr.responseText) // 将获取的页面内容传递给提取信息的函数
} else {
console.error('请求失败:' + xhr.status)
}
}
}
xhr.open('GET', url, true)
xhr.send()
}
// 处理获取到的页面内容
function processPageContent(htmlContent, pageNum, pages, callback) {
const parser = new DOMParser()
const doc = parser.parseFromString(htmlContent, 'text/html')
const divElements = doc.querySelectorAll('div.relative.aspect-w-16.aspect-h-9.rounded.overflow-hidden.shadow-lg')
const logEntry = {
url: `${processUrl(inurl)}${pageNum}`,
elementsFetched: divElements.length
}
// 如果当前名称的日志组不存在,则创建一个新数组
if (!downloadLog[name]) {
downloadLog[name] = []
}
// 将日志条目添加到日志数组中
downloadLog[name].push(logEntry)
if (divElements.length === 0) {
const logEntry = {
url: `${processUrl(inurl)}${pageNum}`,
elementsFetched: 0, // 这里可以根据实际需求设置其他信息
errorMessage: `获取第 ${pageNum} 页失败。`
}
if (!errorLogs[name]) {
errorLogs[name] = []
}
errorLogs[name].push(logEntry)
console.log(`获取第 ${pageNum} 页失败。`)
window.addToLog(`${name}${processUrl(inurl)}${pageNum}+获取失败 数量:` + divElements.length, 'error')
}
divElements.forEach(div => {
var imgUrl = div.querySelector('img').getAttribute('data-src')
if (shouldReplace) {
imgUrl = imgUrl.replace('cover-t.jpg', 'cover-n.jpg')
}
const video = {
fileName: div.querySelector('a').getAttribute('alt'),
imgUrl: imgUrl,
videoUrl: div.querySelector('video').getAttribute('data-src'),
markContent: Array.from(div.querySelectorAll('span')).map(mark => mark.textContent).join(' '),
altText: div.querySelector('img').getAttribute('alt'),
jumpUrl: div.querySelector('a').getAttribute('href')
}
if (saveVideoInfo) {
video.info = extractInformation(video.jumpUrl)
//showBanner(`正在获取 ${video.fileName} 信息`);
window.addToLog(`正在获取 ${video.fileName} 信息`, 'info')
console.log()
};
if (video.imgUrl && video.altText) {
videos.push(video)
if (saveImage) {
window.addToLog('保存' + video.imgUrl, 'info')
pendingRequests++
GM_xmlhttpRequest({
method: 'GET',
url: video.imgUrl,
responseType: 'blob',
onload: function (response) {
if (response.status === 200) {
if (saveImage) {
if (singleFileDownload) {
console.log('这是单个文件下载')
imgFolder.file(`${video.fileName}.jpg`, response.response, { binary: true })
} else {
console.log('这是批量文件下载')
allimgFolder.file(`${video.fileName}.jpg`, response.response, { binary: true })
}
}
pendingRequests--
checkIfComplete(callback)
} else {
pendingRequests--
checkIfComplete(callback)
}
}
})
}
} else {
pendingRequests--
checkIfComplete(callback)
}
})
showModal(`获取第 ${pageNum} 页的内容完成,等待 ${delayTime} 毫秒加载第 ${pageNum + 1} 页。`)
pendingRequests--
checkIfComplete(callback)
if (pages.length > 0) {
setTimeout(() => fetchPage(pages.shift(), pages, callback), delayTime)
} else {
}
}
closeModal()
function downloadLogFile() {
if (!downloadLogFileA) {
console.log('日志下载已被跳过')
return
}
if (Object.keys(errorLogs).length === 0) {
// 如果错误日志为空,直接下载正常日志文件
const logBlob = new Blob([JSON.stringify(downloadLog, null, 4)], { type: 'application/json' })
const logUrl = URL.createObjectURL(logBlob)
const logLink = document.createElement('a')
logLink.href = logUrl
logLink.download = 'download_log.json'
logLink.click()
URL.revokeObjectURL(logUrl)
} else {
// 创建一个JSZip实例
const zip = new JSZip()
// 添加正常日志文件到压缩包
const logBlob = new Blob([JSON.stringify(downloadLog, null, 4)], { type: 'application/json' })
zip.file('download_log.json', logBlob)
// 添加错误日志文件到压缩包
const errorLogBlob = new Blob([JSON.stringify(errorLogs, null, 4)], { type: 'application/json' })
zip.file('error_log.json', errorLogBlob)
// 生成压缩包并触发下载
zip.generateAsync({ type: 'blob' }).then(function (content) {
const zipUrl = URL.createObjectURL(content)
const link = document.createElement('a')
link.href = zipUrl
link.download = 'logs.zip'
link.click()
URL.revokeObjectURL(zipUrl)
})
}
}
function sanitizeFileName(name) {
return name.replace(/[\\\/:*?"<>|]/g, '_')
}
function checkIfComplete(callback) {
if (pendingRequests === 0) {
const additionalInfo = {
timestamp: new Date().toISOString(),
inurl: inurl
}
if (singleFileDownload) {
showModal('获取完毕,正在生成单个文件...')
finalData = {
info: additionalInfo,
video: videos
}
if (saveJson) {
zip.file('data.json', JSON.stringify(finalData, null, 4))
}
if (savetowebdav) {
WebDAVManager.uploadFile(webdavfold, `${sanitizeFileName(name)}.json`, JSON.stringify(finalData, null, 4))
}
const jsonIndexContent = generateJsonIndexContent(finalData)
const numFiles = Object.keys(zip.files).length // 获取压缩包中文件的数量
if (numFiles === 0) {
const htmlContent = jsonIndexContent // 替换为实际的HTML内容
const htmlBlob = new Blob([htmlContent], { type: 'text/html' })
const htmlUrl = URL.createObjectURL(htmlBlob)
const a = document.createElement('a')
a.href = htmlUrl
a.download = `${sanitizeFileName(name)}.html`
a.click()
closeModal()
downloadLogFile()
if (callback) callback()
} else {
zip.file(`${sanitizeFileName(name)}.html`, jsonIndexContent)
// 生成并下载单个文件
zip.generateAsync({ type: 'blob' }, function updateCallback(metadata) {
const progress = metadata.percent.toFixed(2)
showModal(`压缩进度: ${progress}%`)
}).then(content => {
const zipUrl = URL.createObjectURL(content)
const a = document.createElement('a')
a.href = zipUrl
a.download = `${name}.zip`
a.click()
URL.revokeObjectURL(zipUrl)
closeModal()
downloadLogFile()
if (callback) callback()
})
}
} else {
finalData = {
info: additionalInfo,
video: videos
}
if (saveJson) {
allzip.file(`${sanitizeFileName(name)}.json`, JSON.stringify(finalData, null, 4))
}
if (savetowebdav) {
WebDAVManager.uploadFile(webdavfold, `${sanitizeFileName(name)}.json`, JSON.stringify(finalData, null, 4))
}
const jsonIndexContent = generateJsonIndexContent(finalData);;
allzip.file(`${sanitizeFileName(name)}.html`, jsonIndexContent)
finalData = []
videos = []
if (callback) callback()
}
}
}
function downloadAllZips() {
if (singleFileDownload === false) {
showModal('获取完毕,正在生成压缩文件...')
const numFiles = Object.keys(allzip.files).length // 获取压缩包中文件的数量
if (numFiles === 1) {
// 如果压缩包中只有一个文件,直接处理该文件
const fileName = Object.keys(allzip.files)[0] // 获取唯一的文件名
const file = allzip.files[fileName]
// 根据文件类型获取文件内容
file.async('blob').then(content => {
// 创建一个Blob对象,并下载
const blob = new Blob([content])
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = fileName
document.body.appendChild(a) // 添加到文档中以确保点击有效
a.click()
document.body.removeChild(a) // 下载完成后移除元素
URL.revokeObjectURL(url)
closeModal()
}).catch(error => {
console.error('Error fetching file content:', error)
closeModal()
})
downloadLogFile()
return // 结束函数执行,不生成压缩包
}
allzip.generateAsync({ type: 'blob' }, function updateCallback(metadata) {
const progress = metadata.percent.toFixed(2)
showModal(`压缩进度: ${progress}%`)
}).then(content => {
const zipUrl = URL.createObjectURL(content)
const a = document.createElement('a')
a.href = zipUrl
a.download = `批量备份${urls.length}个片单.zip`
a.click()
URL.revokeObjectURL(zipUrl)
closeModal()
downloadLogFile()
if (callback) callback()
})
// 如果 singleFileDownload 等于假,则执行这里的代码
}
}
function showBanner(text) {
// 查找现有的横幅元素
var existingBanner = document.querySelector('.banner')
if (existingBanner) {
// 如果横幅已经存在,直接更新文本内容
existingBanner.textContent = text
} else {
// 如果横幅不存在,创建一个新的横幅
var banner = document.createElement('div')
banner.className = 'banner' // 添加一个类名以便识别
banner.style.position = 'fixed'
banner.style.bottom = '20px' // 距离底部的距离
banner.style.left = '20px' // 距离左侧的距离
banner.style.width = 'auto' // 根据文本自动调整宽度
banner.style.backgroundColor = 'rgba(255, 255, 255, 0.9)'
banner.style.color = '#000' // 黑色文本
banner.style.textAlign = 'center'
banner.style.padding = '20px'
banner.style.borderRadius = '8px'
banner.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.1)'
banner.style.zIndex = '9999'
banner.textContent = text // 将传入的文本设置为横幅内容
document.body.appendChild(banner) // 将横幅添加到文档的末尾
// 3秒后移除横幅提示
setTimeout(function () {
banner.remove()
}, 3000)
}
}
// 创建或更新模态窗口
function showModal(message, autoCloseDelay = 0) {
// 如果模态窗口不存在,则创建新的模态窗口
if (!modalContainer) {
modalContainer = document.createElement('div')
modalContainer.className = 'modal-container'
modalContainer.style.cssText = `
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: rgba(255, 255, 255, 0.9);
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
z-index: 9999;
padding: 20px;
`
document.body.appendChild(modalContainer)
}
// 更新模态窗口的内容
modalContainer.textContent = message
// 自动关闭模态窗口
if (autoCloseDelay > 0) {
setTimeout(closeModal, autoCloseDelay)
}
}
// 关闭模态窗口
function closeModal() {
// 如果模态窗口存在,则从 DOM 中移除
if (modalContainer) {
document.body.removeChild(modalContainer)
modalContainer = null // 将变量重置为 null,以便下次创建新的模态窗口
}
}
// 创建JSONindex
function createReportUI(data, itemsPerPage) {
temporaryData = data
// 创建全屏遮罩层
const overlay = document.createElement('div')
overlay.className = 'overlay'
overlay.style.cssText = `
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 1); /* 全黑不透明背景 */
z-index: 9999; /* 确保遮罩层位于所有内容之上 */
`
// document.body.appendChild(overlay);
const modalContainer = document.createElement('div')
modalContainer.className = 'modal-container'
modalContainer.style.cssText = `
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: rgba(255, 255, 255, 1);
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
z-index: 10000; /* 确保弹出框位于遮罩层之上 */
padding: 20px;
width: 80%;
max-width: 800px;
`
const title = document.createElement('h2')
title.textContent = `当前共有片单数量: ${temporaryData.length}`
title.style.textAlign = 'center'
modalContainer.appendChild(title)
const closeButton = document.createElement('button')
closeButton.textContent = '×'
closeButton.style.position = 'absolute'
closeButton.style.top = '10px'
closeButton.style.right = '10px'
closeButton.style.backgroundColor = 'transparent'
closeButton.style.border = 'none'
closeButton.style.fontSize = '24px'
closeButton.style.cursor = 'pointer'
modalContainer.appendChild(closeButton)
closeButton.addEventListener('click', () => {
// document.body.removeChild(overlay); // 移除遮罩层
document.body.removeChild(modalContainer) // 移除模态框
})
const tableContainer = document.createElement('div')
tableContainer.style.cssText = `
max-height: 60vh;
overflow-y: auto;
`
modalContainer.appendChild(tableContainer)
const table = document.createElement('table')
table.style.width = '100%'
table.style.borderCollapse = 'collapse'
table.style.fontSize = '16px'
tableContainer.appendChild(table)
const thead = document.createElement('thead')
table.appendChild(thead)
const headerRow = document.createElement('tr')
thead.appendChild(headerRow)
const checkboxHeader = document.createElement('th')
checkboxHeader.textContent = '选择'
checkboxHeader.style.textAlign = 'center'
checkboxHeader.style.padding = '10px'
headerRow.appendChild(checkboxHeader)
const nameHeader = document.createElement('th')
nameHeader.textContent = '片单'
nameHeader.style.padding = '10px'
nameHeader.style.width = '40%'
headerRow.appendChild(nameHeader)
const urlHeader = document.createElement('th')
urlHeader.textContent = '地址'
urlHeader.style.padding = '10px'
urlHeader.style.width = '40%'
headerRow.appendChild(urlHeader)
const tbody = document.createElement('tbody')
table.appendChild(tbody)
let currentPage = 1
const totalItems = data.length
const totalPages = Math.ceil(totalItems / itemsPerPage)
function generateTableData(page) {
tbody.innerHTML = ''
const startIndex = (page - 1) * itemsPerPage
const endIndex = startIndex + itemsPerPage
for (let i = startIndex; i < endIndex && i < data.length; i++) {
const row = document.createElement('tr')
tbody.appendChild(row)
// 序号列
const indexCell = document.createElement('td')
indexCell.textContent = i + 1 // 显示序号,从1开始
indexCell.style.textAlign = 'center'
indexCell.style.padding = '5px'
row.appendChild(indexCell)
const checkboxCell = document.createElement('td')
checkboxCell.style.textAlign = 'center'
checkboxCell.style.padding = '5px'
const checkbox = document.createElement('input')
checkbox.type = 'checkbox'
checkbox.id = `checkbox_${i}`
checkbox.value = i
checkboxCell.appendChild(checkbox)
row.appendChild(checkboxCell)
const nameCell = document.createElement('td')
nameCell.textContent = data[i].name
nameCell.style.padding = '10px'
nameCell.style.borderBottom = '1px solid #ddd'
row.appendChild(nameCell)
const urlCell = document.createElement('td')
const fullUrl = 'https://missav.com/playlists/' + data[i].key
const link = document.createElement('a')
link.textContent = fullUrl
link.href = fullUrl
link.target = '_blank' // 在新标签页中打开链接
urlCell.appendChild(link)
urlCell.style.padding = '10px'
urlCell.style.borderBottom = '1px solid #ddd'
row.appendChild(urlCell)
}
}
generateTableData(currentPage)
const paginationContainer = document.createElement('div')
paginationContainer.style.marginTop = '20px'
paginationContainer.style.textAlign = 'center'
modalContainer.appendChild(paginationContainer)
const prevButton = document.createElement('button')
prevButton.textContent = '上一页'
prevButton.style.marginRight = '10px'
prevButton.disabled = true
const pageIndicator = document.createElement('span')
pageIndicator.style.marginRight = '10px'
updatePageIndicator()
paginationContainer.appendChild(pageIndicator)
const nextButton = document.createElement('button')
nextButton.textContent = '下一页'
nextButton.style.marginLeft = '10px'
if (totalPages <= 1) {
nextButton.disabled = true
}
prevButton.addEventListener('click', () => {
currentPage--
generateTableData(currentPage)
updatePaginationButtons()
updatePageIndicator()
})
nextButton.addEventListener('click', () => {
currentPage++
generateTableData(currentPage)
updatePaginationButtons()
updatePageIndicator()
})
function updatePaginationButtons() {
prevButton.disabled = currentPage === 1
nextButton.disabled = currentPage === totalPages
}
function updatePageIndicator() {
pageIndicator.textContent = `第 ${currentPage}/${totalPages} 页`
}
const selectAllButton = document.createElement('button')
selectAllButton.textContent = '全部选择'
selectAllButton.style.marginRight = '10px'
selectAllButton.style.marginTop = '20px'
selectAllButton.style.padding = '10px 20px'
selectAllButton.style.fontSize = '16px'
selectAllButton.style.backgroundColor = '#007bff'
selectAllButton.style.color = '#fff'
selectAllButton.style.border = 'none'
selectAllButton.style.borderRadius = '5px'
selectAllButton.style.cursor = 'pointer'
selectAllButton.style.float = 'left'
modalContainer.appendChild(selectAllButton)
let selectAll = true
selectAllButton.addEventListener('click', () => {
const checkboxes = document.querySelectorAll('input[type="checkbox"]')
checkboxes.forEach(checkbox => {
checkbox.checked = selectAll
})
if (selectAll) {
selectAllButton.textContent = '取消选择'
} else {
selectAllButton.textContent = '全部选择'
}
selectAll = !selectAll
})
//
const confirmButton = document.createElement('button')
confirmButton.textContent = '确认选择'
confirmButton.style.marginTop = '20px'
confirmButton.style.padding = '10px 20px'
confirmButton.style.fontSize = '16px'
confirmButton.style.backgroundColor = '#007bff'
confirmButton.style.color = '#fff'
confirmButton.style.border = 'none'
confirmButton.style.borderRadius = '5px'
confirmButton.style.cursor = 'pointer'
confirmButton.style.float = 'right'
modalContainer.appendChild(confirmButton)
document.body.appendChild(modalContainer)
confirmButton.addEventListener('click', () => {
const checkboxes = document.querySelectorAll('input[type="checkbox"]')
let anyCheckboxChecked = false
checkboxes.forEach(checkbox => {
if (checkbox.checked) {
const index = parseInt(checkbox.value, 10)
if (index >= 0 && index < temporaryData.length) {
// 检查 temporaryData[index] 是否为 undefined 或 null
if (temporaryData[index]) {
// 将选中的名称和URL推送到全局变量
names.push(temporaryData[index].name)
urls.push('https://missav.com/playlists/' + temporaryData[index].key)
anyCheckboxChecked = true
} else {
console.error(`temporaryData[${index}] is undefined or null.`)
}
} else {
console.error(`Index ${index} is out of bounds for temporaryData.`)
}
}
})
document.body.removeChild(modalContainer)
// document.body.removeChild(overlay);
if (anyCheckboxChecked) {
processUrls()
window.showLogContainer()
}
})
}
function ini() {
delayTime = GM_getValue('delayTime', 1000) // 从GM存储中读取延迟时间
shouldReplace = GM_getValue('shouldReplace', false) // 从GM存储中读取状态
saveJson = GM_getValue('saveJson', false) // 从GM存储中读取状态
useDefaultTitle = GM_getValue('useDefaultTitle', true)
pageCount = GM_getValue('pageCount', true)
saveVideoInfo = GM_getValue('saveVideoInfo', false)
saveImage = GM_getValue('saveImage', true)
downloadLogFileA = GM_getValue('downloadLogFileA', false)
savetowebdav = GM_getValue('savetowebdav', false)
webdavUrl = GM_getValue('webdavUrl', '')
webdavUsername = GM_getValue('webdavUsername', '')
webdavPassword = GM_getValue('webdavPassword', '')
}
// 创建设置界面
function createControl(tagName, attributes = {}, styles = {}, parent = document.body) {
const element = document.createElement(tagName)
// 设置属性
for (const key in attributes) {
element[key] = attributes[key]
}
// 设置样式
Object.assign(element.style, styles)
// 添加到父元素
if (parent) {
parent.appendChild(element)
}
return element
}
function createSettingsUI() {
const modalContainer = createControl('div', {
className: 'settings-modal'
}, {
position: 'fixed',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
backgroundColor: 'rgba(255, 255, 255, 1)',
borderRadius: '8px',
boxShadow: '0 4px 8px rgba(0, 0, 0, 0.2)',
zIndex: '9999',
padding: '20px',
width: '400px',
maxWidth: '80%'
})
const title = createControl('h2', {
textContent: '设置'
}, {
textAlign: 'center'
})
modalContainer.appendChild(title)
// 创建控件并添加到模态框
const controls = [
{
type: 'checkbox',
id: 'saveImageCheckbox',
label: '下载图片',
checked: GM_getValue('saveImage', true),
onchange: function () { GM_setValue('saveImage', this.checked) }
},
{
type: 'checkbox',
id: 'saveJsonCheckbox',
label: '下载JSON',
checked: GM_getValue('saveJson', false),
onchange: function () { GM_setValue('saveJson', this.checked) }
},
{
type: 'checkbox',
id: 'hdImageCheckbox',
label: '下载高清大图',
checked: GM_getValue('shouldReplace', false),
onchange: function () { GM_setValue('shouldReplace', this.checked) }
},
{
type: 'checkbox',
id: 'defaultTitleCheckbox',
label: '使用网页标题名保存',
checked: GM_getValue('useDefaultTitle', true),
onchange: function () { GM_setValue('useDefaultTitle', this.checked) }
},
{
type: 'checkbox',
id: 'saveVideoInfoCheckbox',
label: '下载视频信息',
checked: GM_getValue('saveVideoInfo', false),
onchange: function () { GM_setValue('saveVideoInfo', this.checked) }
},
{
type: 'checkbox',
id: 'pageCountCheckbox',
label: '自定义抓取页数',
checked: GM_getValue('pageCount', true),
onchange: function () { GM_setValue('pageCount', this.checked) }
},
{
type: 'checkbox',
id: 'downloadLogFileA',
label: '保存下载日志',
checked: GM_getValue('downloadLogFileA', false),
onchange: function () { GM_setValue('downloadLogFileA', this.checked) }
},
{
type: 'checkbox',
id: 'savetowebdav',
label: '上传JSON到WebDav',
checked: GM_getValue('savetowebdav', false),
onchange: function () { GM_setValue('savetowebdav', this.checked) }
},
{
type: 'number',
id: 'delayInput',
label: '设置延迟(毫秒)',
value: GM_getValue('delayTime', 1000),
placeholder: '设置延迟(毫秒)',
onchange: function () { GM_setValue('delayTime', this.value) },
style: {
width: '1px' // 设置输入框宽度为100%
}
},
{
type: 'text',
id: 'webdavUrlInput',
label: 'WebDAV 网址',
value: GM_getValue('webdavUrl', ''),
placeholder: '输入WebDAV网址',
onchange: function () { GM_setValue('webdavUrl', this.value) }
},
{
type: 'text',
id: 'webdavUsernameInput',
label: 'WebDAV 账号',
value: GM_getValue('webdavUsername', ''),
placeholder: '输入WebDAV账号',
onchange: function () { GM_setValue('webdavUsername', this.value) }
},
{
type: 'text',
id: 'webdavPasswordInput',
label: 'WebDAV 密码',
value: GM_getValue('webdavPassword', ''),
placeholder: '输入WebDAV密码',
onchange: function () { GM_setValue('webdavPassword', this.value) }
}
]
controls.forEach(control => {
const input = createControl('input', {
type: control.type,
id: control.id,
checked: control.checked,
value: control.value,
placeholder: control.placeholder,
onchange: control.onchange
}, {
marginRight: '10px'
})
const label = createControl('label', {
textContent: control.label,
htmlFor: control.id
}, {
fontSize: '14px',
marginLeft: '5px'
})
modalContainer.appendChild(input)
modalContainer.appendChild(label)
modalContainer.appendChild(createControl('br'))
})
// 关闭按钮
const closeButton = createControl('button', {
textContent: '关闭',
onclick: () => {
ini()
WebDAVManager.updateConfig(webdavUrl, webdavUsername, webdavPassword)
document.body.removeChild(modalContainer)
}
}, {
marginTop: '10px',
padding: '10px 20px',
fontSize: '16px',
backgroundColor: '#007bff',
color: '#fff',
border: 'none',
borderRadius: '5px',
cursor: 'pointer',
float: 'right'
})
modalContainer.appendChild(closeButton)
// 将模态框添加到页面
document.body.appendChild(modalContainer)
// 添加移动端样式
const mediaQuery = window.matchMedia('(max-width: 600px)')
if (mediaQuery.matches) {
modalContainer.style.width = '90%'
modalContainer.style.maxWidth = '90%'
modalContainer.style.padding = '10px'
}
}
// 在页面加载时调用设置界面创建函数
// 调用示例
const WebDAVManager = (function () {
// WebDAV 配置
let url = webdavUrl
let username = webdavUsername
let password = webdavPassword
// 通用 GM_xmlhttpRequest 封装函数
function GM_xhr({ path = '/', method, success, fail, headers = {}, data, ...config }) {
return new Promise(resolve => {
GM_xmlhttpRequest({
url: url + path,
method,
...config,
headers: {
'Connection': 'Keep-Alive', // 保持连接
'User-Agent': 'Mozilla/5.0', // 用户代理
'Authorization': 'Basic ' + btoa(username + ':' + password), // 基本认证
...headers
},
data,
onload: xhr => {
if (xhr.status >= 200 && xhr.status < 300) {
if (success) success(xhr)
} else {
if (fail) fail(xhr)
}
resolve(xhr)
},
onerror: xhr => {
if (fail) fail(xhr)
resolve(xhr)
}
})
})
}
//登录
async function login() {
let retryCount = 2 // 设置重试次数为2次
while (retryCount > 0) {
// 构建登录请求
const LOGIN = {
method: 'PROPFIND', // 使用 PROPFIND 方法检查根目录
path: retryCount === 2 ? '/' : '', // 根据重试次数设置 path
headers: {
'Depth': '1',
'Authorization': 'Basic ' + btoa(username + ':' + password),
'Connection': 'Keep-Alive', // 保持连接
'User-Agent': 'Mozilla/5.0' // 用户代理
}
}
// 发起登录请求
const loginResponse = await GM_xhr(LOGIN)
// 判断登录结果
if (loginResponse.status === 207) {
console.log('登录成功')
// 登录成功后,可以执行其他操作
showModal('Webdav登录成功!', 1000)
return true // 返回登录成功标志
} else {
console.error('登录失败:', loginResponse.status)
if (retryCount === 1) {
showModal('Webdav登录失败!' + loginResponse.status, 1000)
return false // 返回登录失败标志
} else {
retryCount-- // 减少重试次数
}
}
}
// 如果重试次数用尽仍未登录成功,执行其他操作(可根据实际情况添加代码)
console.error('重试次数用尽,登录失败')
showModal('Webdav登录失败!重试次数用尽', 1000)
return false
}
//刷新
function updateConfig(newUrl, newUsername, newPassword) {
if (newUrl && newUsername && newPassword) {
url = newUrl
username = newUsername
password = newPassword
// 在这里调用登录函数
login()
} else {
console.error('WebDAV 配置信息不完整')
}
}
// 获取 WebDAV 中指定路径下的所有文件和文件夹
async function listFilesAndFolders(folderName) {
const path = folderName.endsWith('/') ? folderName : folderName + '/'
const PROPFIND = {
method: 'PROPFIND',
headers: {
'Depth': '1'
},
success: (xhr) => {
const parser = new DOMParser()
const xmlDoc = parser.parseFromString(xhr.responseText, 'text/xml')
const responses = xmlDoc.getElementsByTagNameNS('DAV:', 'response')
let fileCount = 0
//let fileList = `<div class="custom-hr"></div>`;
let fileList = ''
for (let i = 0; i < responses.length; i++) {
const href = decodeURIComponent(responses[i].getElementsByTagNameNS('DAV:', 'href')[0].textContent.trim())
const displayName = href.substring(href.lastIndexOf('/') + 1)
const isCollection = responses[i].getElementsByTagNameNS('DAV:', 'collection').length > 0
if (!isCollection) {
fileList += `
<li class="file-item">
<input type="checkbox" name="fileCheckbox" class="file-checkbox">
<span>${fileCount + 1}.</span> <!-- 文件序号 -->
<a href="#" data-display-name="${displayName}" onclick="WebDAVManager.downloadAndDisplayFile('${folderName}', '${displayName}')" class="file-link">${displayName}</a> <!-- 文件名链接 -->
<div class="file-actions">
<a href="#" onclick="WebDAVManager.renameFile('${folderName}', '${displayName}')" class="file-action">更名</a>
<a href="#" onclick="WebDAVManager.deleteFile('${folderName}', '${displayName}')" class="file-action">删除</a>
<a href="#" onclick="WebDAVManager.downloadFile('${folderName}', '${displayName}')" class="file-action">下载</a>
</div>
<div style="clear: both;"></div> <!-- 清除浮动 -->
</li>
`
fileCount++
}
}
/*fileList += `
<div class="custom-hr"></div>
<p>文件数量: ${fileCount}</p>
</ul>
`;*/
fileList += '</ul>'
showDialog(`
<span style="font-size: 24px;">文件夹 ${folderName}</span><br>
<span style="color: green;"><span id="fileCountLabel">文件数量:</span> <span class="file-count">${fileCount}</span></span>
<div class="custom-hr"></div>
`, fileList)
},
fail: (xhr) => {
alert('获取文件列表失败:' + xhr.status)
}
}
await GM_xhr({ ...PROPFIND, path })
}
// 下载文件函数
// 在 WebDAV 中创建新文件夹
async function createFolder(folderName) {
const MKCOL = {
method: 'MKCOL',
path: folderName.endsWith('/') ? folderName : folderName + '/',
success: () => {
alert('文件夹创建成功')
},
fail: (xhr) => {
if (xhr.status === 409) {
// alert('冲突:文件夹可能已经存在或路径不正确');
} else {
//alert('创建文件夹失败:' + xhr.status);
}
}
}
await GM_xhr({ ...MKCOL })
}
// 上传文件到 WebDAV
async function uploadFile(folderName, fileName, fileContent) {
// 检查文件是否已存在
const HEAD = {
method: 'HEAD',
path: folderName + '/' + fileName,
success: () => {
//alert('文件已存在,无需重复上传');
window.addToLog(fileName + '文件存在', 'info')
// 可以在这里执行文件已存在时的逻辑,比如显示提示信息或执行其他操作
},
fail: async (xhr) => {
if (xhr.status === 404) {
// 文件不存在,执行上传操作
const PUT = {
method: 'PUT',
path: folderName + '/' + fileName,
data: fileContent,
success: () => {
window.addToLog(fileName + '文件上传成功', 'info')
},
fail: (xhr) => {
window.addToLog(fileName + '文件上传失败', 'error')
}
}
await GM_xhr({ ...PUT })
} else {
window.addToLog(fileName + '文件检查上传失败', 'error')
}
}
}
await GM_xhr({ ...HEAD })
}
// 重命名文件
async function renameFile(folderName, oldFileName) {
// 弹出对话框让用户输入新文件名
const newFileName = prompt(`请输入 ${oldFileName} 的新文件名:`)
if (!newFileName) {
alert('未输入新文件名,操作已取消。')
return
}
const encodedOldFileName = encodeURIComponent(oldFileName) // 对旧文件名进行编码
const encodedNewFileName = encodeURIComponent(newFileName + '.json') // 对新文件名进行编码
const sourcePath = folderName + '/' + encodedOldFileName
const destinationPath = folderName + '/' + encodedNewFileName
const MOVE = {
method: 'MOVE',
path: sourcePath,
headers: {
'Destination': url + destinationPath,
'Overwrite': 'T' // 允许覆盖目标文件
},
success: () => {
alert(`文件 ${oldFileName} 已成功重命名为 ${newFileName}`)
listFilesAndFolders(folderName) // 刷新文件列表
},
fail: (xhr) => {
if (xhr.status === 409) {
alert('冲突:文件名可能已存在或路径不正确')
} else {
alert('重命名文件失败:' + xhr.status)
}
}
}
await GM_xhr({ ...MOVE })
}
// 删除文件
async function deleteFile(folderName, fileName) {
let confirmdelete = false
if (deleteSelected) {
confirmdelete = true
} else {
confirmdelete = confirm(`确定要删除文件 ${fileName} 吗?`)
}
if (confirmdelete) {
try {
await deleteFileFromServer(folderName, fileName)
const fileItem = document.querySelector(`a[onclick*="${fileName}"]`).closest('li')
const checkbox = fileItem.querySelector('input[type="checkbox"]')
if (checkbox && checkbox.checked) {
checkbox.checked = false // 清除选中状态
checkbox.disabled = true // 禁止操作
}
markItemDeleted(fileItem)
} catch (error) {
alert('删除文件失败:' + error.message)
}
}
}
function markItemDeleted(fileItem) {
// 将文件名链接标记为已删除
const fileNameLink = fileItem.querySelector('a')
fileNameLink.style.textDecoration = 'line-through'
fileNameLink.removeAttribute('onclick')
fileNameLink.style.pointerEvents = 'none' // 不可点击
fileNameLink.style.color = 'gray' // 设置为灰色
// 将后续按钮标记为已删除
const actionButtons = fileItem.querySelectorAll('div > a')
actionButtons.forEach(button => {
button.style.textDecoration = 'line-through'
button.removeAttribute('onclick')
button.style.pointerEvents = 'none' // 不可点击
button.style.color = 'gray' // 设置为灰色
})
}
// 实际删除文件的函数
async function deleteFileFromServer(folderName, fileName) {
const DELETE = {
method: 'DELETE',
path: folderName + '/' + fileName
}
return new Promise((resolve, reject) => {
GM_xhr({ ...DELETE, success: resolve, fail: reject })
})
}
// 检查文件夹是否存在
async function checkFolderExists(folderName) {
const HEAD = {
method: 'HEAD',
path: folderName.endsWith('/') ? folderName : folderName + '/',
success: (xhr) => {
if (xhr.status === 200) {
// alert('文件夹存在');
} else if (xhr.status === 404) {
alert('文件夹不存在')
} else {
alert('检查文件夹状态失败:' + xhr.status)
}
},
fail: (xhr) => {
alert('检查文件夹失败:' + xhr.status)
}
}
await GM_xhr({ ...HEAD })
}
// 下载并展示文件
async function downloadFile(folderName, fileName, zip = null) {
return new Promise((resolve, reject) => {
// 发起 GET 请求下载文件内容
const GET = {
method: 'GET',
path: folderName + '/' + fileName,
success: (xhr) => {
const fileContent = xhr.responseText
const jsonData = JSON.parse(fileContent)
const content = generateJsonIndexContent(jsonData)
if (zip) {
// 如果传入了压缩包实例,则将文件内容添加到压缩包中
const sanitizedFileName = sanitizeFileName(fileName.replace('.json', '')) + '.html'
zip.file(sanitizedFileName, content)
resolve()
} else {
// 否则直接下载文件
const blob = new Blob([content], { type: 'text/html' })
const htmlUrl = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = htmlUrl
a.download = sanitizeFileName(fileName.replace('.json', '')) + '.html'
a.click()
resolve()
}
},
fail: (xhr) => {
reject(new Error('下载文件失败:' + xhr.status))
}
}
GM_xhr({ ...GET })
})
}
async function downloadAndDisplayFile(folderName, fileName) {
const GET = {
method: 'GET',
path: folderName + '/' + fileName,
success: (xhr) => {
try {
const fileContent = xhr.responseText
const jsonData = JSON.parse(fileContent)
const content = generateJsonIndexContent(jsonData)
// 打开一个新的浏览器标签页显示内容
const dataUrl = 'data:text/html;charset=utf-8,' + encodeURIComponent(content)
GM_openInTab(dataUrl)
} catch (e) {
alert('解析 JSON 文件失败:' + e.message)
}
},
fail: (xhr) => {
alert('下载文件失败:' + xhr.status)
}
}
await GM_xhr({ ...GET })
}
//我是你爹啊
// 显示对话框
function showDialog(title, fileList, folderName) {
// 添加CSS样式
const style = document.createElement('style')
style.textContent = `
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 9998;
}
.dialog {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: #fff;
padding: 20px;
border-radius: 10px;
width: 80%;
max-height: 80%;
overflow-y: auto;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
z-index: 9999;
}
.dialog-title {
margin-bottom: 20px;
}
.dialog-button {
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
margin-bottom: 20px;
}
.select-button {
background-color: #007BFF;
color: #fff;
}
.delete-button {
background-color: #dc3545;
color: #fff;
margin-left: 10px;
}
.select-all-button {
background-color: #28a745;
color: #fff;
margin-left: 10px;
}
.download-button {
background-color: #007BFF;
color: #fff;
margin-left: 10px;
}
.search-button {
background-color: #6c757d;
color: #fff;
margin-left: 10px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.close-x-button {
background-color: #6c757d;
color: red;
margin-left: 10px;
border: none;
border-radius: 5px;
cursor: pointer;
}
.search-button:hover {
background-color: #495057;
}
.close-button {
background-color: #007BFF;
color: #fff;
margin-top: 20px;
}
.file-list {
list-style-type: none;
padding: 0;
}
.file-action {
margin-right: 10px;
float: left;
color: blue;
cursor: pointer;
}
.file-actions-container {
float: right;
}
.clear-float {
clear: both;
}
.file-item {
border-bottom: 1px solid #ddd;
padding: 10px 0;
display: flex;
align-items: center;
}
.file-checkbox {
margin-right: 10px;
}
.file-link {
margin-right: 10px;
color: blue;
flex-grow: 1;
}
.file-actions {
display: flex;
gap: 10px;
}
.file-action {
color: #007BFF;
cursor: pointer;
}
.custom-hr {
height: 1px;
background-color: #007BFF;
margin: 20px 0;
}
.file-action:hover {
text-decoration: underline;
}
@media (max-width: 600px) {
.dialog-button {
padding: 5px 10px;
font-size: 12px;
margin-bottom: 10px;
}
.delete-button,
.download-button,
.select-all-button,
.close-x-button,
.search-button {
margin-left: 0;
}
.button-container {
right: 5px;
}
}
`
document.head.appendChild(style)
// 创建对话框
const dialog = document.createElement('div')
dialog.className = 'dialog'
// 创建遮罩
function close() {
document.body.removeChild(dialog)
}
// 标题
const titleElement = document.createElement('h1')
titleElement.innerHTML = title
titleElement.className = 'dialog-title'
dialog.appendChild(titleElement)
const buttonContainer = document.createElement('div')
const buttonConfigs = [
{ text: '选择列表', className: 'dialog-button select-button', onclick: toggleSelection },
{ text: '搜索列表', className: 'dialog-button search-button', onclick: toggleSearch },
{ text: '关闭窗口', className: 'dialog-button close-x-button', onclick: close },
{ text: '全部选中', className: 'dialog-button select-all-button', onclick: toggleSelectAll },
{ text: '删除选中', className: 'dialog-button delete-button', onclick: deleteSelectedFiles },
{ text: '下载选中', className: 'dialog-button download-button', onclick: downloadSelectedFiles }
// 可以添加更多按钮配置
]
let count = 0 // 计数器,用于控制显示状态
buttonConfigs.forEach(config => {
const button = document.createElement('button')
button.textContent = config.text
button.className = config.className
button.onclick = config.onclick
if (count < 3) {
button.style.display = 'inline-block' // 前两个按钮初始可见
} else {
button.style.display = 'none' // 后面的按钮初始隐藏
}
buttonContainer.appendChild(button)
count++ // 每创建一个按钮,计数器加一
})
// 将按钮容器添加到对话框中
dialog.appendChild(buttonContainer)
// 文件列表
const fileListContainer = document.createElement('ul')
fileListContainer.className = 'file-list'
fileListContainer.innerHTML = fileList
dialog.appendChild(fileListContainer)
// 添加到body
document.body.appendChild(dialog)
let selectButtonInitialTop = 0
let selectAllButton = document.querySelector('.select-all-button')
let searchButton = document.querySelector('.search-button')
let downloadSelectedButton = document.querySelector('.download-button')
let deleteSelectedButton = document.querySelector('.delete-button')
let selectButton = document.querySelector('.select-button')
let closeXButton = document.querySelector('.close-x-button')
let scrollTimeout = 0 // 定义全局变量存储定时器
// 记录选择按钮的初始位置
if (selectButton) {
selectButtonInitialTop = selectButton.offsetTop
}
// 监听对话框的滚动事件
dialog.addEventListener('scroll', function () {
clearTimeout(scrollTimeout)
const buttons = [
{ button: selectButton, offsetHeight: true },
{ button: selectAllButton, offsetHeight: true },
{ button: deleteSelectedButton, offsetHeight: true },
{ button: downloadSelectedButton, offsetHeight: true },
{ button: searchButton, offsetHeight: true },
{ button: closeXButton, offsetHeight: true }
// 添加更多按钮对象,如果有的话
]
scrollTimeout = setTimeout(() => {
if (buttons.every(buttonObj => buttonObj.button)) {
const dialogRect = dialog.getBoundingClientRect()
const fileListRect = fileListContainer.getBoundingClientRect()
const newButtonTopBase = Math.max(fileListRect.top, dialog.scrollTop)
let newButtonTop = newButtonTopBase
for (const { button, offsetHeight } of buttons) {
if (button) {
button.style.position = dialog.scrollTop === 0 ? 'static' : 'absolute'
button.style.top = `${newButtonTop}px`
button.style.right = '10px'
if (offsetHeight) {
newButtonTop += button.offsetHeight
}
}
}
}
}, 300) // 设置 300 毫秒的超时
})
// 获取所有复选框
const checkboxes = fileListContainer.querySelectorAll('input[type="checkbox"]')
// 初始隐藏复选框
checkboxes.forEach(checkbox => {
checkbox.style.display = 'none'
})
//选中全部
function toggleSelectAll() {
const checkboxes = document.querySelectorAll('input[name="fileCheckbox"]')
const allChecked = Array.from(checkboxes).every(checkbox => checkbox.checked)
checkboxes.forEach(checkbox => {
checkbox.checked = !allChecked
})
// 切换按钮文本和背景颜色
if (allChecked) {
selectAllButton.textContent = '全部选中'
selectAllButton.style.backgroundColor = '' // 恢复默认背景颜色
} else {
selectAllButton.textContent = '全部取消选中'
selectAllButton.style.backgroundColor = 'red' // 改为红色背景
}
}
//搜索
//---------------
function toggleSearch() {
if (searchButton.textContent === '搜索列表') {
// 如果当前是搜索状态,则进行搜索
const searchTerm = prompt('请输入搜索内容:') // 弹出输入框等待用户输入搜索内容
if (searchTerm !== null) { // 用户点击了确定按钮
filterFiles(searchTerm) // 调用过滤文件函数,传入搜索关键词
searchButton.textContent = '回到列表' // 将搜索按钮文本改为"Back"
}
} else {
// 如果当前是Back状态,则恢复初始文件列表
resetFileList()
}
}
function filterFiles(searchTerm) {
const files = Array.from(fileListContainer.children) // 获取文件列表的所有子元素(文件项)
let matchCount = 0 // 初始化匹配数量为 0
// 遍历文件列表,根据搜索关键词过滤显示符合条件的文件项
files.forEach(file => {
const fileName = file.querySelector('.file-link').textContent.toLowerCase() // 获取文件名并转换为小写
if (fileName.includes(searchTerm.toLowerCase())) {
file.style.display = '' // 匹配到的文件项显示
matchCount++ // 匹配数量加一
} else {
file.style.display = 'none' // 不匹配的文件项隐藏
}
})
// 更新文件数量标签内容
const fileCountLabel = document.getElementById('fileCountLabel')
if (fileCountLabel) {
fileCountLabel.textContent = '搜索数量: '
}
// 更新包裹文件数量的元素内容
const fileCountElement = document.querySelector('.file-count')
if (fileCountElement) {
fileCountElement.textContent = matchCount
}
}
// 恢复初始文件列表函数
function resetFileList() {
const files = Array.from(fileListContainer.children) // 获取文件列表的所有子元素(文件项)
files.forEach(file => {
file.style.display = '' // 显示所有文件项
})
searchButton.textContent = '搜索列表' // 恢复搜索按钮文本为"搜索"
// 更新文件数量标签内容为 "文件数量:"
const fileCountLabel = document.getElementById('fileCountLabel')
if (fileCountLabel) {
fileCountLabel.textContent = '文件数量:'
}
// 更新包裹文件数量的元素内容为当前文件数量
const fileCountElement = document.querySelector('.file-count')
if (fileCountElement) {
const currentFileCount = files.length // 获取当前文件数量
fileCountElement.textContent = currentFileCount
}
}
//搜索结束
//---------------
// 选择列表
function toggleSelection() {
checkboxes.forEach(checkbox => {
checkbox.style.display = checkbox.style.display === 'none' ? 'inline-block' : 'none'
checkbox.checked = false // 取消复选框的选中状态
})
// 切换显示“删除选中”和“下载选中”按钮
deleteSelectedButton.style.display = deleteSelectedButton.style.display === 'none' ? 'inline-block' : 'none'
downloadSelectedButton.style.display = downloadSelectedButton.style.display === 'none' ? 'inline-block' : 'none'
selectAllButton.style.display = selectAllButton.style.display === 'none' ? 'inline-block' : 'none'
selectButton.textContent = downloadSelectedButton.style.display === 'none' ? '选择列表' : '取消选择'
}
}
//选中下载
async function downloadSelectedFiles() {
// 获取所有选中的复选框
const checkboxes = document.querySelectorAll('input[name="fileCheckbox"]:checked')
if (checkboxes.length === 0) {
showModal('没有选中的文件', 2000)
return
}
// 创建一个 JSZip 实例
const zip = new JSZip()
try {
// 遍历所有选中的复选框
for (const checkbox of checkboxes) {
// 获取文件项信息
const fileItem = checkbox.closest('li')
const fileName = fileItem.querySelector('a[data-display-name]').dataset.displayName
// 调用 downloadFile 函数,将文件添加到压缩包中
await downloadFile(webdavfold, fileName, zip)
}
// 生成 ZIP 文件
const zipBlob = await zip.generateAsync({ type: 'blob' })
// 创建下载链接并触发下载
const zipUrl = URL.createObjectURL(zipBlob)
const a = document.createElement('a')
a.href = zipUrl
a.download = 'selected_files.zip'
a.click()
console.log('压缩包下载完成')
showModal('下载选中完成:', 2000)
} catch (error) {
console.error('下载选中文件失败:', error)
showModal('下载选中文件失败: ' + error.message, 2000)
}
}
//选中删除
function deleteSelectedFiles() {
// 获取所有选中的复选框
const selectedCheckboxes = document.querySelectorAll('input[name="fileCheckbox"]:checked')
if (selectedCheckboxes.length === 0) {
alert('没有选中文件')
return
}
// 弹出确认删除的提示框
const confirmDelete = confirm('确定要删除选中的文件吗?')
if (confirmDelete) {
deleteSelected = true
selectedCheckboxes.forEach(checkbox => {
const fileItem = checkbox.closest('li')
const deleteButton = fileItem.querySelector('a[onclick*="deleteFile"]')
// 调试日志
console.log('fileItem:', fileItem)
console.log('deleteButton:', deleteButton)
// 获取文件名
const fileName = fileItem.querySelector('a[data-display-name]').dataset.displayName
// 添加调试日志
console.log('Deleting file:', fileName)
// 触发删除按钮的点击事件
deleteButton.click()
//deleteFile(webdavfold,fileName);
// 将文件项标记为已删除
// markItemDeleted(fileItem);
})
deleteSelected = false
console.log('删除选中文件')
}
}
// 将 API 方法公开
return {
listFilesAndFolders,
updateConfig,
createFolder,
uploadFile,
renameFile,
deleteFile,
downloadFile,
downloadAndDisplayFile,
checkFolderExists
}
})()
// 将库暴露到全局作用域
unsafeWindow.WebDAVManager = WebDAVManager
// 示例用法:列出文件和文件夹,创建新文件夹,上传文件,删除文件
if (!url || !username || !password) {
console.error('WebDAV 配置更新失败:缺少 URL、用户名或密码')
return
}
WebDAVManager.updateConfig(webdavUrl, webdavUsername, webdavPassword)
WebDAVManager.createFolder(webdavfold)
WebDAVManager.checkFolderExists(webdavfold)
//WebDAVManager.uploadFile(webdavfold, 'nidie.txt', '这是 example.txt 的内容');
// WebDAVManager.deleteFile('Missav保存', 'example.txt');
})();