Greasy Fork

Greasy Fork is available in English.

中国知网PDF下载助手

直接以PDF格式下载知网上的文献, 包括期刊论文和博硕士论文

当前为 2019-10-03 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @id             CNKI_PDF_Supernova
// @name           中国知网PDF下载助手
// @version        1.0.3
// @namespace      https://github.com/supernovaZhangJiaXing/Tampermonkey/
// @author         Supernova
// @description    直接以PDF格式下载知网上的文献, 包括期刊论文和博硕士论文
// @include        http://*.cnki.net/*
// @include        http://*.cnki.net.*/*
// @include        */kns/brief/*
// @include        */kns55/brief/*
// @include        */grid2008/brief/*
// @include        */detail/detail.aspx*
// @exclude        http://image.cnki.net/*
// @run-at         document-idle
// @grant          none
// ==/UserScript==

var allLinks, allLis, thisLi, newLi, aPDF, bPDF, thisLink;
var isDetailPage = false;
var isCNKIPage = false;
var myurl = window.location.href;

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);

// isDetailPage: 点进文献后的详情页
if (myurl.indexOf("detail.aspx") != -1) {
    isDetailPage = true;
}
// isNewPage: 是知网页面(谁从杂牌网站下载(╯‵□′)╯︵┻━┻)
if (document.title.indexOf(" - 中国知网") != -1) {
    isCNKIPage = true;
}

// 如果不是详情页, 即在搜索页面直接点右面的"下载", 把点击后发送的get请求的dflag参数内容改为"pdfdown"就可以了(知网老贼你隐藏起来就以为我找不到了?)
if (isDetailPage === false) {
    // TODO: 这部分之后有时间优化一下, 主要从XPath结点搜索的方式,让它只搜索一列下载链接,而不是所有链接
    for (var i = 0; i < allLinks.snapshotLength; i++) {
        thisLink = allLinks.snapshotItem(i);
        // 超链接是存在的
        if (thisLink.href) {
            // 超链接是文献的下载链接
            if (thisLink.href.indexOf("download.aspx?filename=") != -1) {
                // <code>&dflag</code>是get请求的参数之一
                if (thisLink.href.indexOf("&dflag") != -1) {
                    thisLink.href = thisLink.href.replace("nhdown", "pdfdown");
                } else {
                    // 也有可能没有(但好像一般会有啊)
                    thisLink.href = thisLink.href + "&dflag=pdfdown";
                }
            }
        }
    }
}
// 如果进了详情页, 博硕士论文下面会出现四个按钮, 期刊论文下会有三个按钮
else {
    if (isCNKIPage === false) {
        // 创建一个"PDF下载"按钮, 放在旁边
        for (i = 0; i < allLis.snapshotLength; i++) {
            thisLi = allLis.snapshotItem(i);
            if (thisLi.getAttribute("class").indexOf("readol") != -1) {
                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);
            }
        }
    }
    else {
        for (i = 0; i < allLinks.snapshotLength; i++) {
            thisLink = allLinks.snapshotItem(i);
            // 超链接是存在的
            if (thisLink.href) {
                // 超链接是文献的下载链接
                if (thisLink.href.indexOf("download.aspx?filename=") != -1) {
                    // 整本下载改为CAJ下载
                    if (thisLink.innerHTML.indexOf("整本下载") != -1) {
                        thisLink.innerHTML = thisLink.innerHTML.replace("整本", "CAJ");
                        bPDF = thisLink.href;
                    }
                    // 分页下载改为PDF下载
                    if (thisLink.innerHTML.indexOf("分页下载") != -1) {
                        thisLink.innerHTML = thisLink.innerHTML.replace("分页", "PDF");
                        thisLink.href = bPDF.replace("nhdown", "pdfdown");
                    }
                }
            }
        }
        // 分章下载我觉得没什么用所以我就替你们删掉了_(:з」∠)_
        var downloadpart = document.getElementById("DownLoadParts");
        downloadpart.removeChild(downloadpart.childNodes[2]);
        var dllink = document.getElementById("wxDlToolbar").childNodes[1].childNodes[1];
        dllink.removeChild(dllink.childNodes[2]);
    }
}