Greasy Fork

Greasy Fork is available in English.

天天基金数据抽取

用以快捷显示累计净值,任期回报,一年前累计净值,月高点

当前为 2021-06-18 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         天天基金数据抽取
// @namespace    http://tampermonkey.net/
// @version      1.3.6
// @description  用以快捷显示累计净值,任期回报,一年前累计净值,月高点
// @author       aotmd
// @match        http://fund.eastmoney.com/*
// @match        http://*.eastmoney.com/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// ==/UserScript==

(function () {
    addLoadEvent(() => {
        var url = window.location.href;
        //主页面
        var str = /fund\.eastmoney\.com\/.+/i;
        //净值页面
        var str2 = /.+eastmoney\.com.+/i;

        if (str.test(url)) {
            window.setTimeout(() => {
                //做好显示面板
                let divElement1 = document.createElement('div');
                divElement1.className = "gs1";
                document.body.appendChild(divElement1);
                divElement1.style="top: calc( 15% - 42px );;font-size: 16px;";

                let divElement2 = document.createElement('div');
                divElement2.className = "gs1";
                document.body.appendChild(divElement2);

                let divElement3 = document.createElement('div');
                divElement3.className = "gs1";
                document.body.appendChild(divElement3);
                divElement3.style="top: calc( 15% + 164px );";


                //显示基金名称
                var 基金名称=document.querySelector("#body > div:nth-child(8) > div > div > a:nth-child(7)").innerText;
                divElement1.innerHTML = 基金名称;


                var 任期回报 = (document.querySelector("tr.noBorder > td.td04.bold.ui-color-red").innerText.replace("%","")/100).toFixed(4);
                var 任职时间 = document.querySelector("tr.noBorder > td.td01").innerText.replace("~至今","");
                var 累计净值 = document.querySelector("dl.dataItem03 > dd.dataNums > span").innerText;
                var 净值时间 = document.querySelector("dl.dataItem02 > dt > p").innerText.split('(')[1].replace(')', '');
                //取得指定股票代码
                var 股票代码=window.location.pathname.replace("/","").replace(".html","");
                var 净值网址=document.querySelector("#Div2 > div.item_title.hd > div.item_more > a").href;
                //打开新窗口,获取净值
                window.open(净值网址+"?ref="+股票代码, '_blank',
                    "height=100,width=100,top="+window.screen.height+",left="+window.screen.width+",location=0,menubar=0,status=0,titlebar=0,toolbar=0");
                //持续监听变化
                var flag="";
                window.setInterval(()=>{
                    //显示基本信息
                    var 一年前的时间=GM_getValue(股票代码+"时间");
                    var 一年前累计净值=GM_getValue(股票代码+"净值");
                    if (flag===一年前累计净值)return;
                    flag=一年前累计净值;
                    var 近一年=((累计净值/一年前累计净值-1)*100).toFixed(2)+"%";
                    divElement2.innerHTML =
                        "近一年:       "+近一年+
                        "<br>净值时间:                        " + 净值时间 +
                        "<br>累计净值:&nbsp;&nbsp;&nbsp;&nbsp;" + 累计净值 +
                        "<br>取值时间:                        " + 一年前的时间 +
                        "<br>累计净值:&nbsp;&nbsp;&nbsp;&nbsp;" + 一年前累计净值 +
                        "<br>任职时间:                        " + 任职时间 +
                        "<br>任期回报:&nbsp;&nbsp;&nbsp;&nbsp;" + 任期回报;
                },100);

                var flag2,flag3;
                window.setInterval(()=>{
                    //显示数据信息
                    var 近一个月最大累计净值时间=GM_getValue(股票代码+"近一个月最大累计净值时间");
                    var 近一个月最大累计净值=GM_getValue(股票代码+"近一个月最大累计净值");
                    var 当前估值=parseFloat((document.querySelector("#gz_gszzl").innerText.replace("%","")/100).toFixed(4));
                    var 与月高点的差距=1-累计净值*(1+(当前估值))/近一个月最大累计净值;

                    if (flag2===近一个月最大累计净值时间&&flag3===当前估值)return;
                    flag2=近一个月最大累计净值时间;flag3=当前估值;

                    与月高点的差距=(与月高点的差距*100).toFixed(2)+"%";
                    divElement3.innerHTML ="近一个月最大累计净值:<br>取值时间:"+近一个月最大累计净值时间+
                        "<br>累计净值:&nbsp;&nbsp;&nbsp;&nbsp;" + 近一个月最大累计净值+
                        "<br>当前估值:&nbsp;&nbsp;&nbsp;&nbsp;" + (当前估值*100).toFixed(2)+"%"+
                        "<br>与月高点的差距:"+与月高点的差距;
                },100);

            }, 0);
        }else if (str2.test(url)&&getQueryString("ref")!=null){
            var ref=getQueryString("ref");
            window.setTimeout(() => {
                //找到近20个交易日累计净值的最大值
                var 近20个交易日时间=document.querySelectorAll("#jztable > table > tbody > tr > td:nth-child(1)");
                var 近20个交易日累计净值=document.querySelectorAll("#jztable > table > tbody > tr > td:nth-child(3)");
                var maximumIndex=0;
                for (let key in 近20个交易日累计净值) {
                    if (近20个交易日累计净值[key].innerText>近20个交易日累计净值[maximumIndex].innerText){
                        maximumIndex=key;
                    }
                }
                GM_setValue(ref+"近一个月最大累计净值时间", 近20个交易日时间[maximumIndex].innerText);
                GM_setValue(ref+"近一个月最大累计净值", 近20个交易日累计净值[maximumIndex].innerText);

                //找一年前的累计净值
                document.querySelector("#pagebar > div.pagebtns > input.pnum").value=13;
                document.querySelector("#pagebar > div.pagebtns > input.pgo").click();
                window.setTimeout(() => {
                    var 时间=document.querySelectorAll("#jztable > table > tbody > tr > td:nth-child(1)");
                    var 净值=document.querySelectorAll("#jztable > table > tbody > tr > td:nth-child(3)");
                    GM_setValue(ref+"时间", 时间[2].innerText);
                    GM_setValue(ref+"净值", 净值[2].innerText);
                    window.close();
                },500);
            },0);
        }
    });

    addStyle(`
    .gs1 {
        padding: 5px 5px;
        font-size: 14px;
        color: snow;
        position: fixed;
        text-align: left;
        cursor: copy;
        border-radius: 10px;
        background-color: rgba(135, 134, 241, 0.84);
        right: 5px;
        top: 15%;
        z-index: 999999;
        //box-shadow: 0 0 7px 0 rgba(18, 80, 18,0.4), 0 0 0 1px rgba(0,0,0,0.3);
        min-width: 144px;
    }`);

    /**
     * 添加浏览器执行事件
     * @param func 无参匿名函数
     */
    function addLoadEvent(func) {
        let oldOnload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function () {
                try {
                    oldOnload();
                } catch (e) {
                    console.log(e);
                } finally {
                    func();
                }
            }
        }
    }

    /**
     * 获取网页参数
     * @param name 参数名称
     * @returns {string|null}
     */
    function getQueryString(name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r = decodeURI(window.location.search).substr(1).match(reg);
        if(r != null) return (r[2]);
        return null;
    }

    //添加css样式
    function addStyle(rules) {
        let styleElement = document.createElement('style');
        styleElement["type"] = 'text/css';
        document.getElementsByTagName('head')[0].appendChild(styleElement);
        styleElement.appendChild(document.createTextNode(rules));
    }

    /**
     * 对象排序方法
     * @param obj1
     * @param obj2
     * @returns {number}
     */
    var compare = function (obj1, obj2) {
        var val1 = obj1.innerText;
        var val2 = obj2.innerText;
        if (val1 < val2) {
            return -1;
        } else if (val1 > val2) {
            return 1;
        } else {
            return 0;
        }
    }
})();