// ==UserScript== // @name Wos Batch Download // @namespace http://tampermonkey.net/ // @version 1.0 // @description Batch download Wos // @author AngelLiang // @match https://www.webofscience.com/wos // @match https://www.webofscience.com/wos/woscc/summary/*/relevance/* // @icon https://www.google.com/s2/favicons?sz=64&domain=webofscience.com // @require https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js // @require https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js // @connect * // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; const DOWNLOAD_URL = "https://www.webofscience.com/api/wosnx/indic/export/saveToFile"; var total = ""; var perPage = 500 var uuid = "" var wosSid = "" var waitSecond = 60 function getTotal() { total = $(".brand-blue").text() total = total.replace(",", "") total = parseInt(total) return total } // 根据index获取页码数量 function getNextPage(index) { let start = 1 + index * perPage let stop = perPage + index * perPage return [""+start, ""+stop] } // 获取期刊的uuid function getParentQid() { let currUrl = String(window.location.href); return currUrl.split('/')[6] } // 生成请求页面数 function genRequestPageNumber() { total = getTotal() let number = total / perPage return Math.ceil(number) } function genRequestData(start, stop) { let uuid = getParentQid() let requestJson = { "parentQid": uuid, "sortBy": "relevance", "displayTimesCited": "true", "displayCitedRefs": "true", "product": "UA", "colName": "WOS", "displayUsageInfo": "true", "fileOpt": "othersoftware", "action": "saveToFieldTagged", "markFrom": start, "markTo": stop, "view": "summary", "isRefQuery": "false", "locale": "en_US", "filters": "fullRecordPlus", "bm-telemetry": "7a74G7m23Vrp0o5c9350811.75-1,2,-94,-100,"+navigator.userAgent+",uaend,12147,20030107,zh-CN,Gecko,5,0,0,0,408230,4830241,1920,1040,1920,1080,901,793,1806,,cpen:0,i1:0,dm:0,cwen:0,non:1,opc:0,fc:0,sc:0,wrc:1,isc:0,vib:1,bat:1,x11:0,x12:1,8101,0.0127919236,829577445530.5,0,loc:-1,2,-94,-131,"+navigator.userAgent+"-1,2,-94,-101,do_en,dm_en,t_en-1,2,-94,-105,-1,2,-94,-102,0,-1,1,0,1022,831,0;0,-1,1,0,1023,622,0;0,-1,0,0,-1,1004,0;0,-1,1,0,1328,-1,0;0,-1,1,0,1650,-1,0;0,-1,0,0,2108,2108,0;-1,2,-94,-108,0,1,70702,-2,0,0,831;1,3,70706,-2,0,0,831;2,2,70819,-2,0,0,831;3,1,72131,-2,0,0,622;4,3,72132,-2,0,0,622;5,2,72243,-2,0,0,622;-1,2,-94,-110,0,1,1428,415,821;1,1,1437,416,821;2,1,1450,417,822;3,1,1460,418,823;4,1,1461,418,824;5,1,1468,420,824;6,1,1483,422,826;7,1,1484,422,827;8,1,1493,423,828;9,1,1500,425,828;10,1,1528,427,830;11,1,1530,429,831;12,1,1539,430,832;13,1,1540,432,833;14,1,1554,435,836;15,1,1555,437,838;16,1,1566,440,841;17,1,1571,442,843;18,1,1583,443,845;19,1,1587,445,847;20,1,1600,446,848;21,1,1651,447,848;22,1,1660,448,848;23,1,1683,448,847;24,1,1694,451,846;25,1,1731,454,843;26,1,1732,456,841;27,1,1743,457,837;28,1,1749,462,832;29,1,1761,467,828;30,1,1773,480,812;31,1,1794,494,802;32,1,1796,515,790;33,1,1798,541,771;34,1,1827,658,679;35,1,1829,700,646;36,1,1840,739,619;37,1,1849,769,600;38,1,1851,795,589;39,1,1861,818,586;40,1,1868,837,584;41,1,1876,851,583;42,1,1883,866,583;43,1,1893,880,583;44,1,1899,891,583;45,1,1914,905,583;46,1,1915,916,588;47,1,1923,926,589;48,1,1931,937,594;49,1,1939,948,600;50,1,1951,954,605;51,1,1955,961,611;52,1,1963,965,614;53,1,1971,968,617;54,1,1979,970,621;55,1,2044,970,622;56,1,2052,969,622;57,1,2060,967,621;58,1,2068,964,620;59,1,2076,963,616;60,1,2085,962,610;61,1,2093,961,601;62,1,2100,961,592;63,1,2110,965,580;64,1,2116,974,567;65,1,2126,981,552;66,1,2132,989,537;67,1,2140,997,521;68,1,2148,1005,505;69,1,2156,1014,493;70,1,2164,1025,481;71,1,2173,1035,467;72,1,2180,1044,453;73,1,2187,1051,437;74,1,2196,1058,424;75,1,2204,1065,412;76,1,2211,1072,402;77,1,2219,1078,394;78,1,2228,1085,386;79,1,2266,1106,369;80,1,2268,1110,366;81,1,2279,1113,364;82,1,5509,1117,429;83,1,21588,965,720;84,1,21596,964,720;85,1,21603,961,720;86,1,21611,961,719;87,1,21652,960,718;88,1,21725,957,717;89,1,21819,958,716;90,1,21827,959,715;91,1,21851,961,714;92,1,21876,962,714;93,1,21891,963,714;94,1,21899,965,714;95,1,21955,966,714;96,1,21979,967,714;97,1,46935,798,396;98,1,46935,798,396;99,1,46956,797,396;360,3,64288,666,398,-1;363,4,64359,666,397,-1;364,2,64360,666,397,-1;497,3,66932,625,472,2577;498,4,67034,625,472,2577;499,2,67035,625,472,2577;578,3,68052,239,610,-1;579,4,68131,239,610,-1;580,2,68132,239,610,-1;581,2,68137,239,610,1716;674,3,69388,311,623,831;676,4,69405,269,626,578;677,2,69405,269,626,-1;779,3,71217,416,627,622;797,4,71580,377,627,-1;798,2,71581,377,627,-1;884,3,73219,449,750,-1;886,4,73283,449,750,-1;887,2,73284,449,750,-1;947,3,74276,411,836,-1;948,4,74364,411,836,-1;949,2,74364,411,836,-1;988,3,75900,251,804,-1;989,4,76452,251,804,-1;990,2,76452,251,804,-1;-1,2,-94,-117,-1,2,-94,-111,-1,2,-94,-109,-1,2,-94,-114,-1,2,-94,-103,2,2970;3,64284;-1,2,-94,-112,"+window.location.href+"(overlay:export/exp)-1,2,-94,-115,433108,2557265,32,0,0,0,2990340,76458,0,1659154891061,21,17749,6,991,2958,16,0,76460,5257213,0,E55226E933D4E02F778267D79B043483~0~YAAQr4FtaPwq5y6CAQAAzZ5VTQg9iuzUIoxOSG31h5KDYk4QiodZfGkFl/5XtA2eYoG9xM+HiCOL0qkBMtTHjPYT0RNO5fwe5Dj2KrRxvj9OwNHvKpmYf+rA6BRl2AktB2ny8+2Q+GlhwrXfVdMZ8HLdJX77kBbGZ0Ls8OumdAYYNvRkDIhnBiCplQzG7gSPyz2ijr0jbKetFCVuzPd1gSbmRoaIN4pA92crowkdQRDNwB/53YhRQj+FH0rQ1k2YKgFJr9qCns1ZF3tRP+iuKJ2mFt5kZQ++IA/TSsJO5OvIY6dCkyFz8ZWPfODQluh3RFTNTpGcR68cm4No6hsy9Uq3K8fiOmUxQh3096zr9vGw1+n607vBZETsQNfKx0ZrvenhuixVrU+eqpl6mEQc6ReZQocb646lKiHIEFvt~-1~-1~-1,38807,71,277344428,30261693,PiZtE,90331,83,0,-1-1,2,-94,-106,1,0-1,2,-94,-119,-1-1,2,-94,-122,0,0,0,0,1,0,0-1,2,-94,-123,-1,2,-94,-124,-1,2,-94,-126,-1,2,-94,-127,-1,2,-94,-70,420217769;1243744842;dis;,7;true;true;true;-480;true;24;24;true;false;-1-1,2,-94,-80,5437-1,2,-94,-116,72453624-1,2,-94,-118,238047-1,2,-94,-129,-1,2,-94,-121,;4;7;0" } let requestData = JSON.stringify(requestJson) return requestData } function downloadFile(fileName, data){ var a = document.createElement("a"); a.href = "data:text," + data; //content a.download = fileName; //file name a.click(); } function sleep(delay) { for(var t = Date.now(); Date.now() - t <= delay;); } // 生成随机数 function randomNum(minNum, maxNum){ switch(arguments.length){ case 1: return parseInt(Math.random()*minNum+1,10); case 2: return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10); default: return 0; } } function enableDownloadButton(){ $("#downloadButton").val('正在下载...') $("#downloadButton").attr("disabled", false); } function disableDownloadButton(){ $("#downloadButton").val('一键下载') $("#downloadButton").attr("disabled", true); } function requestFile(i, number, total, callback) { waitSecond = prompt("请输入下载间隔时间,单位秒", "60"); if (waitSecond == null) { return } waitSecond = parseInt(waitSecond) if(waitSecond < 20 ) { alert("下载间隔时间不建议小于20s"); return } disableDownloadButton() var nextPageParam = getNextPage(i - 1) var start = nextPageParam[0] var stop = nextPageParam[1] if (stop > total) { stop = "" + total; } //console.log(nextPageParam) var requestData = genRequestData(start, stop) console.log("正在下载" + start + "到" + stop + "份数据,总共" + total + "份") let reqAjax = $.ajax({ url:DOWNLOAD_URL, type: 'POST', headers: { "x-1p-wos-sid": wosSid, "content-type": "application/json, text/plain, */*", "accept-language": "zh-CN,zh;q=0.9" }, "crossDomain": true, data: requestData, success: function(result){ //console.log(result); let filename = ""+ nextPageParam[0] + '-' + nextPageParam[1] + '.txt' downloadFile(filename, result) }, error: function(err){ console.log(err); enableDownloadButton() alert('下载出错') } }) $.when(reqAjax).done(function(){ var nextIndex = i+1 if (nextIndex > number) { enableDownloadButton() console.log("===下载完成==="); alert('下载完成') return } var sleepNum = randomNum(waitSecond - 5, waitSecond + 5) console.log("等待" + sleepNum + "秒后再下载") sleep(sleepNum*1000) callback(nextIndex, number, total, callback) }) } function getSessionID(doc) { const sidRegex = /sid=([a-zA-Z0-9]+)/i; // session ID is embedded in the static page inside an inline