您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
stock data tool
// ==UserScript== // @name stock-tool // @namespace npm/vite-plugin-monkey // @version 0.0.4 // @author dd // @description stock data tool // @license MIT // @match *www.google.com/finance/quote* // @icon https://www.google.com/s2/favicons?sz=64&domain=google.com // @grant GM.addElement // @grant GM.addStyle // @grant GM.deleteValue // @grant GM.getResourceUrl // @grant GM.getValue // @grant GM.info // @grant GM.listValues // @grant GM.notification // @grant GM.openInTab // @grant GM.registerMenuCommand // @grant GM.setClipboard // @grant GM.setValue // @grant GM.xmlHttpRequest // @grant GM_addElement // @grant GM_addStyle // @grant GM_addValueChangeListener // @grant GM_cookie // @grant GM_deleteValue // @grant GM_download // @grant GM_getResourceText // @grant GM_getResourceURL // @grant GM_getTab // @grant GM_getTabs // @grant GM_getValue // @grant GM_info // @grant GM_listValues // @grant GM_log // @grant GM_notification // @grant GM_openInTab // @grant GM_registerMenuCommand // @grant GM_removeValueChangeListener // @grant GM_saveTab // @grant GM_setClipboard // @grant GM_setValue // @grant GM_unregisterMenuCommand // @grant GM_webRequest // @grant GM_xmlhttpRequest // @run-at document-start // @grant unsafeWindow // @grant window.close // @grant window.focus // @grant window.onurlchange // ==/UserScript== listenForRequests(); // 监听XMLHttpRequest网络请求 function listenForRequests() { const open = XMLHttpRequest.prototype.open; const send = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.open = function (method, url) { //console.log("访问的URL == " + url); open.apply(this, arguments); }; XMLHttpRequest.prototype.send = function (data) { //console.log(' send window.location.href -- ' + window.location.href); //console.log("data ------- " + JSON.stringify(data)); // 保存当前 XMLHttpRequest 对象 const currentXHR = this; // 添加 load 事件监听器 currentXHR.addEventListener("load", function () { var resData = currentXHR.responseText //console.log('Response data:----', resData); if (resData.startsWith(")]}'")) { /// 使用正则表达式匹配模式并提取目标数据 //const regexNum = /,\[(-?\d+\.\d+),/g; const regexNum = /,\[(-?\d+(\.\d+)?),/g; let matchNum; const resultNumArray = []; while ((matchNum = regexNum.exec(resData)) !== null) { // match[1] 包含匹配的目标数据 resultNumArray.push(parseFloat(matchNum[1])); } // 输出结果数组 console.log("数据-" + resultNumArray.length + "--" + JSON.stringify(resultNumArray)); //const regexDate = /\[\[([\d,]+),/g; //const regexDate = /\[\[([\d,]+)\d+/g; const regexDate = /\[\[(\d+,\d+,\d+),/g; let matchDate; const resultDateArray = []; while ((matchDate = regexDate.exec(resData)) !== null) { // match[1] 包含匹配的目标数据 const extractedString = matchDate[1]; const transformedString = extractedString.slice(5).replace(/,/g, '.'); resultDateArray.push(transformedString); } console.log("日期-" + resultDateArray.length + "--" + JSON.stringify(resultDateArray)); } }); return send.apply(this, arguments); }; }