您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
左行书还需要更多测试,尚不稳定
// ==UserScript== // @name HyRead下载器 // @namespace https://qinlili.bid // @version 0.1 // @description 左行书还需要更多测试,尚不稳定 // @author 琴梨梨 // @match https://service.ebook.hyread.com.cn/ebookservice/epubreader/hyread/v3/reader.jsp // @icon https://nju.ebook.hyread.com.cn/Template/standard/images/hyread_icon.jpg // @grant none // @run-at document-end // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/jszip.min.js // @license MPLv2 // ==/UserScript== (async function() { 'use strict'; console.log("正在初始化喵~"); const dlFile = (link, name) => { let eleLink = document.createElement('a'); eleLink.download = name; eleLink.style.display = 'none'; eleLink.href = link; document.body.appendChild(eleLink); eleLink.click(); document.body.removeChild(eleLink); } function waitUI() { return new Promise(resolve => { const observer = new MutationObserver(function(){ if(document.getElementsByClassName("toolbaritem--flexible").length){ console.log("页面就绪了喵~走起~"); resolve(); observer.disconnect(); } }); observer.observe(document.documentElement, {childList: true,subtree: true }); }); }; await waitUI(); const originCreate=URL.createObjectURL; let imgTemp=[] var onPageChange = function () { }; function waitLoading() { return new Promise(resolve => { setTimeout(()=>{resolve()},10000); onPageChange = () => { resolve(); } }); } let num=0; const count=()=>{ num++; if(num==2){ onPageChange(); num=0; } } URL.createObjectURL=object=>{ console.log(object); imgTemp[imgTemp.length]=object; count(); return originCreate(object); }; const nextPage=()=>{ document.body.dispatchEvent(new KeyboardEvent("keyup",{ bubbles: true, cancelable: true, code: "ArrowRight", key: "ArrowRight", keyCode: 39 })) }; const nextPageLeft=()=>{ document.body.dispatchEvent(new KeyboardEvent("keyup",{ bubbles: true, cancelable: true, code: "ArrowLeft", key: "ArrowLeft", keyCode: 37 })) }; const sleep = delay => new Promise(resolve => setTimeout(resolve, delay)) //建立下载按钮 let dlBtn=document.createElement("div"); dlBtn.className="toolbaritem"; let dlIcon=document.createElement("img"); dlIcon.src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC4wMSIvPjxyZWN0IHg9IjYiIHk9IjYiIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PHBhdGggZD0iTTMyIDI4TDI0IDM2TDE2IDI4IiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PHBhdGggZD0iTTI0IDIwVjM1LjUiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48cGF0aCBkPSJNMTYgMTRIMzIiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4="; dlBtn.appendChild(dlIcon); document.getElementsByClassName("toolbaritem--flexible")[0].insertAdjacentElement('afterend',dlBtn); dlBtn.addEventListener("click",async ()=>{ console.log("要开始了哟~"); if(document.getElementsByClassName("pager__arrow pager__arrow--right pager__arrow--disabled").length){ //左翻页 for(;document.getElementsByClassName("pager__arrow pager__arrow--left pager__arrow--disabled").length==0;){ nextPageLeft(); await waitLoading(); } }else{ //右翻页 for(;document.getElementsByClassName("pager__arrow pager__arrow--right pager__arrow--disabled").length==0;){ nextPage(); await waitLoading(); } } console.log("在打包了喵~"); let zip = new JSZip(); let counter=0; imgTemp.forEach(imgBlob=>{ counter++ zip.file(counter+ ".jpg", imgBlob, { binary: true }) }); let zipFile=await zip.generateAsync({ type: "blob" }); dlFile(originCreate(zipFile),document.querySelector("#hyread-epub-reader > div > div.title-bar").innerText+".zip"); console.log("完成了喵~"); }) console.log("准备就绪了喵~"); })();