#独家
如何让页面内符合条件的多个Dom节点同时执行httprequest分别接受2秒后返回的值?

2023-06-24 0 982

一个油猴子脚本,通过查找页面也符合条件的a标签,对标签元素文本执行httpRequest,2秒左右返回值,然后将返回的值修改a标签文本

<a>第一个元素</a>
<a>第二个元素</a>
<a>第三个元素</a>
<a>第四个元素</a>

请求后,修改为

<a>第一个元素[t]</a>
<a>第二个元素[t]</a>
<a>第三个元素[t]</a>
<a>第四个元素[t]</a>

从页面取符合条件a标签内容,httpRequest请求后,返回t的值

定义全局t变量后,还未获取到前一个a标签内容请求返回的值并修改节点内容,第二个a标签节点的内容就开始执行httpRequest请求,t的值被修改,无法分别对节点同时请求,修改原节点内容

使用2个setTimeout,依次对每个a标签节点内容进行httpRequest请求并修改页面元素,等待时间太长,能否同时执行请求,分别修改对应的a标签元素内容添加返回的值?

    let Result = '';
    var t = '';
function getInfo(url) {
        GM_xmlhttpRequest({
            method: 'GET',
            url: url,
            onload: function (res) {
                Result = res.status;
                let domNewx = new DOMParser().parseFromString(res.responseText, 'text/html');
                let info = domNewx.querySelectorAll('.info')[0];
                if(info) {

                    if(info.children[1].querySelector('.size'))
                        t = info.children[1].querySelector('.size').innerHTML.split(' ')[5];


                } else {
                        //console.log('undefined');
                    Result = 404;
                }
            },
            onerror: function (result) {
                console.log(result);
            },
        });
    }
document.querySelectorAll('a').forEach(function (value, index) {
            if(value.nextSibling.className == 'symbol') {
                setTimeout(() => {
                    getInfo(url + value.innerHTML);
                    setTimeout(() => {
                        if(t) {

                             value.innerHTML = value.innerHTML + '[' + t + ']';
                               
                        }
                        //console.log(t);

                        t = '';
                        //}, 2000*(index - 99 + 1))
                    }, 2000)
                }, 2500*(index + 1))
            }
        });
function getInfo(url) {
    return new Promise((resolve, reject) => {
        GM_xmlhttpRequest({
            method: 'GET',
            url: url,
            onload: function (res) {
                let domNewx = new DOMParser().parseFromString(res.responseText, 'text/html');
                let info = domNewx.querySelectorAll('.info')[0];
                let t = '';
                if(info && info.children[1].querySelector('.size')) {
                    t = info.children[1].querySelector('.size').innerHTML.split(' ')[5];
                }
                resolve(t);
            },
            onerror: function (result) {
                reject(result);
            },
        });
    });
}

然后:

document.querySelectorAll('a').forEach(function (value, index) {
    if(value.nextSibling.className == 'symbol') {
        getInfo(url + value.innerHTML).then(t => {
            if(t) {
                value.innerHTML = value.innerHTML + '[' + t + ']';
            }
        });
    }
});
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 如何让页面内符合条件的多个Dom节点同时执行httprequest分别接受2秒后返回的值? https://www.jkxiazai.com/1849.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务