Greasy Fork

知网PDF下载助手

提供知网搜索页面的直接PDF下载

目前为 2023-05-09 提交的版本。查看 最新版本

// ==UserScript==
// @name           知网PDF下载助手
// @version        3.8.1
// @author         Supernova
// @description    提供知网搜索页面的直接PDF下载
// @match          http*://*.cnki.net/*
// @match          http*://*.cnki.net.*/*
// @match          http*://*/defaultResult/index*
// @match          http*://*/KNS8/AdvSearch*
// @match          http*://*/kcms/detail/detail.aspx*
// @exclude        http://image.cnki.net/*
// @run-at         document-idle
// @icon           https://cnki.net/favicon.ico
// @grant          unsafeWindow
// @grant          GM_xmlhttpRequest
// @license        MIT
// @namespace https://github.com/supernovaZhangJiaXing/Tampermonkey/
// ==/UserScript==

'use strict';
var $ = unsafeWindow.jQuery;

$(document).ready(function() {
    if (window.location.href.match("article") === false) {
        // 对应普通检索和高级检索
        if (window.location.href.indexOf("kns8") != -1 || window.location.href.indexOf("KNS8") != -1){
            $(document).ajaxSuccess(function(event, xhr, settings) {
                if (settings.url.indexOf('/Brief/GetGridTableHtml') + 1) {
                    $('.downloadlink').each(function () {
                        $(this).css('background-color', '#C7FFFF').mouseover(function (e) {
                            this.title="CAJ下载";
                        })
                    });
                    $.each($('.downloadlink'), function (index, value) {
                        var pdf_down = $(this).clone().css('background-color', '#C7FFC7').mouseover(function(e){
                            this.title="PDF下载";
                        });
                        GM_xmlhttpRequest({
                            method: "GET",
                            url: $(".fz14").eq(index).attr('href'),
                            synchronous: true,
                            headers: {
                                Referer: 'https://kns.cnki.net/kns8/defaultresult/index',
                                'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68"
                            },
                            redirectionLimit: 10,
                            onload: function(response) {
                                GM_xmlhttpRequest({
                                    method: "GET",
                                    url: response.finalUrl, // 跳转后的最终链接
                                    synchronous: true,
                                    headers: {
                                        Referer: 'https://kns.cnki.net/kns8/defaultresult/index',
                                        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68"
                                    },
                                    onload: function(response){
                                        if ($("#pdfDown", response.responseText).attr('href') != undefined) {
                                            pdf_down.css('background-color', '#C7FFC7').attr('href', $("#pdfDown", response.responseText).attr("href"));
                                        } else {
                                            pdf_down.css('background-color', '#FFFFC7').attr('href', response.responseURL);
                                        }
                                    }
                                });
                            }
                        });
                        $(this).after(pdf_down.css('background-color', '#FFC7C7'));
                    });
                    $('.bulkdownload.export').eq(0).after($('.bulkdownload.export').eq(0).clone().html($('.bulkdownload.export').eq(0).html().replace('下载', 'PDF'))
                                                          .removeClass('bulkdownload').click(function () { // 点击下载按钮后的行为
                        // 获取到勾选的文献, 下载其pdf版
                        for (var i = 0; i < $('input.cbItem').length; i++) {
                            if ($('input.cbItem').eq(i).attr('checked') == 'checked') { // 只针对勾选中的i
                                sleep(1000).then(
                                    window.open($('.downloadlink').eq(2 * i + 1).attr('href'))
                                );
                            }
                        }
                        $.filenameClear();
                    }).css('background-color', '#C7FFC7'));
                    $('.bulkdownload.export').eq(0).html($('.bulkdownload.export').eq(0).html().replace('下载', 'CAJ'))
                                                          .removeClass('bulkdownload').click(function () { // 点击下载按钮后的行为
                        // 获取到勾选的文献, 下载其caj版
                        for (var i = 0; i < $('input.cbItem').length; i++) {
                            if ($('input.cbItem').eq(i).attr('checked') == 'checked') { // 只针对勾选中的i
                                sleep(1000).then(
                                    window.open($('.downloadlink').eq(i).attr('href'))
                                );
                            }
                        }
                        $.filenameClear();
                    }).css('background-color', '#C7FFFF');
                }
                $('th').eq(8).css('width', '14%');
            });
        }
    }
    else {
        $(".btn-dlcaj").first().html($(".btn-dlcaj").first().html().replace("CAJ整本", "CAJ"));
        $(".btn-dlpdf").first().html($(".btn-dlpdf").first().html().replace("PDF整本", "PDF"));
        // $(".opts-down").remove();
    }
});

// https://stackoverflow.com/a/951057/7795128
function sleep(time) {
  return new Promise((resolve) => setTimeout(resolve, time));
}