|
本帖最后由 源子 于 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;
- }
复制代码
|
- 福黎
:被蓝色框顶了可能是回复脚本多次触发提交导致的,可以在复制弹窗的时候,把弹窗id改一下,让他不被原函数顶掉就行
-
|