harglo 发表于 2021-7-10 15:11

JavaScript学习之纯js编写原神抽卡分析,带注释

效果图:


javascript: (function() {
    function f() {
      var fourStar=0;   //四星数量
      var fiveStar=0;   //五星数量
      var final=0;      //最后一页抽了多少次
      var total=0;      //总共多少抽
      var flagGolden=0;   //找到五星后置为1
      var c=0;            //第一次到达五星的抽奖次数,用于判断已经有多少抽未出五星
      var flag=0;         //记录抽到五星前的抽奖数量。
      var p=0;            //前一页页数
      //计算:
      function count() {
            var tempFour=0;   //记录每一页的四星数量
            var tempFive=0;   //记录每一页的五星数量
            var page = document.evaluate('//span[@class="page-item"]/text()',document).iterateNext();//当前页页数
            //判断已经有多少抽未出五星:
            var golden=document.evaluate('//div[@class="log-item-row"]',document);
            var node = golden;
            if(flagGolden==0){
                while (node){
                  node=golden.iterateNext(); //枚举下一个元素
                  if(node!=null){
                        c++;
                        if(node.innerHTML.indexOf("item_5") != -1){   //有item_5证明有五星
                            flagGolden=1;
                            flag=c-1;       //记录已经有多少抽未出五星
                        }
                  }
                }
            }
            //记录四星数量:
            var xPathResult = document.evaluate('//span',document);
            var node1 = xPathResult;
            while (node1){
                node1=xPathResult.iterateNext(); //枚举下一个元素
                if(node1!=null){
                  tempFour++;
                }
            }
            fourStar=fourStar+tempFour;
            //记录五星数量:
            var five=document.evaluate('//span',document);
            var node2=five;
            while (node2){
                node2=five.iterateNext(); //枚举下一个元素
                if(node2!=null){
                  tempFive++;
                }
            }
            fiveStar=fiveStar+tempFive;
            console.log("第"+page.textContent+"页");
            console.log("四星数量为:"+fourStar);
            console.log("五星数量为:"+fiveStar);
            //点击下一页:
            function find() {
                if(document.evaluate('//*[@id="J_page_wrapper"]/span',document)){//其实这个元素是一直存在的
                  if(Number(page.textContent)>p){   //所以通过页数判断,是否要点击下一页,但这样会在最后一页计算两次
                        p=Number(page.textContent);
                        document.evaluate('//*[@id="J_page_wrapper"]/span',document).iterateNext().click();//点击下一页
                        setTimeout(count,1000);   //设置延时,统计太快会计算有误
                  }else {
                        //统计最后一页抽了多少次:
                        var finish=document.evaluate('//div[@class="log-item-row"]',document);
                        var node3 = finish;
                        while (node3){
                            node3=finish.iterateNext(); //枚举下一个元素
                            if(node3!=null){
                              final++;    //记录最后一页的抽卡数量。
                            }
                        }
                        total=6*(Number(page.textContent)-1)+final;   //总抽卡数量。
                        console.log("近6个月总共"+String(total)+"抽");
                        console.log("四星数量为:"+String(fourStar-tempFour));    //-tempFour因为最后一页会计算两次
                        console.log("五星数量为:"+String(fiveStar-tempFive));    //-tempFive因为最后一页会计算两次
                        console.log("已经"+String(flag)+"抽未出五星");
                        alert("近6个月总共"+String(total)+"抽\n"+"四星数量为:"+String(fourStar-tempFour)+"个\n"+"五星数量为:"+String(fiveStar-tempFive)+"个\n"+"已经"+String(flag)+"抽未出金");
                  }
                }
            }
            find();
      }
      count();
    }
    //设置按钮:
    var d1 = document.getElementsByClassName('type-select-container');
    var d2 = document.createElement('div');
    d2.style.cssText = "border: .02rem solid #b5b2ae;border-radius: .05rem;color: #757575;background-color: #dbd7d3;width:150px;height:63.6px;position:relative;left:35px;font-size: .22rem;text-align:center;line-height:63.6px;cursor: pointer;";
    d2.setAttribute("title","要先定位到抽奖列表的第一页");
    d1.appendChild(d2);
    var t2=document.createTextNode("开始抽卡分析");
    d2.appendChild(t2);
    d2.onclick=f;
})();

pangiggs 发表于 2021-7-10 16:01

学习了,谢谢分享{:1_893:}

yjn866y 发表于 2021-7-10 19:56

鼓励鼓励,学习了。。

胆小鬼灬 发表于 2021-7-15 15:11

学习了 谢谢分享

我家有条大大狗 发表于 2021-8-26 12:08

非洲人不配使用,常驻73发,up池67发愣是没出一个黄......:curse:

k99999999 发表于 2021-8-26 15:02

学习了 ~涨姿势了~

寒流溯雪灬 发表于 2021-8-26 17:02

感谢楼主,抽卡当娱乐了哈哈哈哈
页: [1]
查看完整版本: JavaScript学习之纯js编写原神抽卡分析,带注释