星之子 发表于 2024-11-30 17:17:01

【脚本求助】冷却后自动回复 和 PAUSE账本 的兼容问题

本帖最后由 星之子 于 2024-12-1 10:47 编辑

动机
之前我写过一篇 帖子 介绍了自己回帖时使用的一套丝滑小连招:Ctrl+Q跳到文本框,Win+H语音输入,Ctrl+Enter回帖,Ctrl+Tab下一帖。这套连招唯一会卡顿的地方就是60秒的CD,而狐狸的 【油猴脚本】冷却后自动回复1.1 这个脚本则很好地解决了这一痛点,从此一气呵成。

需求
狐狸的脚本我设置为“自动回复后不关闭标签页”。但标签页在后台完成回帖、再去查看的时候,本应存在的“橙色条”却没有弹出,大概这样:

而 PAUSE账本 通过监测“橙色条”弹出的内容记账。它能正常记录,说明“橙色条”依然存在,只是出于某些原因看不见了。

这个橙色条看着还是很爽的,尤其是辉石发力爆出高额金币的时候,如果不能截图真的很遗憾。
希望有大佬能出手,解决两个脚本的兼容问题,在兼顾丝滑小连招的流畅爽感的同时,把橙色条的惊喜爽感找回来,感激不尽惹!


2024年12月1日10点43分 补充:
感谢@源子 大佬的慷慨相助,测试了大佬提供的这个版本,但遇到了三个问题:
1. 和 冷却后自动回复 的兼容不太好,经常会出现字数不够的蓝条顶替掉橙条的情况。
2. 偶尔会导致 PAUSE EA 账本没有记录到(我测试了20条丢了3条)。
3. 在购买附件的时候,消耗金币的橙色条会反复跳出,直到阴影重叠在一起变成下图这样。


源子 发表于 2024-11-30 17:17:02

本帖最后由 源子 于 2024-12-1 15:47 编辑

咱也不知道你这两个脚本冲突在哪,但既然是橙框框消失的原因,那干脆就简单粗暴点直接固定在页面让它永不消逝好了。在pause脚本中找到下面这个函数,直接覆盖即可。主要是这种需要回复才能测试的脚本实在太麻烦了,样本量很少,只能力大砖飞了。在我的测试中,橙框框确实已经永固了,但是和自动回复脚本的那一部分会产生什么幺蛾子就不清楚了。

2024/12/01 根据反馈,发现这类提示元素蓝框和橙框用的是同一个Id【ntcwin】,原pause脚本用的是【creditpromptdiv】,之前没注意到这个问题导致会出现复制了不该复制的内容,多次重复复制不断重叠就出现了阴影。至于购买附件的问题,购买附件时和回复奖励用的橙框框是同类型的元素,实际上原pause脚本在页面加载的10s内购买附件也会弹出提示框,原脚本的逻辑如此,这种非预期的信息弹窗原脚本代码层面也没有规避,因为泥潭的网页代码并没有对这两种类型的信息做区分,后续我尝试检测弹窗的文本看看是否符合特定格式,目前测试下来是没什么大问题。同时不再像原脚本那样采用阻塞型的弹窗,修改成论坛原生的橙框框,只是把存在时间延长了亿点点,需要隐藏时点一下橙框框就能自动隐藏。
另外有个问题,你的PAUSE脚本用的是哪个版本的,目前我这里给出的是EA版对应的代码,并不是持久版
// 主要负责暂停和记录的主函数
// limitTimes 为超时限制,类型整数,例如10代表最多检测10次,超时仍未抓取到则关闭
// playSound 则表示是否播放音效
function pauseAndSave(limitTimes) {

    // 开始检测页面并抓取奖励内容
    const timer = setInterval(() => {
      // 检测是否找到了 creditpromptdiv
      const creditPromptDiv = document.getElementById("creditpromptdiv");

      if (creditPromptDiv) {
            // 检查 creditPromptDiv 中的文本内容是否包含“勋章功能触发”
            const textContent = creditPromptDiv.textContent || creditPromptDiv.innerText;

            if (textContent.includes("勋章功能触发")) {

                // 从 creditPromptDiv 向上查找直到找到 ntcwin
                let parentNode = creditPromptDiv;
                while (parentNode && parentNode.id !== "ntcwin") {
                  parentNode = parentNode.parentNode;
                }

                // 如果找到了 ntcwin
                if (parentNode && parentNode.id === "ntcwin") {
                  console.log("找到 ntcwin 的父级节点:", parentNode);

                  // 复制弹窗并添加到目标容器中
                  var appendParent = document.getElementById('append_parent');
                  if (appendParent) {
                        // 复制 ntcwin 节点
                        var clonedNode = parentNode.cloneNode(true);

                        // 修改复制节点的 ID,确保它不会被重复检测
                        clonedNode.id = "ntcwin_cloned_" + Date.now(); // 给复制的节点一个唯一的 ID

                        // 将复制的弹窗添加到目标容器中
                        appendParent.appendChild(clonedNode);

                        // 为复制后的节点添加点击事件,使其消失
                        clonedNode.addEventListener("click", function() {

                            clonedNode.style.display = "none";// 隐藏复制的节点
                           
                            // 或者删除复制的节点
                            // clonedNode.remove();// 删除复制的节点
                            console.log("复制的节点已点击并隐藏");
                        });

                        // 记录到控制台
                        console.log(clonedNode);
                  }

                  // 保存内容
                  extractAndSave(clonedNode);

                  // 清除定时器
                  clearInterval(timer);
                }
            }
      }

      console.log("记录器工作中...");

      // 限制次数减一
      limitTimes -= 1;

      // 限制次数为0不再检测
      if (limitTimes == 0) {
            clearInterval(timer);
            console.log("超时,已自动退出");
      }
    }, 1000);

    return 0;
}













页: [1]
查看完整版本: 【脚本求助】冷却后自动回复 和 PAUSE账本 的兼容问题