40252492
发表于 2022-10-21 11:53:39
本帖最后由 40252492 于 2022-10-21 12:38 编辑
> 本帖最后由 40252492 于 2022-10-21 12:37 编辑
> 本帖最后由 40252492 于 2022-10-21 12:35 编辑
> 本帖最后由 40252492 于 2022-10-21 12:32 编辑
> (forum.php?mod=redirect&goto=findpost&pid=39306&ptid=2862)
> > 试试这个:
大佬您好,我试了一下,没有生效,没有显示“测试文本”,还是英文原文
有个报错,我试着把elmGetter改成ElementGetter,还是没生效(代码里不报错了,但控制台报错依旧)
!(data/attachment/forum/202210/21/114634caklkogzlohnfooh.png)
(开头是我从原JS里粘的,引用的库是我传到greasyfork上的您的1.2.0版本,他们不许引用外部库,没有加允许那啥那行)
!(data/attachment/forum/202210/21/114532p4vy23rp79550ggr.png)
您看哇,还是英文原文
我仔细看了一下,html里有2行,
第1行的文本是会变的,ID#selectCardsReminder,文本有各种,“请选1张卡”、“请选2张卡”和“丢弃1张卡”等等;
第2行文本是不变的,ID#waiting-for-opponent,对手操作的时候就会显示“Waiting for your opponent”就是“等待你的对手”
也有的时候鼠标旁边没有这个悬浮窗
(再往上一行有个“transform: translateX(870px) translateY(598px)”,好像是识别鼠标在网页里的坐标,我移动鼠标数字就会跟着变化)
!(data/attachment/forum/202210/21/122024vqvaurztqyqqaqod.png)
打开网页就能看到这个控制台的报错
进入战斗之后(出现这个悬浮窗之后)还会报一个错
!(data/attachment/forum/202210/21/123131d22w6s6q6quqxxqc.png)
请您帮忙看看啦~~~谢谢!Q3Q
cxxjackie
发表于 2022-10-21 20:40:45
40252492 发表于 2022-10-21 11:53
> 本帖最后由 40252492 于 2022-10-21 12:37 编辑
> 本帖最后由 40252492 于 2022-10-21 12:35 编辑...
报错是因为没有实例化,ElementGetter是一个类,elmGetter是他的实例,因为你脚本里已经实例化过一次了我就没加。实例的命名其实可以叫任何名字,比如你脚本里好像叫getwenben,改成一样的就行了,我写的主要是一个函数,下面的each只是示范他的用法。
王一之
发表于 2022-10-21 23:38:36
woc,问题贴60多楼了。。。
另外哥哥脚本也可以发脚本站和脚本板块哦
https://scriptcat.org/search,https://bbs.tampermonkey.net.cn/forum-2-1.html
40252492
发表于 2022-10-25 12:10:12
王一之 发表于 2022-10-21 23:38
woc,问题贴60多楼了。。。
另外哥哥脚本也可以发脚本站和脚本板块哦
一 ——之——哥——{:4_93:}
40252492
发表于 2022-10-25 13:47:20
本帖最后由 40252492 于 2022-10-25 13:55 编辑
> 本帖最后由 40252492 于 2022-10-25 13:51 编辑
> (forum.php?mod=redirect&goto=findpost&pid=39361&ptid=2862)
> > 报错是因为没有实例化,ElementGetter是一个类,elmGetter是他的实例,因为你脚本里已经实例化过一次了我 ...
我大概明白了,我把elmGetter改成了getwenben,加了一行括起来的那个,对吧对吧?~OvO
!(data/attachment/forum/202210/25/135335jrm4lga9fu64aebm.png)
您看您看,现在报错变了,并且网页好像会未响应
(下图右边红箭头就是,会变的提示是空的的情况,会显示下面一行不变的提示;也有的时候鼠标旁边没有悬浮窗)
![无标题.png](data/attachment/forum/202210/25/135213usq096bkskososhv.png)
请您再帮忙看看啦~谢谢!
!(data/attachment/forum/202210/25/134701nbm82x82i13m1184.png)
cxxjackie
发表于 2022-10-25 23:06:59
40252492 发表于 2022-10-25 13:47
> 本帖最后由 40252492 于 2022-10-25 13:51 编辑
> (forum.php ...
我没账号进不了对战,而且你这个网站好卡啊,只能凭感觉给你看了。按理来说应该不会有问题,可能是他读取了原来的文本用来做判断之类的,直接替换导致读取出错,把
div.innerText = '测试文本';
这句改成:
console.log(div.innerText);
然后看看控制台的输出,是否每次文本变化都有监听到,有的话就不是函数的问题。
40252492
发表于 2022-10-27 10:14:20
cxxjackie 发表于 2022-10-25 23:06
我没账号进不了对战,而且你这个网站好卡啊,只能凭感觉给你看了。按理来说应该不会有问题,可能是他读取 ...
1、这个网站的服务器在加拿大,部分地区直连丢包严重,需要轻功
2、如您方便的话,我可以注册2个帐号给您测试用
3、我改了代码,↓这是返回的结果,请您帮忙看看啦谢谢!(=3=)/
!(data/attachment/forum/202210/27/101245nzpa722jbq4a4ehc.png)
顺便请问,这个程序应该是什么效果呢?是把所有这个ID的文本,都替换成测试文本吗?
cxxjackie
发表于 2022-10-27 12:11:25
40252492 发表于 2022-10-27 10:14
1、这个网站的服务器在加拿大,部分地区直连丢包严重,需要轻功
2、如您方便的话,我可以注册2个帐号 ...
这个看起来应该有正确监听到文本改动,那个测试文本是我随便写的,试试这样:
const translation = new Map();
translation.set('Select 1 card', '选择 1 张卡');
translation.set(/Select (\d+) cards/, '选择 $1 张卡');
translation.set('Discard 1', '丢弃 1 张卡');
translation.set(/Discard (\d+)/, '丢弃 $1 张卡');
translation.set('Attack!', '攻击!');
getwenben.each('#selectCardsReminder', document, div => {
listeneTextChange(div, () => {
let text = div.innerText;
if (text) {
for (const of translation) {
text = text.replace(k, v);
}
}
div.innerText = text;
});
});
我估计是数字读取的问题,用正则处理了一下。其他翻译你可以照着格式自己加,我这个写的可能前后少空格之类的,看图看不出来,你自己试试有没有问题。
40252492
发表于 2022-10-28 14:00:16
本帖最后由 40252492 于 2022-10-28 14:03 编辑
> 本帖最后由 40252492 于 2022-10-28 14:01 编辑
谢谢大佬
我试了一下,进入战斗之后,到我选择卡片的地方,就是Select 1 card这个文本出现的时候,网页会直接未响应,只能关掉再开,反复几次都这样。(后攻在对手选完卡之后 自己选卡的时候未响应,先攻先选卡 直接未响应)
目前代码是下面这样的,我把帐号密码私聊给您,可能得麻烦进入战斗试一下啦谢谢!!!QAQ
```
// ==UserScript==
// @name 测试
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1
// @description测试
// @author 库X崔羊羊
// @match https://dulst.com/overdulst*
// @icon https://www.google.com/s2/favicons?domain=dulst.com
// @require https://greasyfork.org/scripts/450726-elementgetter1-2-0/code/ElementGetter120.js?version=1089539
// @license MIT
// ==/UserScript==
/* globals ElementGetter */
function listeneTextChange(target, callback) {
const mutationObserver = window.MutationObserver || window.WebkitMutationObserver || window.MozMutationObserver;
const observer = new mutationObserver(mutations => {
for (const mutation of mutations) {
if (mutation.type === 'characterData') callback();
for (const node of mutation.addedNodes) {
if (node.nodeType === 3) callback();
}
}
});
observer.observe(target, {
childList: true,
characterData: true,
subtree: true
});
}
const translation = new Map();
translation.set('Select 1 card', '选择1张卡');
translation.set(/Select (\d+) cards/, '选择$1张卡');
translation.set('Discard 1', '丢弃1张卡');
translation.set(/Discard (\d+)/, '丢弃$1张卡');
translation.set('Attack!', '攻击!');
const getwenben = new ElementGetter();
getwenben.each('#selectCardsReminder', document, div => {
listeneTextChange(div, () => {
let text = div.innerText;
if (text) {
for (const of translation) {
text = text.replace(k, v);
}
}
div.innerText = text;
});
});
```
cxxjackie
发表于 2022-10-28 20:58:59
40252492 发表于 2022-10-28 14:00
> 本帖最后由 40252492 于 2022-10-28 14:01 编辑
谢谢大佬
我进不了对战,太卡了,不过猜到原因了,是因为在监听文本修改的回调函数里又修改了文本,死循环了,把:
div.innerText = text;
这句改成:
if (div.innerText !== text) div.innerText = text;