您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
wos核心论文集下载机器人
当前为
// ==UserScript== // @name Wos Download Bot // @namespace http://tampermonkey.net/ // @version 1.2.3 // @description wos核心论文集下载机器人 // @author AngelLiang // @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 // ==/UserScript== (function() { 'use strict'; const DOWNLOAD_URL = "https://www.webofscience.com/api/wosnx/indic/export/saveToFile"; const DEFAULT_WAIT_SECOND = "30" var total = ""; var perPage = 500 var uuid = "" var wosSid = "" var waitSecond = null 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 get_bm_telemetry() { return bmak['sensor_data'] } function genRequestData(start, stop) { let requestJson = { "parentQid": getParentQid(), "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": get_bm_telemetry() } 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").html('一键下载') $("#downloadButton").attr("disabled", false); } function disableDownloadButton(){ $("#downloadButton").html('正在下载...') $("#downloadButton").attr("disabled", true); } function requestFile(i, number, total, callback) { if (waitSecond == null) { waitSecond = prompt("请输入下载间隔时间(±5s),单位秒", DEFAULT_WAIT_SECOND); } if (waitSecond == null) { alert("waitSecond参数不能为空"); return } waitSecond = parseInt(waitSecond) if(waitSecond < 20 ) { alert("下载间隔时间不能小于20s"); return } 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 + "份") disableDownloadButton() 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 = "" + start + '-' + stop + '.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 <script> // if you have the right HttpOnly cookie set. if we can't find it, we // initialize our session as the web app does for (let scriptTag of doc.querySelectorAll('script')) { let sid = scriptTag.textContent.match(sidRegex); if (sid) { return sid[1]; } } return null } function downloadCallback() { console.log("===下载文件===") wosSid = getSessionID(document) // console.log(wosSid) uuid = getParentQid() // console.log(uuid) let total = getTotal() // console.log(total) let number = genRequestPageNumber(total) requestFile(1, number, total, requestFile) } function addButton() { console.log("addButton") $('body').append('<button id="downloadButton">一键下载</button>') $('#downloadButton').css('width', '120px') $('#downloadButton').css('position', 'absolute') $('#downloadButton').css('top', '120px') $('#downloadButton').css('right', '50px') $('#downloadButton').css('background-color', '#5e33bf') $('#downloadButton').css('color', 'white') $('#downloadButton').css('font-size', 'large') $('#downloadButton').css('z-index', 100) $('#downloadButton').css('border-radius', '5px') $('#downloadButton').css('text-align', 'center') $('#downloadButton').click(downloadCallback) }; $(document).ready(function () { if (window.location.href.startsWith('https://www.webofscience.com')) { addButton() } }) })();