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
查看完整版本: 异步获取元素的脚本库 ElementGetter