吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3780|回复: 48
收起左侧

[其他原创] 【JS脚本】免登录 免下载软件 只需浏览器 中小学电子教材下载

  [复制链接]
nctot 发表于 2024-2-28 17:51
本帖最后由 nctot 于 2024-3-5 13:14 编辑

首次发帖,如果违规,麻烦告知下今天意外看到中小学电子教材的下载软件, 大部分是 网盘,python,各种下载器.粗略不全面归纳了几个劣势
网盘:存在旧版本的问题
python:需要安装环境
下载器:担心报毒(其实是无毒)
以上3种的优势是 能批量.
所以,我自己写了一段JS脚本(实际上是配合chatGPT)
优势:
1.能下载最新版本
2.无需下载软件(只需要浏览器)
3.无需安装环境
4.能在线预览
劣势:
1.只能单个下载
【食用方法】
1.把脚本收藏为书签
2.打开对应的 电子教材列表
3.打开上述书签
4.列表旁边会显示【预览&下載
5.点击【预览&下載】即可
PS:如果当前页面不是"电子教材列表",会提示是否跳转到对应页面.
------------------------------------2024.3.1更新----------------------------------------------------------
更新内容:
1.修复部分书本无法显示 预览和下载
2.增加【隐藏版】入口
中小学.png
书签版:
[JavaScript] 纯文本查看 复制代码
javascript:void function(e){var t=function(e){function t(e,t){fetch(e).then(function(e){return e.blob()}).then(function(e){const a=URL.createObjectURL(e),n=document.createElement("a");n.style.display="none",document.body.appendChild(n),n.href=a,n.download=t||"document.pdf",n.click(),URL.revokeObjectURL(a),document.body.removeChild(n)})["catch"](function(e){console.error("下载失败:",e)})}window.location.href.indexOf("https://basic.smartedu.cn/tchMaterial")>=0%3F(e(".addjs").remove(),e("[class*=index-module_cover]").each(function(t){edition=e("[class*=style-module_label]:contains('版本')").parent().find("input:checked").parent().parent().text().trim();var a="";item=e(this),img=item.find("img"),src=img.attr("src"),src=src.split(".",5),src=src.join("."),a=src+".pkg/pdf.pdf",span=e("[class*=index-module_line]:eq("+t+") span");var n="【默认版:"+edition+"】"+span.text(),s="",c="【隐藏版:"+edition+"】"+span.text();s=a.indexOf("assets_document")>=0%3Fa.replace("assets_document","assets"):a.replace("assets","assets_document"),span.parent().parent().append("<div class='addjs'><br>默认版:<a target='_blank' href='"+a+"'>【预览】</a><a name='"+n+"'target='_blank' href='"+a+"'>【下载】</a><br>隐藏版:<a target='_blank' href='"+s+"'>【预览】</a><a name='"+c+"'target='_blank' href='"+s+"'>【下载】</a></div>")}),e(".addjs a").click(function(a){"【下载】"==e(this).text()%26%26(a.preventDefault(),t(e(this).attr("href"),e(this).attr("name"))),a.stopPropagation()})):confirm("该页面不是下载页面\n是否跳转到https://basic.smartedu.cn/tchMaterial")%26%26window.open("https://basic.smartedu.cn/tchMaterial")},a=e%26%26e.fn%26%26parseFloat(e.fn.jquery)>=1.7;if(a)t(e);else{var n=document.createElement("script");n.src="//lib.sinaapp.com/js/jquery/1.12.4/jquery-1.12.4.min.js",n.onload=n.onreadystatechange=function(){var e=this.readyState;e%26%26"loaded"!==e%26%26"complete"!==e||t(jQuery.noConflict())}}document.getElementsByTagName("head")[0].appendChild(n)}(window.jQuery);

猴子版:
[JavaScript] 纯文本查看 复制代码
// ==UserScript==
// @name         【免登录】中小学电子教材下载
// @namespace    https://www.52pojie.cn/
// @version      2024-02-29
// @description  try to take over the world!
// @author       nctot(参考爱飞的猫修改)
// @match        https://basic.smartedu.cn/tchMaterial*
// @icon         https://basic.smartedu.cn/favicon.ico
// @grant        none
// @require      https://lib.sinaapp.com/js/jquery/1.12.4/jquery-1.12.4.min.js
// ==/UserScript==
function download(){
    $(".addjs").remove();
    $("[class*=index-module_cover]").each(function(index){
        var edition=$("[class*=style-module_label]:contains('版本')").parent().find("input:checked").parent().parent().text().trim();
        var url="";
        var item=$(this);
        var img=item.find("img");
        var src=img.attr("src");
        src=src.split(".",5);
        src=src.join(".");
        url=src+".pkg/pdf.pdf";
        var span=$("[class*=index-module_line]:eq("+index+") span");
        var title="【默认版:"+edition+"】"+span.text();
        var url2="";
        var title2="【隐藏版:"+edition+"】"+span.text();;
        if(url.indexOf("assets_document")>=0){
           url2=url.replace("assets_document","assets");
        }else{
            url2=url.replace("assets","assets_document");
        }
        span.parent().parent().append("<div class='addjs'><br>默认版:<a target='_blank' href='"+url+"'>【预览】</a><a name='"+title+"'target='_blank' href='"+url+"'>【下载】</a><br>隐藏版:<a target='_blank' href='"+url2+"'>【预览】</a><a name='"+title2+"'target='_blank' href='"+url2+"'>【下载】</a></div>");
    });
    $(".addjs a").click(function(e){
        if($(this).text()=="【下载】"){
            e.preventDefault();
            downloadFile($(this).attr("href"),$(this).attr("name"));
        }
        e.stopPropagation();
    });
}
function downloadFile(fileUrl, customFileName) {
  fetch(fileUrl)
    .then(function(response) {
      return response.blob();
    })
    .then(function(blob) {
      const blobUrl = URL.createObjectURL(blob);

      const a = document.createElement('a');
      a.style.display = 'none';
      document.body.appendChild(a);
      a.href = blobUrl;
      a.download = customFileName || 'document.pdf';
      a.click();

      URL.revokeObjectURL(blobUrl);
      document.body.removeChild(a);
    })
    .catch(function(error) {
      console.error('下载失败:', error);
    });
}
// 定期扫描页面更改
setInterval(download, 500);
download();

----------------------------------------------------------------------------------------------
[JavaScript] 纯文本查看 复制代码
javascript:if(window.location.href.indexOf("https://basic.smartedu.cn/tchMaterial")>=0){document.querySelectorAll('.index-module_item_GfOnF').forEach((item)=>{const imageUrl=item.querySelector('.index-module_cover_DGT6P img').src;const idMatch=imageUrl.match(/assets\/([^.]+)\./);const extractedId=idMatch&&idMatch[1];if(extractedId){const replacedUrl=`https://r2-ndr.ykt.cbern.com.cn/edu_product/esp/assets_document/${extractedId}.pkg/pdf.pdf`;const newLink=document.createElement('a');newLink.href=replacedUrl;newLink.target='_blank';newLink.download=`download_${extractedId}.pdf`;newLink.innerText='【预览&下载】';item.insertAdjacentElement('beforebegin',newLink);}});}else{if(confirm("该页面不是下载页面\n是否跳转到https://basic.smartedu.cn/tchMaterial")){window.open("https://basic.smartedu.cn/tchMaterial");}}

对了,地址是从中小学教材下载这边扒拉来的, 没有去官网扒拉下载地址

免费评分

参与人数 7吾爱币 +12 热心值 +5 收起 理由
Apollo233 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
bestplay200 + 1 + 1 我很赞同!
wkdxz + 1 用心讨论,共获提升!
wiltzy + 1 + 1 谢谢@Thanks!
爱飞的猫 + 7 + 1 可以尝试改写成 User Script 哦!感谢发布原创作品,吾爱破解论坛因你更精.
mr88fang + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
georgeJzzz + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

爱飞的猫 发表于 2024-2-29 08:18
本帖最后由 爱飞的猫 于 2024-2-29 09:42 编辑

尝试改造成 UserScript 脚本,这样就能在浏览器加载对应页面时,自动执行该脚本。

作出了如下更改:

  1. 使用 [class*="..."] 来匹配,希望在网站升级后还能自动匹配到。
  2. 定期检查并插入下载地址,这样在网站进行筛选操作后也会自动添加需要的链接。
  3. 稍微改了改插入地点,现在会显示在书名下方。
  4. 1.1 新增 - 将预览和下载分开,可以带文件名下载了(虽然跨域,但服务器允许 fetch 来跨域读取资源)。
  5. 1.2 新增 - 地址现在从图片资源地址来拼接了。
// ==UserScript==
// @name        国家中小学智慧教育平台 - 免登录下载
// @namespace   www.52pojie.cn
// @match       https://basic.smartedu.cn/tchMaterial*
// @grant       none
// @version     1.2
// @author      nctot@52pojie.cn / 爱飞的猫改造
// @description 在不登录的情况下显示 PDF 预览和下载地址。
// ==/UserScript==

function downloadBook(linkDownload) {
  if (linkDownload.classList.contains('download-in-progress')) {
    return;
  }
  linkDownload.classList.add('download-in-progress');

  linkDownload.textContent = '下载中…';
  fetch(linkDownload.href).then(r => {
    if (r.status !== 200) {
      throw new Error(`资源状态码不是 200 (实际值 ${r.status})`);
    }
    return r.blob();
  }).then((pdfBlob) => {
    const blobUrl = URL.createObjectURL(pdfBlob);
    linkDownload.onclick = null;
    linkDownload.href = blobUrl;
    linkDownload.textContent = '【下载】';

    // 触发下载,然后将地址删除 - 因为页面是由框架管理的,避免内存泄漏。
    linkDownload.click();
    setTimeout(() => {
      linkDownload.href = '';
      URL.revokeObjectURL(blobUrl);
    });
  }).catch((err) => {
    linkDownload.textContent = `下载失败: ${err}`;
  }).finally(() => {
    linkDownload.classList.remove('download-in-progress');
  });
}

function injectDownloadUrl() {
  document.querySelectorAll('li[class*="index-module_item"]:not(.added)').forEach((item) => {
    const rAssets = /\/assets\/([^.]+)\.t\/.+$/;
    const imageUrl = item.querySelector('[class*="index-module_cover"] img').src;

    if (rAssets.test(imageUrl)) {
      const moduleLine = item.querySelector('div[class*="index-module_line"]');
      const bookName = moduleLine.textContent.trim();
      const bookUrl = imageUrl.replace(rAssets, '/assets_document/$1.pkg/pdf.pdf');

      const dlContainer = document.createElement('div');
      dlContainer.className = 'dl-preview';
      dlContainer.style.cssText = `
        cursor: alias;
        font-size: smaller;
      `;

      const linkPreview = document.createElement('a');
      linkPreview.href = bookUrl;
      linkPreview.target = '_blank';
      linkPreview.download = `${bookName}.pdf`;
      linkPreview.textContent = '【预览】';

      const linkDownload = document.createElement('a');
      linkDownload.className = 'dl-book';
      linkDownload.target = '_blank';
      linkDownload.href = bookUrl;
      linkDownload.download = `${bookName}.pdf`;
      linkDownload.textContent = '【下载】';

      dlContainer.appendChild(linkPreview);
      dlContainer.appendChild(linkDownload);

      moduleLine.insertAdjacentElement('afterend', dlContainer);
      item.classList.add('added');
    }
  });
}

// 不让应用程序接管我们的点击事件
document.addEventListener('click', (e) => {
  if (e.target.closest('.dl-preview')) {
    e.stopPropagation();
  }

  if (e.target.closest('a.dl-book:not([href^="blob"])')) {
    e.preventDefault();
    downloadBook(e.target.closest('a.dl-book'));
  }
}, { capture: true });

// 定期扫描页面更改
setInterval(injectDownloadUrl, 1500);
injectDownloadUrl();

书签版本(v1.2):

javascript:void(((v='1.2')=>{function downloadBook(e){e.classList.contains("download-in-progress")||(e.classList.add("download-in-progress"),e.textContent="下载中…",fetch(e.href).then((e=>{if(200!==e.status)throw new Error(`资源状态码不是 200 (实际值 ${e.status})`);return e.blob()})).then((t=>{const o=URL.createObjectURL(t);e.onclick=null,e.href=o,e.textContent="【下载】",e.click(),setTimeout((()=>{e.href="",URL.revokeObjectURL(o)}))})).catch((t=>{e.textContent=`下载失败: ${t}`})).finally((()=>{e.classList.remove("download-in-progress")})))}function injectDownloadUrl(){document.querySelectorAll('li[class*="index-module_item"]:not(.added)').forEach((e=>{const t=/\/assets\/([^.]+)\.t\/.+$/,o=e.querySelector('[class*="index-module_cover"] img').src;if(t.test(o)){const n=e.querySelector('div[class*="index-module_line"]'),l=n.textContent.trim(),s=o.replace(t,"/assets_document/$1.pkg/pdf.pdf"),a=document.createElement("div");a.className="dl-preview",a.style.cssText="\n        cursor: alias;\n        font-size: smaller;\n      ";const d=document.createElement("a");d.href=s,d.target="_blank",d.download=`${l}.pdf`,d.textContent="【预览】";const c=document.createElement("a");c.className="dl-book",c.target="_blank",c.href=s,c.download=`${l}.pdf`,c.textContent="【下载】",a.appendChild(d),a.appendChild(c),n.insertAdjacentElement("afterend",a),e.classList.add("added")}}))}document.addEventListener("click",(e=>{e.target.closest(".dl-preview")&&e.stopPropagation(),e.target.closest('a.dl-book:not([href^="blob"])')&&(e.preventDefault(),downloadBook(e.target.closest("a.dl-book")))}),{capture:!0}),setInterval(injectDownloadUrl,1500),injectDownloadUrl()})())

效果如下:

ss_课本_v1.1.png

免费评分

参与人数 4吾爱币 +5 热心值 +2 收起 理由
nctot + 1 + 1 您才是大佬,我是小菜鸡
youle999 + 1 + 1 谢谢@Thanks!希望能再改进完善一下。非常方便实用。
悲伤的异灵魂 + 2 谢谢@Thanks!
wkdxz + 1 热心回复!

查看全部评分

毋庸讳言 发表于 2024-2-28 19:26
提拉米苏子冉 发表于 2024-2-28 19:32
Pwaerm 发表于 2024-2-28 19:44

EEEE.png

任意收藏一个网址到收藏夹中,然后点击编辑,把代码粘贴到里面去(有部分浏览器不支持这种方式运行代码)
y294945022 发表于 2024-2-28 20:44
非常不错,我也是在学JS的。
南城 发表于 2024-2-28 20:54
部分列表课本不显示插件按钮,但确实使用方便,可以直接预览和下载
image.png
sai609 发表于 2024-2-28 20:54
小红书搜索,免登录,脚本在哪
wyesheng 发表于 2024-2-29 08:37
不懂就问,这个属于python的脚本类型嘛?
悲伤的异灵魂 发表于 2024-2-29 08:38
本帖最后由 悲伤的异灵魂 于 2024-2-29 08:53 编辑
爱飞的猫 发表于 2024-2-29 08:18
[md]尝试改造成 UserScript 脚本,这样就能在浏览器加载对应页面时,自动执行该脚本。

作出了如下更改: ...

大佬,脚本怎么用?

点评

[md]不是哦,需要先安装油猴脚本管理器扩展(例如常见的 TamperMonkey 或我个人更喜欢的[暴力猴(ViolentMonkey)](https://violentmonkey.github.io/)),然后将这个脚本添加进去。 如果你需要书签版本的话:  详情 回复 发表于 2024-2-29 08:47
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-1 03:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表