40252492
发表于 2022-8-19 17:51:06
大佬大佬~我的JS脚本今天突然失效了,然后我发现F12里报错的是// @require这行声明,过来一看果然是更新了,请问脚本猫没有那种自动更新您写的。。。(我不知道名词)这个东东的功能吗?
cxxjackie
发表于 2022-8-19 21:12:28
40252492 发表于 2022-8-19 17:51
大佬大佬~我的JS脚本今天突然失效了,然后我发现F12里报错的是// @require这行声明,过来一看果然是更新了 ...
有是有但最好不要这么做,外部库是别人写的代码,如果别人偷偷更新一些恶意代码,自动更新那不是会把你自己的脚本坑了吗?倒是报错很奇怪,按理来说引用旧版的库应该不会报错才对,我不知道脚本猫是什么机制,油猴是没问题的。会不会是你无意中触发了旧版的bug,而新版已经修复?
如果确实想自动更新这个库,请用以下地址引入:
https://scriptcat.org/lib/513/latest/ElementGetter.js
player
发表于 2022-8-25 12:28:41
本帖最后由 player 于 2022-8-25 12:34 编辑
<tr class="weu- table-row" >
<td class="weu-table-column-y65nsZ weu-table- column-center">.</td>
<td class="weu-table-column- pCs0aP weu-table- column-center">.</td>
<td class="weu-table-column- I2PdnS weu-table- column-center">.</td>
<td class="weu-table-column-rt0Nxr weu-table- column-center">.</td>
<td class="weu-table-column-11djLy weu-table- column-center">.</td>
<td class="weu-table-column-Gmiepa weu-table- column-center">.</td>
<td class="weu-table-column-chBeEK weu-table- column-center">.</td>
<td class="weu-table-column-CiROmt weu-table- column-center">.</td>
<td class="weu-table-column-0FogNq weu-table- column-center">.</td>
<td class="weu-table-column- lwREtp weu-table- column-center">.</td>
<td class="weu-table-column- ZQB9YN weu-table- column-center">.</td>
</tr>
我想获得第一个元素拿到值
elmGetter.each("tr.weu-table-row > td.weu-table-column-center:nth-child(1) > .weu-table-cell > span", document, span1 => {
let taskId = span1.innerText;
});
我想拿到第九个元素填充值
elmGetter.each("tr.weu-table-row > td.weu-table-column-center:nth-child(10) > .weu-table-cell > span", document, span2 => {
span2.innerText = result;
});
这样分别获取元素,填充值好像被覆盖了。
试过嵌套,好像在循环上有问题,没有预期效果
elmGetter.each(xxx,xxx,xxx=>{
elmGetter.each(xxx,xxx,xxx=>{xxx});
}
);
用了笨办法,效果是实现了,但总感觉哪里不对劲。
elmGetter.each("tr.weu-table-row > td.weu-table-column-center:nth-child(10) > .weu-table-cell > span", document, span2 => {
let taskId_Node= ((((span2.parentNode).parentNode).parentNode).firstElementChild);
});
在同父类,不相邻的元素,想用到each,应该怎么分别获取?
cxxjackie
发表于 2022-8-25 12:56:12
player 发表于 2022-8-25 12:28
.
.
我觉得你最后用的那种方案就挺好的啊,或者以父元素为选择目标:
elmGetter.each('tr.weu-table-row', document, tr => {
const span1 = tr.querySelector('td.weu-table-column-center:nth-child(1) > .weu-table-cell > span');
const span2 = tr.querySelector('td.weu-table-column-center:nth-child(10) > .weu-table-cell > span');
});
player
发表于 2022-8-30 20:48:17
遇到了用了get或each还是获取不到元素的情况,只能用定时器延迟几秒才能获取到
cxxjackie
发表于 2022-8-30 21:03:07
player 发表于 2022-8-30 20:48
遇到了用了get或each还是获取不到元素的情况,只能用定时器延迟几秒才能获取到 ...
请具体描述一下,相关的网站和脚本代码,有没有错误信息等等。
player
发表于 2022-8-30 21:52:38
cxxjackie 发表于 2022-8-30 21:03
请具体描述一下,相关的网站和脚本代码,有没有错误信息等等。
```
const elmGetter = new ElementGetter();
let btn = document.querySelector("#root > div > div > div > div > div > div:nth-child(2) > div:nth-child(1) > button > span");
console.log("原生:" + btn);
elmGetter.get("#root > div > div > div > div > div > div:nth-child(2) > div:nth-child(1) > button > span").then(button => { console.log("get:" + button) });
elmGetter.each("#root > div > div > div > div > div > div:nth-child(2) > div:nth-child(1) > button > span", document, button => {
console.log("each:" + button);
});
setTimeout(() => {
let btn = document.querySelector("#root > div > div > div > div > div > div:nth-child(2) > div:nth-child(1) > button > span");
console.log("定时器:");
console.log(btn);
}, 3000);
```
输出:
没有报错,原生选择器为null,get 和each无输出信息,定时器正常。控制台正常。!(https://i.bmp.ovh/imgs/2022/08/30/35b047cbbbb7b797.png)
cxxjackie
发表于 2022-8-30 22:17:05
player 发表于 2022-8-30 21:52
```
const elmGetter = new ElementGetter();
网站是哪个?
player
发表于 2022-8-31 13:06:43
cxxjackie 发表于 2022-8-30 22:17
网站是哪个?
那没办法了,网站是内网。网站是vue,有没有可能受生命周期影响
cxxjackie
发表于 2022-8-31 20:15:11
player 发表于 2022-8-31 13:06
那没办法了,网站是内网。网站是vue,有没有可能受生命周期影响
这个就有点盲人摸象了,光看代码看不出问题在哪,库版本是最新的1.2.0吗?这个页面下获取其他元素有没有问题?还有选择器的写法,你这个是自动生成的吧,最好还是手动写一下。
有一种极小的可能是MutationObserver被劫持过,可以试试在document-start阶段new ElementGetter,然后在onload里get和each。
页:
1
2
3
[4]
5
6
7
8
9
10
11
12
13