HyRead下载器

左行书还需要更多测试,尚不稳定

  1. // ==UserScript==
  2. // @name HyRead下载器
  3. // @namespace https://qinlili.bid
  4. // @version 0.1
  5. // @description 左行书还需要更多测试,尚不稳定
  6. // @author 琴梨梨
  7. // @match https://service.ebook.hyread.com.cn/ebookservice/epubreader/hyread/v3/reader.jsp
  8. // @icon https://nju.ebook.hyread.com.cn/Template/standard/images/hyread_icon.jpg
  9. // @grant none
  10. // @run-at document-end
  11. // @require https://cdn.jsdelivr.net/npm/jszip@3.6.0/dist/jszip.min.js
  12. // @license MPLv2
  13. // ==/UserScript==
  14.  
  15. (async function() {
  16. 'use strict';
  17.  
  18.  
  19. console.log("正在初始化喵~");
  20. const dlFile = (link, name) => {
  21. let eleLink = document.createElement('a');
  22. eleLink.download = name;
  23. eleLink.style.display = 'none';
  24. eleLink.href = link;
  25. document.body.appendChild(eleLink);
  26. eleLink.click();
  27. document.body.removeChild(eleLink);
  28. }
  29. function waitUI() {
  30. return new Promise(resolve => {
  31. const observer = new MutationObserver(function(){
  32. if(document.getElementsByClassName("toolbaritem--flexible").length){
  33. console.log("页面就绪了喵~走起~");
  34. resolve();
  35. observer.disconnect();
  36. }
  37. });
  38. observer.observe(document.documentElement, {childList: true,subtree: true });
  39. });
  40. };
  41. await waitUI();
  42. const originCreate=URL.createObjectURL;
  43. let imgTemp=[]
  44. var onPageChange = function () { };
  45. function waitLoading() {
  46. return new Promise(resolve => {
  47. setTimeout(()=>{resolve()},10000);
  48. onPageChange = () => {
  49. resolve();
  50. }
  51. });
  52. }
  53. let num=0;
  54. const count=()=>{
  55. num++;
  56. if(num==2){
  57. onPageChange();
  58. num=0;
  59. }
  60. }
  61. URL.createObjectURL=object=>{
  62. console.log(object);
  63. imgTemp[imgTemp.length]=object;
  64. count();
  65. return originCreate(object);
  66. };
  67. const nextPage=()=>{
  68. document.body.dispatchEvent(new KeyboardEvent("keyup",{
  69. bubbles: true,
  70. cancelable: true,
  71. code: "ArrowRight",
  72. key: "ArrowRight",
  73. keyCode: 39
  74. }))
  75. };
  76. const nextPageLeft=()=>{
  77. document.body.dispatchEvent(new KeyboardEvent("keyup",{
  78. bubbles: true,
  79. cancelable: true,
  80. code: "ArrowLeft",
  81. key: "ArrowLeft",
  82. keyCode: 37
  83. }))
  84. };
  85. const sleep = delay => new Promise(resolve => setTimeout(resolve, delay))
  86. //建立下载按钮
  87. let dlBtn=document.createElement("div");
  88. dlBtn.className="toolbaritem";
  89. let dlIcon=document.createElement("img");
  90. dlIcon.src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC4wMSIvPjxyZWN0IHg9IjYiIHk9IjYiIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PHBhdGggZD0iTTMyIDI4TDI0IDM2TDE2IDI4IiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PHBhdGggZD0iTTI0IDIwVjM1LjUiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48cGF0aCBkPSJNMTYgMTRIMzIiIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4=";
  91. dlBtn.appendChild(dlIcon);
  92. document.getElementsByClassName("toolbaritem--flexible")[0].insertAdjacentElement('afterend',dlBtn);
  93. dlBtn.addEventListener("click",async ()=>{
  94. console.log("要开始了哟~");
  95. if(document.getElementsByClassName("pager__arrow pager__arrow--right pager__arrow--disabled").length){
  96. //左翻页
  97. for(;document.getElementsByClassName("pager__arrow pager__arrow--left pager__arrow--disabled").length==0;){
  98. nextPageLeft();
  99. await waitLoading();
  100. }
  101. }else{
  102. //右翻页
  103. for(;document.getElementsByClassName("pager__arrow pager__arrow--right pager__arrow--disabled").length==0;){
  104. nextPage();
  105. await waitLoading();
  106. }
  107. }
  108. console.log("在打包了喵~");
  109. let zip = new JSZip();
  110. let counter=0;
  111. imgTemp.forEach(imgBlob=>{
  112. counter++
  113. zip.file(counter+ ".jpg", imgBlob, { binary: true })
  114. });
  115. let zipFile=await zip.generateAsync({ type: "blob" });
  116. dlFile(originCreate(zipFile),document.querySelector("#hyread-epub-reader > div > div.title-bar").innerText+".zip");
  117. console.log("完成了喵~");
  118. })
  119. console.log("准备就绪了喵~");
  120.  
  121. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址