您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在页面右下角以图标的形式展示获取页面的原始数据,并在点击图标时将数据保存到本地文件中。
当前为
// ==UserScript== // @name 保存成果列表 // @version 1.0 // @description 在页面右下角以图标的形式展示获取页面的原始数据,并在点击图标时将数据保存到本地文件中。 // @match https://kns.cnki.net/kns8s/defaultresult/index* // @grant GM_registerMenuCommand // @grant GM_xmlhttpRequest // @grant GM_download // @namespace https://greasyfork.org/users/1237542 // ==/UserScript== var executeScript = false; function main() { if (executeScript) { var rows = document.querySelectorAll('tbody tr'); var data = []; for (var i = 0; i < rows.length; i++) { var row = rows[i]; var titleElement = row.querySelector('.name a.fz14'); var title = ''; // 标题默认为空字符串 var link = ''; if (titleElement) { title = titleElement.textContent.trim(); // 获取标题文本 link = titleElement.href; // 获取链接 } var authorTags = row.querySelectorAll('.author a.KnowledgeNetLink'); var authors = Array.from(authorTags).map(function (authorTag) { return authorTag.textContent.trim(); }).join(', '); var sourceElement = row.querySelector('.source a'); var source = ''; // 来源默认为空字符串 if (sourceElement) { source = sourceElement.textContent.trim(); // 获取来源文本 } var dateElement = row.querySelector('.date'); var date = ''; // 日期默认为空字符串 if (dateElement) { date = dateElement.textContent.trim(); // 获取日期文本 } var typeElement = row.querySelector('.data span'); var type = ''; // 类型默认为空字符串 if (typeElement) { type = typeElement.textContent.trim(); // 获取类型文本 } var rowData = { title: title, href: link, authors: authors, source: source, date: date, type: type }; data.push(rowData); } console.log(data); var htmlContent = document.documentElement.outerHTML; var defaultFilename = authorsMatch(htmlContent); saveData(JSON.stringify(data, null, 2), defaultFilename); } } // 利用正则表达式匹配第一个作者并作为默认文件名 function authorsMatch(authors) { var regex = new RegExp("</i>[^<>:]+:([^<]+)</a>"); // 正则表达式以匹配不同格式的作者标签 var match = authors.match(regex); console.log('match',match[1]) return match ? match[1] : 'data.txt'; // 如果匹配成功,返回作者名,否则使用 'data.txt' 作为默认文件名 } function saveData(data, fileName) { var blob = new Blob([data], { type: 'text/plain;' }); var url = URL.createObjectURL(blob); var filename = prompt('请输入保存文件的名称', fileName); // 提示输入文件名 if (filename) { GM_download(url, filename); // 下载保存文件 } } // 创建悬浮按钮 var button = document.createElement('div'); button.id = 'getDataButton'; button.style.position = 'fixed'; button.style.bottom = '20px'; button.style.right = '20px'; button.style.width = '50px'; button.style.height = '50px'; button.style.background = '#007bff'; button.style.borderRadius = '50%'; button.style.textAlign = 'center'; button.style.lineHeight = '50px'; button.style.color = '#ffffff'; button.style.cursor = 'pointer'; button.textContent = '获'; button.title = '点击获取页面原始数据'; button.addEventListener('click', function () { executeScript = true; main(); }); document.body.appendChild(button); // 检测DOM变化停止后执行脚本 var observer = new MutationObserver(function (mutationsList, observer) { for (var mutation of mutationsList) { if (mutation.type === 'childList') { return; } } observer.disconnect(); main(); }); observer.observe(document, { childList: true, subtree: true });