为了保险,将脚本完整内容复制在此:
// ==UserScript==
// @id CNKI-PDF-Special
// @name CNKI 中国知网 PDF 全文下载(特制版)
// @version 1.25
// @namespace http://yuelong.info
// @author YUE Long
// @updateURL https://userscripts.org/scripts/source/164338.meta.js
// @description ① 点击 CNKI 检索结果界面中的下载按钮可以直接下载 PDF 格式文献;
// ② 在硕士/博士学位论文详细信息界面添加“PDF下载”按钮。
// ※ 特制版功能:在检索页面中的硕士/博士论文默认下载 CAJ 文件。
// @include http://*.cnki.net/*
// @include http://*.cnki.net.*/*
// @run-at document-idle
// ==/UserScript==
var allLis, thisLi, newLi, aPDF, allLinks, thisLink, pageType;
pageType = true;
allLinks = document.evaluate(
'//a[@href]',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
allLis = document.evaluate(
"//li[@class]",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
if (allLis) {
for (var i = 0; i < allLis.snapshotLength; i++) {
thisLi = allLis.snapshotItem(i);
if (thisLi.getAttribute("class").indexOf("readol") !== -1) {
pageType = false;
newLi = document.createElement('li');
newLi.setAttribute("class","pdf");
aPDF = '<a target="_blank" href="' +
thisLi.firstChild.href.replace("&dflag=readonline","&dflag=pdfdown") +
'">PDF下载</a>';
newLi.innerHTML=aPDF;
thisLi.parentNode.insertBefore(newLi, thisLi.nextSibling);
}
if (thisLi.getAttribute("class").indexOf("cajNew") !== -1) {
pageType = false;
}
}
}
if (pageType) {
for (var i = 0; i < allLinks.snapshotLength; i++) {
thisLink = allLinks.snapshotItem(i);
if (thisLink.href &&
thisLink.href.indexOf("download.aspx?filename=") != -1 &&
thisLink.href.indexOf("&dflag") == -1 &&
thisLink.href.indexOf("=CMFD") == -1 &&
thisLink.href.indexOf("=CDFD") == -1
) {
thisLink.href = thisLink.href + "&dflag=pdfdown";
}
if (thisLink.href &&
thisLink.href.indexOf("download.aspx?filename=") != -1 &&
thisLink.href.indexOf("&dflag") == -1 &&
(thisLink.href.indexOf("=CMFD") !== -1 || thisLink.href.indexOf("=CDFD") !== -1 )
) {
thisLink.href = thisLink.href + "&dflag=nhdown";
}
}
}
把这段代码添加到 Tampermonkey 中,再访问知网,点开一个学位论文的页面,就能从上面看到“PDF 下载”的按钮了。就像这样:
学位论文可以下载 PDF 格式
关于 Userscript
UserScript 就是一段 JavaScript 代码,当一个页面加载完成之后,这段 JavaScript 就会自动执行,效果就和在调试工具的终端里执行 JavaScript 一样。因此,Userscript 能够访问操作 DOM 节点,能使用页面引用的所有库。
UserScript 通常由浏览器的插件来管理,例如 FireFox 有 Greasemonkey,Webkit/Blink 内核的浏览器则有 Tampermonkey,而且这些工具支持的 UserScripts 接口相同,同样的 UserScript 在不同的管理插件下执行效果相同。
至于代码开头的那一段注释,其实就是这个 Userscript 的元数据,其中描述了代码的名称、版本、作者,以及作用于哪些网页等等。
注:这里是这段带码的原始出处。
这个脚本可以在能够下载CAJ文件的情况下,提供PDF文件的下载链接,这下不用wine CAJViewer了,Ubuntu/Linux用户福音
主要实现了一下两个功能:
在文献检索结果列表界面中,点击或后,可以直接下载 PDF 文件,而非 CAJ/NH 文件;
在博士/硕士学位论文详细信息界面添加了“PDF下载”按钮,实现了博士/硕士学位论文的 PDF 下载功能,如下图所示。
脚本使用方法:在 Firefox 中先安装 Greasemonkey 或 Scriptish 扩展后,再安装脚本;在 Chrome 中请参考这篇文章(wu.nerd注:Chrome直接拖到Extensions页面即可);在 Safari 中借助 Ninjiakit 使用(感谢 Heart7)。IE 尚不能使用。
UPDATE(2013/04/06):感谢 Troy 的建议,我制作了一个特制版的脚本。其特别之处在于可以在检索页面中的硕士/博士论文默认下载 CAJ/NH 文件,避免了 PDF 文件没有目录所带来的遗憾。
P.S. 这段代码实现 PDF 下载的原理并不高神,只是修改了下载链接,改了一些 GET 参数。因此可以推断,CAJ 格式实际上与 PDF 非常相似,知网的服务器可以实现格式的转换。这样转出来的 PDF 是文字版,虽然没有 CAJ 中的目录,基本需求已经完全满足。