// ==UserScript== // @name 动漫之家 // @namespace http://tampermonkey.net/ // @version 2025.2.15 // @description 去除动漫之家日漫界面广告,改变阅读界面样式,增加目录功能,检测漫画是否屏蔽 // @author 52lcx // @match https://manhua.idmzj.com/* // @match https://www.idmzj.com/ // @match https://i.idmzj.com/ // @resource animate_css https://cdn.jsdelivr.net/npm/animate.css@4.1.1/animate.min.css // @resource element_css https://unpkg.com/element-ui@2.15.0/lib/theme-chalk/index.css // @require https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.min.js // @require https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js // @require https://cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.js // @require https://cdn.jsdelivr.net/npm/jquery_lazyload@1.9.3/jquery.lazyload.min.js // @require https://unpkg.com/element-ui@2.15.0/lib/index.js // @require https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js // @run-at document-start // @connect i.idmzj.com // @license GNU General Public License v3.0 or later // @grant GM_getResourceText // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_download // @grant unsafeWindow // @connect images.idmzj.com // @require https://scriptcat.org/lib/513/2.0.0/ElementGetter.js var uid=localStorage.getItem('userId') if(uid==null){ uid=118102698 } // ==/UserScript== //评论响应 // var url = 'https://manhua.idmzj.com/tpi/api/viewpoint/getViewpoint?type=0&type_id=45691&chapter_id=160985&more=1'; // fetch(url) // .then(response => response.json()) // .then(data => { // var list = data.data.list; // list.forEach(li => { // console.log(li.title); // }); // }) // .catch(error => { // console.error('获取数据时出错:', error); // }); // var oldFetch = fetch; // function hookFetch(url, init) { // // 检查 URL 是否包含 'viewpoint' // if (url.includes('viewpoint')) { // console.log('拦截的url:' + url); // var newUrl = 'https://copilot.microsoft.com/chats/VV7xfrGZvCwUevMofAn8S'; // // 使用修改后的 URL 和原始初始化选项来调用 fetch // return oldFetch.apply(this, [newUrl, init]); // } // // 处理其他 URL 的请求 // return oldFetch.apply(this, arguments); // } // // 替换全局 fetch 函数 // window.fetch = hookFetch; // // 发送测试请求以验证拦截是否生效 // fetch('https://manhua.idmzj.com/tpi/api/viewpoint/getViewpoint?type=0&type_id=70816&chapter_id=145535&more=1') // .then(response => response.text()) // .then(data => console.log('请求成功:', data)) // .catch(error => console.error('请求失败:', error)); // 跳转到日漫页面 if (window.location.href == 'https://www.idmzj.com/') { window.location.href = 'https://manhua.idmzj.com/' } //漫画加载时自动滚动到顶部 if(location.href.match(/\d+/)){ window.scrollTo(0,0)} //删除二维码 GM_addStyle('img[src="https://static.dmzj.com/public/images/app_tro_manhua.jpg"] { visibility: hidden !important; }'); GM_addStyle('a[href="http://www.dmzj.com/app/pc.html"] { pointer-events: none !important; cursor: default !important; }'); //去广告 var ad_list = ["#index_ad", "#ad_iphone", "#ad_code_close", "#ads_right", "#adpc", ".float_code", "#left_ads", ".hotrmbox","#top_ads", "#ads-manhuaright", "#ads-manhua", "#top_ad", "#conf_ad", ".header-box",, "#focus"]; for (var i = 0; i < ad_list.length; i++) { GM_addStyle(ad_list[i] + " {display:none !important;}"); } //日间模式 GM_addStyle(".mainNav,.header-box,.display_graybg,body,.dark_mode .newbody{background:#edecea !important;}") //夜间模式 GM_addStyle(".dark_mode .mainNav,.dark_mode .header-box,.dark_mode .display_graybg,.dark_mode body,.dark_mode .newbody{background:#212121 !important;}") //漫画双叶排布 GM_addStyle('.page_double .scrollbar-demo-item{justify-content:center;flex-direction: row-reverse;display: flex;flex-wrap: wrap;}') GM_addStyle('.page_double .scrollbar-demo-item img{height:100vh !important;}') elmGetter.each('.redhotl#prev_chapter', document, () => { var link = document.querySelector('.redhotl#prev_chapter'); if (link) { link.removeEventListener('click', caidan1); link.addEventListener('click', function () { $('html').removeClass('dark_mode') $('#info').remove() $('#sidebar').remove() document.exitFullscreen(); }) } }); elmGetter.each('.r1', document, () => { let uid=localStorage.getItem('userId') if(uid==null){ uid=118102698 } // 获取漫画名称+uid+comic_py+url var linkElements = document.getElementsByClassName("btn2"); if (linkElements.length > 0) { var linkElement = linkElements[0]; var href = linkElement.getAttribute('href'); var text = href.split('/')[1]; } var all_url = `https://manhua.idmzj.com/api/v1/comic2/comic/detail?uid=${uid}&comic_py=${text}`; var comic=document.querySelector(".comic_gd_li") if(comic) { console.log("存在") mulu(all_url)}else{ console.log("不存在") setTimeout(function(){ mulu(all_url)},5000)} }) elmGetter.each('.scrollbar-demo-item', document, () => { window.scrollTo(0, 0) // 删除图片链接 var manga_name= location.href.split('/')[3]// 获得了名字 var number = location.href.match(/\d+/)[0] // 获得了数字 localStorage.setItem(manga_name,number) var links = document.querySelectorAll('a[id]'); links.forEach(function (link) { link.removeAttribute("href"); }) var length = document.querySelector('.scrollbar-demo-item').querySelectorAll('a').length; uid=document.querySelector('.r1 a').getAttribute('href').match(/hisUid=(\d+)/)[1] console.log(uid) localStorage.setItem('userId',uid) caidan1(length) }); elmGetter.each('.cartoon_online_border', document, reply => { downloadAll() /// 浏览历史 //检测漫画是否观看过 var page_name=location.href.match(/\/([a-z]+)\//)[1] if(localStorage.getItem(page_name)){var k=localStorage.getItem(page_name) var list_=[] var currentMulu = document.querySelectorAll('.cartoon_online_border li a'); currentMulu.forEach(link => { var li=link.href var num=li.match(/\d+/)[0] list_.push(num) }); //找到index var index=list_.findIndex(num=>num===k) var real=currentMulu[index] if(real===null) return else{ var name=real.textContent var href=real.href } //创建链接 var a=document.createElement('a') a.href=href a.textContent=name //创建表格 var tr=document.createElement('tr') tr.innerHTML=`上次看到:` tr.querySelector('td').append(a) document.querySelector('.anim-main_list > table:nth-child(1) > tbody:nth-child(1)').append(tr)} //*****************************// var links = document.querySelectorAll('.cartoon_online_border a'); links.forEach(function (link) { link.addEventListener('click', function () { $('html').addClass('dark_mode'); }); }); }); //左右键切换章节 elmGetter.each('.display_right',document,()=>{ document.addEventListener('keydown', function(event) { if (event.key === 'ArrowLeft') { event.preventDefault(); document.querySelector(".display_left a").click(); } if (event.key === 'ArrowRight') { event.preventDefault(); document.querySelector(".display_right a").click(); } }); }) if (location.href.search(/\/\d+\.shtml/) >= 0) { $('html').addClass('dark_mode'); //预加载图片 $('img').lazyload(); } if ($.cookie('dark_mode') === undefined) { $.cookie('dark_mode', true, { expires: 999999, path: '/' }); } if ($.cookie('page_double') === undefined) { $.cookie('page_double', true, { expires: 999999, path: '/' }); } if ($.cookie('fullscreen') === undefined) { $.cookie('fullscreen', true, { expires: 999999, path: '/' }) } if ($.cookie('fanyemodeval') === undefined) { $.cookie('fanyemodeval', 2, { expires: 999999, path: '/' })} function caidan1(length) { //读取cookie var dark_mode = $.cookie('dark_mode') == 'true'; var page_double = $.cookie('page_double') == 'true'; var fullscreen = $.cookie('fullscreen') == 'false'; var fanye = $.cookie('fanyemodeval') == '2' //翻页模式 if (fanye) { $.cookie('fanyemodeval', 2, { expires: 999999, path: '/' }); } else { $.cookie('fanyemodeval', 1, { expires: 999999, path: '/' }); $('#info').remove() } var now_full = true; document.addEventListener("contextmenu", function(event) { if (now_full) { info_app.full=false document.documentElement.requestFullscreen(); now_full = false; } else { info_app.full=true event.preventDefault(); document.exitFullscreen(); now_full = true; } }); //暗夜模式 if (dark_mode) { $('html').addClass('dark_mode'); } else { $('html').removeClass('dark_mode'); } //双页显示 if (page_double) { $('html').addClass('page_double'); } else { $('html').removeClass('page_double'); } //获取当前页码 var imgs = $(".scrollbar-demo-item a img"); var last_img = imgs[length - 1] window.addEventListener('wheel', ID) function ID() { imgs.each(function (i, img) { // 判断鼠标位置是否在当前图片区域内 if (window.pageYOffset > img.offsetTop - 5 && window.pageYOffset < img.offsetTop + img.offsetHeight) { info_app.img_id = i + 1; if (pageYOffset > last_img.offsetTop + last_img.offsetHeight - 5) { info_app.img_id = length; } } }); }; setInterval(ID, 100); Vue.directive('highlight-scale',{ bind(el,binding,vnode){ el.addEventListener('mouseover',function(){ this.style.transform="scale(1.2)"; this.style.textShadow = "0 0 10px #fff"; }) el.addEventListener('mouseleave',function(){ this.style.transform="scale(1.0)"; this.style.textShadow="none" }) }}) function downloadZip(){ console.log('下载zip') var zip = new JSZip(); var imgs = document.querySelectorAll(".scrollbar-demo-item img"); var links = []; imgs.forEach(img => { links.push(img.getAttribute("src")); }); var text=document.head.querySelector("title").innerText.split(" ").slice(0,2).join(" ") links.forEach(function(link, index) { GM_xmlhttpRequest({ method: "GET", url: link, responseType: "arraybuffer", onload: function(response) { if (response.status == 200) { zip.file(index + 1 + ".jpg", response.response, { binary: true }); info_app.count++; console.log(info_app.count) if (info_app.count == links.length) { info_app.finish=false info_app.count=0 zip.generateAsync({ type: "blob" }).then(function(content) { var link = document.createElement('a'); link.download = text+'.zip'; link.href = window.URL.createObjectURL(content); link.click(); }); } } info_app.finish=true info_app.download=true }, onerror:function(){alert("下载失败,请重试🤗")} }); }); } async function download_pdf(){ console.log('you have clicked download_pdf') var download_name=document.head.querySelector("title").innerText.split(" ").slice(0,2).join(" ") var end = ''; const { jsPDF } = window.jspdf; var imgs = document.querySelectorAll('.scrollbar-demo-item img') let doc = new jsPDF('p', 'mm'); for (let index = 0; index < imgs.length; index++) { console.log(`${index}`) let img = imgs[index]; let imgData = await loadImage(img.src); end=img.src.split('.').pop() if (end === 'JPG') { end = 'JPEG'; } let imgElement = new Image(); imgElement.src = imgData; await new Promise(resolve => { imgElement.onload = resolve; }); var imgWidth = imgElement.width; var imgHeight = imgElement.height; let pageOrientation = imgWidth > imgHeight ? 'l' : 'p'; if (index === 0) { doc = new jsPDF(pageOrientation, 'mm', [imgWidth * 0.264583, imgHeight * 0.264583]); } else { doc.addPage([imgWidth * 0.264583, imgHeight * 0.264583], pageOrientation); } doc.addImage(imgData, end, 0, 0, imgWidth * 0.264583, imgHeight * 0.264583); if (index === imgs.length - 1) { doc.save(download_name+'.pdf'); } console.log(`完成了${index}个图片`) } function loadImage(url) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'GET', url: url, responseType: 'blob', headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', // 模拟浏览器 User-Agent 'Referer': 'https://images.idmzj.com/' }, onload: function(response) { var reader = new FileReader(); reader.onloadend = function() { resolve(reader.result); }; reader.onerror = reject; reader.readAsDataURL(response.response); }, onerror: function(error) { reject('请求图片失败: ' + error); } }); }); } } let info = `
`; let $info = $(info); $("body").append($info); let info_style = `#info { bottom: 2%; right: 2%; padding: 5px 5px; background: rgba(48,48,48,.7) !important; position: fixed; color: rgba(255,255,255,.7); border-radius: 3px; z-index: 99999; } .info_item { padding: 5px 0px; width: 120px; cursor: pointer; } .submenu { display: none; } #info_download:hover .submenu { display: block; } .submenu_item { padding: 5px 0px; } `; GM_addStyle(info_style); var info_app = new Vue({ el: '#info', data: { fanye: fanye, full: fullscreen, dark: dark_mode, page: page_double, show: 0, finish:true, img_id: 1, img_id_all: length, place:true, full: true, download:true, downloading:true, count:0 }, computed: { message_download:function(){ return this.finish ? (this.download ? "🌐下载本话" : "正在下载" + this.count) : "🥰马上完成"; }, message_place:function(){ return this.place?"🔽直达底部":"🔼返回顶部"}, message_fanye: function () { return this.fanye ? '↔左右翻页' : '↕上下翻页' }, message_full: function () { return this.full ? '🔒进入全屏' : '🔓退出全屏' }, message_mulu: function () { return ("📖返回目录") }, message_switch: function () { return this.dark ? '☀️日间模式' : '🌙夜间模式' }, message_page: function () { return this.page ? '1️⃣单页排布' : '2️⃣双页排布' }, message_count: function () { return this.img_id + '/' + length }, }, methods: { download_pdf:function(){ download_pdf() }, downloadZip:function(){ downloadZip() }, switch_place:function(){ this.place=!this.place if(!this.place){window.scrollTo(0, document.body.scrollHeight);} else{window.scrollTo(0,0)} }, switch_fanye: function () { this.fanye = !this.fanye if (this.fanye) { $.cookie('fanyemodeval', 2, { expires: 999999, path: '/' }); location.reload(); } else { location.reload(); $('#info').remove() $.cookie('fanyemodeval', 1, { expires: 999999, path: '/' }); } } , switch_full: function () { this.full = !this.full; if (!this.full) { document.documentElement.requestFullscreen(); } else { document.exitFullscreen(); } } , switch_mulu: function () { document.querySelector("#prev_chapter.redhotl").click() }, switch_night: function () { this.dark = !this.dark $.cookie('dark_mode', this.dark, { expires: 999999, path: '/' }); if (this.dark) { $('html').addClass('dark_mode'); } else { $('html').removeClass('dark_mode'); } }, switch_page: function () { this.page = !this.page $.cookie('page_double', this.page, { expires: 999999, path: '/' }); if (this.page) { $('html').addClass('page_double'); } else { $('html').removeClass('page_double'); } }, } }) } function mulu(all_url) { //修改element-ui样式 GM_addStyle('.el-menu{border-right:0px !important;}') GM_addStyle('.el-drawer__wrapper{width:20%;}') GM_addStyle('.el-drawer{background:transparent !important;}') GM_addStyle('.el-drawer__body{background:rgba(0,0,0,.8) !important;overflow-y: auto}') const animate_css = GM_getResourceText("animate_css"); const element_css = GM_getResourceText("element_css"); GM_addStyle(animate_css); GM_addStyle(element_css); GM_addStyle(':root{--animate-duration:500ms;}'); let ch_id = 0; var items = []; //修改滚动条样式 GM_addStyle('::-webkit-scrollbar {width: 4px;height: 0px;}') GM_addStyle('::-webkit-scrollbar-thumb {background-color: rgb(48,48,48);border-radius: 2px;}') // 添加侧边目录栏 let sidebar = ` `; var isloading =false let $sidebar = $(sidebar); $("body").append($sidebar); var sidebar_app = new Vue({ el: '#sidebar', data: { drawer: false, size: '80%', modal: false, direction: 'ltr', items: items, select: -1, index: 0 }, methods: { handleSelect(key) { var selectedChapter = this.items[key]; var chapterLink = document.querySelector(".btn2").href + selectedChapter.id + '.shtml#1'; location.href = chapterLink; this.select = key; GM_addStyle('.el-menu>li:nth-child(' + (parseInt(this.select) + 1) + '){background:rgba(255,165,0,.5) !important}'); }, handleOpen() { var chapter_all = null; if(isloading){ move() return} open() function open() { if (chapter_all) { processChapterList(chapter_all); } else if(!isloading){ isloading=true // 加载目录数据 $.ajax({ url: all_url, success: function (data) { chapter_all = data.data.comicInfo.chapterList; processChapterList(chapter_all); }, }); } } function processChapterList(chapterList) { chapterList.forEach(function (chapter) { chapter.data.forEach(function (chapterData) { items.unshift({ title: chapterData.chapter_title, id: chapterData.chapter_id, }); }); }); move() } function move(){ if(!items){return} var old_url="" var new_url=location.href if(old_url==new_url){ sidebar_app.index = index; for (let i = 1; i <= items.length; i++) { GM_addStyle('.el-menu>li:nth-child(' + i + '){background:transparent !important}');} GM_addStyle('.el-menu>li:nth-child(' + (index + 1) + '){background:rgba(255,165,0,.5) !important}');scroll(index);} else { const url = location.href const match = url.match(/\/(\d+)\.shtml/); if (match && match[1]) { const number = match[1]; var index = items.findIndex(item => item.id == number); if (index != -1) { sidebar_app.index = index; for (let i = 1; i <= items.length; i++) { GM_addStyle('.el-menu>li:nth-child(' + i + '){background:transparent !important}'); } GM_addStyle('.el-menu>li:nth-child(' + (index + 1) + '){background:rgba(255,165,0,.5) !important}'); } scroll(index); }}} function scroll(index) { setTimeout(function(){ $('.el-drawer__body').animate({scrollTop:0}, 0); $('.el-drawer__body').animate({scrollTop:$('.el-menu>li:nth-child('+(index-1)+')').offset().top-$('.el-drawer__body').offset().top}, 100); },0) } } , }, }); } function downloadAll(){ var selectButton = document.createElement('button'); selectButton.textContent = '下载'; selectButton.setAttribute('id', 'selectButton'); var addPlace = document.querySelector('.odd_anim_title_m'); if(addPlace===null) {return} addPlace.appendChild(selectButton); selectButton.addEventListener('click', function() { document.querySelector('#selectButton').remove(); var originUrls = []; var all_url = document.querySelectorAll('.cartoon_online_border li a'); all_url.forEach(url => { originUrls.push(url); var checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.setAttribute('class', 'checkbox'); var label = document.createElement('label'); label.appendChild(checkbox); label.appendChild(document.createTextNode(url.textContent)); url.parentNode.replaceChild(label, url); }); var now_all_url = document.querySelectorAll('.cartoon_online_border li label'); // 取消下载和全选下载 var selectAllButton = document.createElement('button'); selectAllButton.textContent = '全选'; selectAllButton.style.marginRight = '10px' selectAllButton.setAttribute('id', 'selectAllButton'); selectAllButton.addEventListener('click', function() { now_all_url.forEach(label => { var checkboxes = label.querySelectorAll('input[type="checkbox"]'); checkboxes.forEach(checkbox => { checkbox.checked = true; }); }); }); addPlace.appendChild(selectAllButton); var escButton = document.createElement('button'); escButton.textContent = '取消'; escButton.setAttribute('id', 'escButton'); escButton.style.marginRight = '10px' escButton.addEventListener('click', function() { now_all_url.forEach((item, index) => { item.parentNode.replaceChild(originUrls[index], item); }); document.querySelector('#do_button').remove(); document.querySelector('#selectAllButton').remove(); document.querySelector('#escButton').remove(); addPlace.appendChild(selectButton); }); addPlace.appendChild(escButton); var do_button = document.createElement('button'); do_button.textContent = '确定下载'; do_button.setAttribute('id', 'do_button'); do_button.style.marginRight = '10px' addPlace.appendChild(do_button); do_button.addEventListener('click', async function() { addPlace.appendChild(selectButton); var selectLinks = []; now_all_url.forEach((item, index) => { var checkbox = item.querySelector('input[type="checkbox"]'); if (checkbox && checkbox.checked) { selectLinks.push(originUrls[index]); } }); now_all_url.forEach((item, index) => { item.parentNode.replaceChild(originUrls[index], item); }); document.querySelector('#do_button').remove(); document.querySelector('#escButton').remove(); document.querySelector('#selectAllButton').remove(); var uidUrl = document.querySelector('.impunity a').href; var uid = uidUrl.match(/hisUid=(\d+)/)[1]; var comic_py = document.querySelector('.anim_title_text a').href.split('/').pop(); localStorage.setItem('userId',uid) // 应该都是一样的 // 下载逻辑 var realUrl = []; selectLinks.forEach(link => { var chapterID = link.href.match(/\/(\d+)\.shtml/)[1]; var detail_url = `https://manhua.idmzj.com/api/v1/comic2/chapter/detail?uid=${uid}&comic_py=${comic_py}&chapter_id=${chapterID}`; realUrl.push(detail_url); }); // 用于获取总页数 var pageNum = 0; var count = 0; // 创建一个包含所有fetch请求的数组 var pageNumPromises = realUrl.map(url => { return fetch(url) .then(response => response.json()) .then(json => { var pageUrls = json.data.chapterInfo.page_url; pageNum += pageUrls.length; // 累计页数 }); }); // 等待所有fetch请求完成,然后输出总页数 Promise.all(pageNumPromises).then(() => { console.log('总页数:', pageNum); // 创建一个下载进度栏 var progressContainer = document.createElement('div'); progressContainer.id = 'progress-container'; progressContainer.style.position = 'fixed'; progressContainer.style.top = '10px'; progressContainer.style.right = '10px'; progressContainer.style.backgroundColor = 'rgba(0, 0, 0, 0.7)'; progressContainer.style.padding = '10px'; progressContainer.style.borderRadius = '5px'; progressContainer.style.color = 'white'; progressContainer.style.display = 'flex'; progressContainer.style.alignItems = 'center'; progressContainer.style.zIndex = '1000'; var progressText = document.createElement('span'); progressText.id = 'progress-text'; progressText.style.marginRight = '10px'; var progressBar = document.createElement('progress'); progressBar.id = 'progress-bar'; progressBar.style.width = '200px'; // 设置进度条的初始属性 progressBar.value = 0; progressBar.max = 1; progressText.textContent = '下载进度: 0%'; // 将进度条和文本添加到容器中 progressContainer.appendChild(progressText); progressContainer.appendChild(progressBar); document.body.appendChild(progressContainer); var count = 0; function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } function fetchUrl(url, zip) { return fetch(url) .then(response => response.json()) .then(json => { var chapterName = json.data.chapterInfo.title; var pageUrls = json.data.chapterInfo.page_url; var folder = zip.folder(chapterName); // 创建一个文件夹 return Promise.all(pageUrls.map((link, index) => { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'GET', url: link, responseType: 'blob', headers: { 'Referer': 'https://images.idmzj.com/', }, onload: function(response) { if (response.status === 200) { var end = link.split('.').pop(); var img_name = `${index + 1}.${end}`; folder.file(img_name, response.response, { binary: true }); // 将图片放入文件夹 count++; // 更新已下载的图片数 progressBar.value = count / pageNum; // 更新进度条 progressText.textContent = `下载进度: ${Math.floor(progressBar.value * 100)}%`; resolve(); } else { reject(new Error(`图片下载失败,状态码:${response.status}`)); } }, onerror: function(error) { console.error('图片请求失败:', error); reject(error); } }); }); })); }); } async function processUrls(urls) { const finalZip = new JSZip(); for (let url of urls) { await fetchUrl(url, finalZip); // 执行每个URL的下载逻辑,并将图片放入对应的文件夹 } progressText.textContent ='开始生成zip文件中......😀' return finalZip.generateAsync({ type: 'blob' },function(progress){ progressBar.value = progress.percent/100; // 更新进度条 progressText.textContent = `压缩进度: ${Math.floor(progress.percent)}%`; }); // 最终生成ZIP文件 } processUrls(realUrl).then(content => { progressText.textContent ='天不负有心人,快了......' var link = document.createElement('a'); link.href = URL.createObjectURL(content); var name = document.querySelector('.anim_title_text') if(name==null){name='没找到名字'} else{name=name.textContent;} link.download = name + '.zip'; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(link.href); progressBar.value = 1; // 下载完成,进度条设置为100% document.querySelector('#progress-container').remove(); console.log('所有章节的ZIP文件已生成并下载'); }).catch(err => { alert('下载失败:' + err.message); document.querySelector('#progress-container').remove(); console.error('生成ZIP文件时出错: ', err); }); }); }); }); } //检测漫画是否屏蔽 // var last ="" // function look(uid){ // if(uid==null){return} // var titles = []; // var links = document.querySelectorAll(".pictextst"); // if(links.length==0){return} // var now=links[links.length - 1].textContent.trim(); // links.forEach(function(link) { // titles.push(link.textContent); // }); // if(now==last){return}else{ // remove_txt() // } // last=now // var move=false // window.scrollTo(0,0) // var links1 = document.querySelectorAll(".picborder a"); // links1.forEach((link1) => { // var text = link1.getAttribute("href").split("/"); // var look_url = `https://manhua.idmzj.com/api/v1/comic2/comic/detail?uid=${uid}&comic_py=${text[1]}`; // fetch(look_url) // .then((response) => response.json()) // .then((jsonData) => { // var list = jsonData.data.comicInfo; // if (list.chapterList === null) { // var index = titles.findIndex(title => title === list.title); // if (index !== -1) { // add_txt(index); // 添加标记 // } // } // }); // }); // } // function add_txt(index) { // var element = document.querySelectorAll(".numfont")[index]; // if (!element.nextSibling) { // var span = document.createElement("span"); // span.appendChild(document.createTextNode("已被屏蔽")); // span.className = "add_txt"; // span.style.textAlign = "right"; // span.style.marginRight = "10px"; // span.style.color = "#000"; // element.parentNode.insertBefore(span, element.nextSibling); // } // } // function remove_txt(){ // var spans=document.querySelectorAll(".add_txt") // spans.forEach(span=>{span.remove()}) // } // let page=1 // elmGetter.each(".mhupdate", document, () => { // window.addEventListener('scroll', () => { // let scrollTop = window.pageYOffset || document.documentElement.scrollTop; // let windowHeight = window.innerHeight; // let documentHeight = document.documentElement.scrollHeight // if (scrollTop + windowHeight >= documentHeight - 150) { // page=page+1 // bufanye(page) // let documentHeight = document.documentElement.scrollHeight // console.log('开始第'+page+'页') // } // }); // }); // // 漫画更新无缝翻页&&检测屏蔽 // //翻页url https://manhua.idmzj.com/api/v1/comic2/update_list?&uid=114835565&page=1&size=40 // //翻页url https://manhua.idmzj.com/api/v1/comic2/update_list?&uid=114835565&page=1&size=40 // async function bufanye(i){ // let uid = 114835565; // let time = new Date().getTime(); // let updateurl = `https://manhua.idmzj.com/api/v1/comic2/update_list?&uid=${uid}&page=${i}&size=40&refreshTime=${time}`; // fetch(updateurl) // .then(re => re.json()) // .then(data => { // let comicList = data.data.comicList; // let updatedComicList = comicList.map(comic => { // return { // Href: `/${comic.comic_py}/`, // picborderTitle: comic.name, // cover: comic.cover, // author: comic.authors, // type: comic.types, // pictextliHref: `/${comic.comic_py}/${comic.last_update_chapter_id}.shtml#1`, // last_update_chapter_name: comic.last_update_chapter_name, // name: comic.name, // status: comic.status, // last_updatetime: comic.last_updatetime, // comic_py: `https://manhua.idmzj.com/api/v1/comic2/comic/detail?uid=${uid}&comic_py=${comic.comic_py}` // }; // }); // let updateOn = document.querySelector('.update_con'); // if (updateOn) { // let update = updateOn.cloneNode(true); // let boxdiv1s = update.querySelectorAll('.boxdiv1'); // boxdiv1s.forEach((boxdiv1, index) => { // let comic = updatedComicList[index]; // if (comic) { // let picborderA = boxdiv1.querySelector('.picborder a'); // picborderA.setAttribute('href', comic.Href); // picborderA.setAttribute('title', comic.name); // let picborderImg = boxdiv1.querySelector('.picborder a img'); // picborderImg.setAttribute('src', comic.cover); // fetch(comic.comic_py) // .then(re => re.json()) // .then(data => { // let canRead=data.data.comicInfo.canRead // let pic = document.createElement('div'); // pic.innerHTML = ` //
// //
// `; // let originalPictext = boxdiv1.querySelector('.pictext'); // originalPictext.replaceWith(pic); // }) // } // }); // updateOn.appendChild(update) // } // }) // } let run=true let page=1 GM_addStyle('.el-pagination{display:none !important}') elmGetter.each(".mhupdate", document, () => { if(page==1){ document.querySelectorAll('.pictextst').forEach(content => { let text=content.getAttribute('href').split('/') console.log(text) let href = `https://manhua.idmzj.com/api/v1/comic2/comic/detail?uid=${uid}&comic_py=${text[1]}` fetch(href) .then(re => re.json()) .then(data => { let canRead = data.data.comicInfo.canRead; content.setAttribute('style', canRead ? '' : 'color: #cccccc;'); }) .catch(error => { console.error('Error:', error); }); }); } window.addEventListener('scroll', () => { if (!run) return; let scrollTop = window.pageYOffset || document.documentElement.scrollTop; let windowHeight = window.innerHeight; let documentHeight = document.documentElement.scrollHeight; let temp = documentHeight; if (scrollTop + windowHeight >= documentHeight - 150) { run = false; // 设置 run 为 false,防止重复执行 page = page + 1; bufanye(page).then(() => { run = true; // 加载完成后重新设置 run 为 true console.log('开始第' + page + '页'); }).catch(error => { console.error('Error:', error); run = true; // 确保在出现错误时仍能重置 run 状态 }); } }); // 漫画更新无缝翻页&&检测屏蔽 async function bufanye(i) { let time = new Date().getTime(); let updateurl = `https://manhua.idmzj.com/api/v1/comic2/update_list?&uid=${uid}&page=${i}&size=40&refreshTime=${time}`; console.log(updateurl); try { let response = await fetch(updateurl); let data = await response.json(); let comicList = data.data.comicList; let updatedComicList = comicList.map(comic => { let timestamp = comic.last_updatetime * 1000; // 将秒数转换为毫秒 let date = new Date(timestamp); let year = date.getFullYear(); let month = (date.getMonth() + 1).toString().padStart(2, '0'); let day = date.getDate().toString().padStart(2, '0'); let hours = date.getHours().toString().padStart(2, '0'); let minutes = date.getMinutes().toString().padStart(2, '0'); // 将日期和时间格式化为 "YYYY-MM-DD HH:MM" let formattedDate = `${year}-${month}-${day} ${hours}:${minutes}`; return { Href: `/${comic.comic_py}/`, picborderTitle: comic.name, cover: comic.cover, author: comic.authors, type: comic.types, pictextliHref: `/${comic.comic_py}/${comic.last_update_chapter_id}.shtml#1`, last_update_chapter_name: comic.last_update_chapter_name, name: comic.name, status: comic.status, last_updatetime: formattedDate, comic_py: `https://manhua.idmzj.com/api/v1/comic2/comic/detail?uid=${uid}&comic_py=${comic.comic_py}` }; }); console.log(updatedComicList) let updateOn = document.querySelector('.update_con'); if (updateOn) { let update = updateOn.cloneNode(true); let boxdiv1s = Array.from(update.querySelectorAll('.boxdiv1')); // 将 NodeList 转换为数组 // 使用 forEach 并返回 Promise.all 以确保所有异步操作完成后再继续 await Promise.all(boxdiv1s.map(async (boxdiv1, index) => { let comic = updatedComicList[index]; if (comic) { let picborderA = boxdiv1.querySelector('.picborder a'); picborderA.setAttribute('href', comic.Href); picborderA.setAttribute('title', comic.name); let picborderImg = boxdiv1.querySelector('.picborder a img'); picborderImg.setAttribute('src', comic.cover); let comicDetailResponse = await fetch(comic.comic_py); let comicDetailData = await comicDetailResponse.json(); let canRead = comicDetailData.data.comicInfo.canRead; let pic = document.createElement('div'); pic.innerHTML = `
`; let originalPictext = boxdiv1.querySelector('.pictext'); originalPictext.replaceWith(pic); } })); let mhupdate=document.querySelector('.mhupdate') mhupdate.appendChild(update) } console.log('我执行了'); console.log(document.documentElement.scrollHeight); } catch (error) { console.error('Error:', error); } } } )