原因:我用zotero管理文献,在cnki查到的文献,可以通过浏览器插件直接导入。因为cnki收费,所以下载只能到广州图书馆提供的页面下载。但是zotero的浏览器插件不支持广州图书馆资源页面导入。
需求:在cnki页面完成查询和导入,同时可以下载文件。
实现方法:利用Tampermonkey插件的GM_xmlhttpRequest功能,打开cnki文献页面的同时,后台打开对应的广图资源页面,提取其中的下载链接,将cnki页面中的下载链接替换为广图资源下载链接。
2020.01.31更新:
1. 广州图书馆的域名改为org.cn
2. 新的下载资源中有相对链接
3. 修改了正则表达式
2020.02.01更新:
1. 解决了弹出两个网页的问题
2. 现在可以针对https网址
已知问题:刷新过多会被阻止下载,需要到广州图书馆网页
http://www.gzlib.org.cn验证。
- // ==UserScript==
- // @name 广州图书馆下载CNKI V0.3
- // @namespace http://tampermonkey.net/
- // @version 0.3
- // @description try to take over the world!
- // @author Leon_Yan
- // @match http://kns.cnki.net/*
- // @match https://kns.cnki.net/*
- // @exclude http://kns.cnki.net/kns/brief/*
- // @exclude https://kns.cnki.net/kns/brief/*
- // @exclude http://kns.cnki.net/*/frame/*
- // @exclude https://kns.cnki.net/*/frame/*
- // @connect gzlib.org.cn
- // @grant GM_openInTab
- // @grant GM_xmlhttpRequest
- // ==/UserScript==
- var cnkiUrl = "http://kns.cnki.net/";
- var cnkiSUrl = "https://kns.cnki.net/";
- var gzlibcnkiUrl = "http://sso.gzlib.org.cn/interlibSSO/goto/75/=jmr9bmjh9mds/";
- //var rDownload = /<div class="dllink" id="DownLoadParts">([\s\S]*)<\/div>[\s\S]*<div class="dllink-down">/;
- var rDownload = /<div class="dllink" id="DownLoadParts">([\s\S]*)<div class="dllink-down">/;
- (function() {
- 'use strict';
- // 替换cnki网址为广州图书馆资源网址
- var tURL = document.URL;
- tURL = tURL.replace(cnkiUrl, gzlibcnkiUrl); //针对http网址
- tURL = tURL.replace(cnkiSUrl, gzlibcnkiUrl); //针对https网址
- GM_xmlhttpRequest({ //打开广州图书馆资源页面
- method: "GET",
- url: tURL,
- onload: function(response) {
- if(response.finalUrl.match("login.gzlib")){//如果没有登录,则弹出登录界面
- GM_openInTab(response.finalUrl);
- }
- else{
- var gzlibdl = response.responseText.match(rDownload)[1]; //查找广州图书馆资源页面下载链接
- gzlibdl = gzlibdl.replace('../../',gzlibcnkiUrl); //相对链接修改为绝对链接
- document.getElementById("DownLoadParts").innerHTML = gzlibdl; //替换cnki页面的下载链接
- }
- },
- onerror: function(response) {
- alert("对不起,脚本出现错误,请联系作者。");
- }
- });
- })();
复制代码