“科学文库”是科学出版社数字图书全文检索、在线浏览和下载借阅的平台,拥有十分优质而且丰富的专业知识教材类书籍,包括专著、教材、图集、报告、工具书、大众科普等;涉及学科范围广:覆盖自然科学、工程与技术科学、人文与社会科学、医药科学、农业科学五大门类的所有一级学科,所有图书按标准学科和中图法两个体系进行分类;时间跨度大:收录资料出版时间从1951至今,电子版资料扫描清晰便于阅读。对于广大学生、科研群体来说,是查找资料的极好补充(顺便推荐一下Z-library)。
不过,科学文库在下载上有着很严格的管理,不仅要求在学校IP上登录才能下载文献,而且仅能下载caj格式,并且下载后还有时间上的限制,而在线浏览也有100页限制。这能忍?身为大学生自然应当学会科学地获取资料。经过一番查找和整合,我找到了一种较为方便,无需更改网页js代码,仅从网络数据中获取高清PDF格式文件下载地址的方法。首先,使用edge/chrome或其他一切支持F12打开开发人员工具的浏览器打开科学文库网页链接:科学文库 (sciencereading.cn)-https://book.sciencereading.cn/shop/main/Login/shopFrame.do,在搜索栏查找自己需要的资料,如输入“混沌系统与混沌电路”,即可找到杨晓松,李清都编写的这一本教材。点击“阅读”键,进入网页版阅读界面。然而此时我们仅能看到此文件的前100页,也无法进行文件的下载。于是我们按下F12键打开调试窗口,选择其中的“网络”窗口,并将筛选器选择为“全部”,之后刷新当前网络浏览器页面。在右侧的列表中,我们向下拉动,找到一个名为“add”的项目,查看标头可知这是一个POST请求报文;再点击查看“响应”,得到响应为:文章源自惟康前行-https://www.wkqx.com/115.html
{"result":"bdb198ce1d55412da0d90519d1e2dc79"}文章源自惟康前行-https://www.wkqx.com/115.html
这一条信息我们复制下载保存好,在之后的文件查找中会用到。之后我们在向下拉动,找到一条名为info?fileld=……的项目,是一个GET请求,并且得到其响应为:文章源自惟康前行-https://www.wkqx.com/115.html
{"plugins":1023,"assertUrl":"http://159.226.241.32:8093/asserts/bdb198ce1d55412da0d90519d1e2dc79/","userName":"Guest","fileid":"bdb198ce1d55412da0d90519d1e2dc79","fname":"B957802B54EBF4D4FB4F998D3FEF31013000.pdf"}文章源自惟康前行-https://www.wkqx.com/115.html
我们从中截取assertUrl的地址,并仅取其根地址http://159.226.241.32:8093/,在新页面进入。文章源自惟康前行-https://www.wkqx.com/115.html
此时我们来到了一个和之前的网页阅读界面能像的地方,展示给我们的是该页面的DEMO文档。可以在右上角看到一个云端符号,这是离线阅读功能。我们依旧使用F12并刷新网页,随后点击该云端符号,开启离线模式,电脑会自动下载当前DEMO文件。我们并不需要这个DEMO文件,这一步的作用是获得文件下载的直接地址。此时我们向下查找,可以在底部找到一个名为getDocumentbuffer的项目,在标头里就可以看到这是一个GET请求,其请求的URL为:文章源自惟康前行-https://www.wkqx.com/115.html
http://159.226.241.32:8093/api/file/159f60495bcc4cc5a6dec0aae46f5f14/getDocumentbuffer还记得我们之前在“add”里找到的那串字符bdb198ce1d55412da0d90519d1e2dc79吗?将它替换到上述URL里file/……/getDocumentbuffer之间,在新窗口打开这一条新的地址,成了!我们已经将自己想要下载的资料在浏览器自带的PDF阅读插件中打开,可以自由下载了,仔细看看,公式符号十分的清晰,阅读体验十分的美好。文章源自惟康前行-https://www.wkqx.com/115.html
---------------------------------------------------------------------------------------------------------一、接口科学文库作为高校阅读的电子书库,但是由于在线文档打开的速度太慢,获取里面的电子书成了首要问题,而且它提供下载的电子书,又需要CAJViewer阅读器才能打开,并不利于正常的阅读以及分享传播。文章源自惟康前行-https://www.wkqx.com/115.html
以前获取电子书靠的是图片拼接,这样太麻烦,正巧有网友分享了一个新的方法,通过调用在线阅读器的离线下载地址,让科学文库的电子书能够快捷下载。文章源自惟康前行-https://www.wkqx.com/115.html
简单来说,福昕的在线阅读器提供了一个离线下载地址文章源自惟康前行-https://www.wkqx.com/115.html
http://159.226.241.32:8093/api/file/***/getDocumentbuffer
其中***处需要我们通过一本电子书的文件ID(fileID)二、原理通过对网站进行抓包分析,发现其向网址为https://wkobwp.sciencereading.cn/api/file/add的网页发送post请求,返回的正是所需文件的ID。
通过对POST请求的分析,发现需要传入参数,其中file这个参数是最主要的,它就是科学文库给电子书命名的ID,通过上述所说的地址,获取了福昕阅读器的对该电子书命名的ID,实现了ID转换。
在JavaScript中,一般使用ajax进行跨域请求,获取返回的数据。
将ajax拿到的数据替换***,再访问就能够下载了。三、代码
/* * @name: 科学文库下载工具 * @Author: Harl02 * @version: 1.0 * @description: 帮助下载电子书 * @include: book.sciencereading.cn * @createTime: 2022-08-09-21:30 * @updateTime: 2022-08-09-21:30 */ /* 判断该网站是否执行脚本*/ var host = 'book.sciencereading.cn'; if (host == window.location.hostname){ //下载地址的前缀和后缀 var pre_url = 'http://159.226.241.32:8093/api/file/'; var suf_url = '/getDocumentbuffer'; //获取地址栏上的图书编号 var url = window.location.href; var id = url.match('(?<=id=).*'); //ajax获取id var ajax = null; if(window.XMLHttpRequest){ ajax = new XMLHttpRequest(); }else{ ajax = new ActiveXObject("Mincrosoft.XMLHTTP"); } ; ajax.open("POST","https://wkobwp.sciencereading.cn/api/file/add"); ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //构造参数 ajax.send('params=%7B%22params%22%3A%7B%22file%22%3A%22http%3A%2F%2F159.226.241.32%3A81%2F' + id + '.pdf%22%7D%7D'); ajax.onreadystatechange = function(){ if(ajax.readyState == 4&& ajax.status ==200){ //通过正则获取返回的id var fileid = (ajax.responseText).match('(?<="result":").*(?=")'); var target_url = pre_url + fileid + suf_url; //创建悬浮按钮及其监听事件 const d=document.createElement('div'); d.innerHTML='<div id="download">下载</div>'; d.style='position:fixed;right:15px;bottom:20%;color:#000000;background:#FFFFFF'; document.body.append(d); document.getElementById('download').onclick=()=>{ window.location.replace(target_url); }; }; }; };
四、总结原理就是通过在线阅读器的下载地址获取电子书,因为需要用post请求和配置参数,所以需要ajax跨域请求,完成ID的转换,实现了知道科学文库的电子书网址,可以知道电子书的下载地址。
广东省东莞市 1F
亲测无效!http://159.226.241.32:8093/api/file/5a980e3c47914785b8c1806306176a7b/getDocumentbuffer无法打开
湖北省 B1
@ 往年初夏 经测试,是因为foxit webpdf viewer的getDocumentbuffer无响应,即无法开启离线模式。解决方法未知