转跳到内容

【油猴脚本】简单计算积分(适用电脑网页端)


推荐贴

简单搜索了一下……同盟内貌似没有相关的油猴脚本,所以就发了

作为一个新人,总是会在意积分数到底多少了,虽然知道计算公式,但是每次计算都有点麻烦。

在新手区看到【说起来积分应该如何查看】这个帖子后就有了想法,因此写了这个脚本

第一次在综合事务区发帖,看了下版规应该可以发的吧

如果有违规的地方请告诉我:1348558391_SSB(2):

这里要感谢一下 @367ddd 佬的代码补充建议还有 @哥特的亡零 的bug反馈以及投到综合事务区的建议

代码如下:

// ==UserScript==
// @name         SS同盟积分计算
// @namespace    https://sstm.moe/profile/
// @version      1.0
// @description  简单计算积分
// @author       FuRobert
// @match        *://sstm.moe/profile/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=sstm.moe
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    let is_ok = false;
    function calculator(){
        let nei_rong_shu = 0;
        let jie_cao_shu = 0;
        let fu_yuan_shu = 0;

        var nei_rong_shu_box = document.getElementsByClassName("ipsType_minorHeading");
        for(let i=0; i<nei_rong_shu_box.length;i++ ){
            let temp_text = nei_rong_shu_box[i].parentElement.innerText;
            if(temp_text.includes(',')){
                temp_text=temp_text.replace(',',"");
            }
            if(temp_text.includes('内容数')){
                nei_rong_shu = parseInt(temp_text.replace('内容数\n',""));
                console.log(nei_rong_shu);
                break;
            }
        }

        var jie_cao_shu_box = document.getElementsByClassName("ipsDataItem_main");
        if (jie_cao_shu_box[0] != null){
            for(let i=0; i<jie_cao_shu_box.length;i++ ){
                let temp_text = jie_cao_shu_box[i].textContent;
                if(temp_text.includes(',')){
                    temp_text=temp_text.replace(',',"");
                }
                if(temp_text.includes('J')){
                    jie_cao_shu = parseInt(temp_text.replace('J',""));
                    console.log(jie_cao_shu);
                    break;
                }
            }
            for(let i=0; i<jie_cao_shu_box.length;i++ ){
                let temp_text = jie_cao_shu_box[i].textContent;
                if(temp_text.includes(',')){
                    temp_text=temp_text.replace(',',"");
                }
                if(temp_text.includes('F')){
                    fu_yuan_shu = parseInt(temp_text.replace('F',""));
                    console.log(fu_yuan_shu);
                    break;
                }
            }
            var box = document.getElementsByClassName("ipsDataList ipsDataList_reducedSpacing cProfileFields")[1];
            var temp_box = box.children[0].cloneNode(true);
            temp_box.children[0].children[0].innerHTML='积分';
            temp_box.children[1].innerHTML = String((nei_rong_shu*0.3 + jie_cao_shu*0.03 + fu_yuan_shu*10).toFixed(2));
            box.append(temp_box);
            jie_cao_shu_box = document.getElementsByClassName("ipsDataItem_generic ipsDataItem_size3 ipsType_break");
            for (let temp of jie_cao_shu_box){
                //console.log(temp.textContent);
                if(temp.textContent.includes('积分')){
                    is_ok = true;
                    return;
                }
            }
        }else{
            if(is_ok == false){
                setTimeout(start, 200);
            }
            return;
        }
    }
    function start(){
        if(is_ok == false){
            setTimeout(calculator, 200);
        }
    }
    window.onload=function(){
        start();
    };
})();

使用方法:浏览器安装油猴插件,在里面选择添加新脚本,将上述代码全部复制覆盖到里面即可,启用后正常的话应该能在个人页面看到积分,点进别人的页面好像也能看到

效果图:image.png.ae6a7c5a3a8f434cdfbfac69d0be6bfe.png

本人代码菜鸟,如果有大佬有修改建议或者想直接在此基础上修改放出代码的,十分欢迎:YangTuo_2:

,由furobert修改
修改代码-修改循环次数判定
链接到点评

喔,这个的代码看起来比我强好多,也有考虑到节操为负数的情况,看来我还有得学

不过既然greasyfork里面已经有了同类型脚本,我就不上传了,况且我在里面一直只是下载别人脚本的,从来没上传过,所以也没有注册账号:YangTuo_Y:

链接到点评
1 小时前,fensishanbeilati说道:

这是自调用匿名函数吗?

哦,你是获取网页元素来拿到内容数,节操和福缘然后进行计算,添加新的网页节点是吧。

话说为啥你的for循环写死了i<5呢?:656393010_SSB(7):不应该用数组的长度吗

正常来说要用数组长度的,当时我只是简单随便写了个范围内的试一试就成了,然后忘了改了():1348558391_SSB(2):

不过这样暂时也没问题(?)就没再动了

链接到点评
6 小时前,furobert说道:
for(let i=0; i<3;i++ ){

:a1:雖然不是什麼重要的建議,不過我不推薦像這樣直接寫個3 (特定的數字),換成nei_rong_shu_box.length會比較省事

:NEKOMIMI_PARADISE_7:像之前用的一個腳本,一些情況下它發出去的請求會返回"400 Bad Request",一看發現是請求裡沒有包含正確的Captcha-Token。那為什麼會沒有呢,它在localStorage裡面找這個Token,但是用的方法就是「for (let i = 0; i < 20; i++)」,那如果超過了20條data而又Token不在前20條裡面不就找不到了嘛。要是有人在用的話就一堆人跑底下說用不了、用不了啦

幽月零在文学领地阅读作品时遇到了穿着女仆装的文学少女,待她离开后找到了遗落的9节操

链接到点评
刚刚,幽月零说道:

:a1:雖然不是什麼重要的建議,不過我不推薦像這樣直接寫個3 (特定的數字),換成nei_rong_shu_box.length會比較省事

:NEKOMIMI_PARADISE_7:像之前用的一個腳本,一些情況下它發出去的請求會返回"400 Bad Request",一看發現是請求裡沒有包含正確的Captcha-Token。那為什麼會沒有呢,它在localStorage裡面找這個Token,但是用的方法就是「for (let i = 0; i < 20; i++)」,那如果超過了20條data而又Token不在前20條裡面不就找不到了嘛。要是有人在用的話就一堆人跑底下說用不了、用不了啦

非常有用的建议,楼上也是这么说的

以前也因为数组吃过不少亏,要么有数组下标溢出要么就是你说的这种情况

不过大伙都这么建议,那我找个时间改一改吧:YangTuo_SE:

链接到点评
9 分钟前,furobert说道:

非常有用的建议,楼上也是这么说的

以前也因为数组吃过不少亏,要么有数组下标溢出要么就是你说的这种情况

不过大伙都这么建议,那我找个时间改一改吧:YangTuo_SE:

我也是编程菜鸡,嘿嘿:SS08:学c语言的时候就觉得数组处理溢出很麻烦,JavaScript直接数组.length就行

链接到点评
刚刚,fensishanbeilati说道:

我也是编程菜鸡,嘿嘿:SS08:学c语言的时候就觉得数组处理溢出很麻烦,JavaScript直接数组.length就行

已经改好了:YangTuo_Y:还好都不是很麻烦,简单替换一下循环里面的就好了(应该没漏掉什么吧?)自己测试一下也都OK

furobert在一位不愿透露姓名的神必人引导下,踏上了寻找爱丽丝之旅,获得3节操作为旅费

链接到点评

创建帐号或登入才能点评

您必须成为用户才能点评

创建帐号

在我们社区注册个新的帐号。非常简单!

注册新帐号

登入

已有帐号? 登入

现在登入
×
×
  • 新建...

重要消息

为使您更好地使用该站点,请仔细阅读以下内容: 使用条款