Greasy Fork is available in English.
用于知网批量下载PDF,保存下载信息到txt
// ==UserScript==
// @name 知网批量下载PDF+丨CNKI Multi PDF Download
// @namespace http://tampermonkey.net/
// @icon https://kdoc.cnki.net/favicon.ico
// @version 0.6
// @description 用于知网批量下载PDF,保存下载信息到txt
// @author Juicpt(因为不熟悉js里的属性方法,为了方便添加新功能,24用jQuery重写)
// @include */kns/brief/*
// @include */kns*/AdvSearch*
// @include */kns*/defaultresult/*
// @run-at document-end
// @grant unsafeWindow
// ==/UserScript==
var $ = unsafeWindow.jQuery;
(function(){
$('.SavePoint').width(620);
$('<a>批量下载PDF</a>').appendTo('.SavePoint,.result-con-l').click(downLoad).attr({'id':'pdfdown','title':'此页面若有勾选,则下载勾选部分;没有则默认下载当前页面全部搜索结果'}).addClass('btn-search-his');
$('<a>信息</a>').appendTo('.SavePoint,.result-con-l').click(getInfo).attr({'id':'info','title':'导出简要信息,用于核对下载情况和辅助重命名'}).addClass('btn-search-his');
var tr3 = [];
var info_count = 0;
if (location.pathname.match('/kns/brief/'))
{
tr3 = $('tr[bgcolor],.GridDoubleRow,.GridSingleRow');
replaceUrl(tr3);
}
else
{
$('#briefBox').ajaxStop(function(){
tr3 = $('.result-table-list tbody tr,.result-detail-list dd');
replaceUrl(tr3);
/*
if($(".countPageMark")){
var page_count = $(".countPageMark").text().trim().split("/")[0];
var page_per = $("#perPageDiv span").text().trim();
info_count = (page_count-1) * page_per;
info_count = info_count > 0 ? info_count : 0 ;
}
*/
});
}
function replaceUrl(all){
all.each(function(){
var url = $(this).find('a.briefDl_D,.briefDl_Y,.downloadlink').attr('href');
if (url){
//url = url.match('&dflag') ? url.replace('&dflag=nhdown','&dflag=pdfdown') : (url + '&dflag=pdfdown');
url = document.URL.match('oversea') ? url : url.replace(/\S*(filename=\S*)/,'https://chn.oversea.cnki.net/kns/download?$1');
$(this).find('a.briefDl_D,.briefDl_Y,.downloadlink').attr('href',url);
}
});
}
function getInfo(){
var info = '序号→发表时间→第一作者→文献标题→下载状态\n' ;
var trselected = selectBox(tr3);
info += trselected.map(getInfoInEach).get().join('');
var txtname = $(tr3).find('a.fz14,.author_flag,.GridRightColumn,.author').find('font.Mark').eq(0).text().trim() + '.txt';
txtname = txtname == '.txt' ? $('.conditions').text().trim() + '.txt' : txtname;
exportInfo(info,txtname);
info = '';
}
function downLoad(){
var trselected = selectBox(tr3);
trselected.each(function(){
var btdown=$(this).find('a.briefDl_D,.briefDl_Y,.downloadlink.icon-download,.icon-textlink')[0];
if (btdown) btdown.click();
});
}
function getInfoInEach(index){
var pnum = index + 1 + info_count;
var ptime = $(this).find('td:eq(4),label:contains(发表时间),span.date').text().replace('发表时间:','').trim().substr(0,10);
var pname = $(this).find('.author_flag,.author,.authorinfo p a:eq(0)').text().split(';')[0].replace(',','').trim().split(' ').pop();
pname = pname.length > 15 ? pname.split(' ')[1] : pname;
pname = pname.length == 0 ? $(this).find('.authorinfo p').text().trim() : pname;
var ptitle = $(this).find('a.fz14,h3.title_c a').text().trim().replace(/[\/:*?"<>|]+/g,'_').replace(/[\n\r\t]+/g,'').replace(/\s+——/g,'——');
var pstatus = $(this).find('a.briefDl_D,.briefDl_Y,.downloadlink.icon-download').attr('title');
pstatus = pstatus===undefined ? '未下载': pstatus.slice(3);
var infoineach = pnum + '→' + ptime + '→' + pname + '→' + ptitle + '→' + pstatus + '\n';
return infoineach;
}
function selectBox(all){
var checked = tr3.find(':checkbox').is(":checked");
var selected = checked == true ? all.filter(function(){return $(':checkbox',this).is(':checked')==true}) : all;
return selected
}
function exportInfo(content, filename) {
var eleLink = document.createElement('a');
eleLink.download = filename;
eleLink.style.display = 'none';
var blob = new Blob([content]);
eleLink.href = URL.createObjectURL(blob);
document.body.appendChild(eleLink);
eleLink.click();
document.body.removeChild(eleLink);
}
})();