// ==UserScript==
// @name 知网PDF下载助手
// @version 3.7.4
// @author Supernova
// @description 直接下载知网PDF格式论文; 下载博士论文目录; 批量下载文献
// @include http*://*.cnki.net/*
// @include http*://*.cnki.net.*/*
// @include */DefaultResult/Index*
// @include */defaultresult/index*
// @include */KNS8/AdvSearch*
// @include */detail.aspx*
// @include */CatalogViewPage.aspx*
// @include */Article/*
// @include */kns/brief/*
// @include */kns55/brief/*
// @include */grid2008/brief/*
// @include */detail/detail.aspx*
// @exclude http://image.cnki.net/*
// @run-at document-idle
// @icon https://cnki.net/favicon.ico
// @grant unsafeWindow
// @grant GM_setClipboard
// @grant GM_xmlhttpRequest
// @grant GM_notification
// @license MIT
// @namespace https://github.com/supernovaZhangJiaXing/Tampermonkey/
// @downloadURL none
// ==/UserScript==
'use strict';
var $ = unsafeWindow.jQuery;
$(document).ready(function() {
var myurl = window.location.href;
var isDetailPage = myurl.indexOf("detail.aspx") != -1 ? true: false; // 点进文献后的详情页
if (isDetailPage === 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) {
// 修改下载按钮
var down_btns = $('.downloadlink');
for (var i = 0; i < down_btns.length; i++) {
down_btns.eq(i).after(down_btns.eq(i).clone().attr('href', function () {
return $(this).attr("href").replace(/&(.*?)dflag=\w*|$/, '&$1dflag=pdfdown');
}).css('background-color', '#C7FFC7').mouseover(function(e){
this.title="PDF下载";
})).css('background-color', '#C7FFFF').mouseover(function(e){
this.title="CAJ下载";
});
}
// 在后面新增一个批量下载按钮, 功能为下载pdf格式论文
$('.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(2 * i).attr('href'))
);
}
}
$.filenameClear();
}).css('background-color', '#C7FFFF');
// 如果是国内版
if (window.location.href.indexOf("chn.oversea") == -1) {
for (i = 0; i < $('td.name').length; i++) {
$('td.name').eq(i).append($('
→ 前往知网海外版查阅'));
}
}
}
$('th').eq(8).css('width', '14%');
});
}
}
else {
// 只对"博硕论文"详情页做优化, 否则影响期刊页面的显示
// 来自: https://greasyfork.org/zh-CN/scripts/371938
if (location.search.match(/dbcode=C[DM][FM]D/i)) {
// 整本下载替换为CAJ下载
$(".btn-dlcaj").first().html($(".btn-dlcaj").first().html().replace("CAJ整本", "CAJ")); // 正则不知为什么用不了了
var pdf_url;
var pdf_down;
var content_url;
if (myurl.indexOf('chn.oversea') != -1) { // 进入了海外版页面
// 删除原始PDF下载按钮并获取pdf文件的url
pdf_url = $(".btn-dlpdf").remove().find("a").attr("href");
// 添加新的PDF下载
pdf_down = $('
'
+ '点击下载目录合并软件及说明
提取码: y77f'))
}
// 移除关于CAJ的信息
$(".fl.info").find("div").remove();
}
});
// https://stackoverflow.com/a/951057/7795128
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
function get_content(cnt_list){
// 海外版下载目录的方法不行了, 改从分章下载转换
var contents = "";
cnt_list.children().each(function () {
var cnt_item = $(this).find('a').text();
var cnt_page = $(this).find('.page').text().split('-')[0];
var prev_space_length = $(this).attr('class').split('-')[1] * 4;
contents = contents + cnt_item.trim().replace(/ /g, " ").padStart(prev_space_length + cnt_item.trim().length, ' ') + "\t" + cnt_page + "\r\n";
})
return contents;
}
// 来自: https://greasyfork.org/zh-CN/scripts/371938
function manage_contents(xhr) {
var cnt_list = $(".ls-chapters", xhr.responseText);
var contents = get_content(cnt_list); // 目录内容
// 添加目录复制
$('.btn-dlpdf').first().after($('