Tampermonkey中使用GM_xmlhttpRequest对多个链接同时进行请求,将最先返回结果的值进行条件判断,要是符合条件不再获取后面的请求结果的值,要是不符合,依次获取第二个、第三个的返回结果的值进行条件判断,同样符合条件不再获取后面的,要是不符合条件,同样获取后面的值 使用AI写了一段代码,看注释和实际结果,貌似是先获取一个请求结果,进行判断,然后再等所有剩下的结果请求完成,再进行条件判断,并非依次等获取到请求结果就进行条件判断 const promises = []; // 要请求的链接列表 var urlavl = 'https://www.aaa.com'; var urlero = 'https://www.bbb.com'; var urlkuti = 'https://www.ccc.com'; var urls = [urlwiki,urlero,urlkuti]; // 遍历链接列表,发起请求并存储 Promise 和对应条件 urls.forEach((url) => { promises.push(new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url: url, onload: function(response) { let domNew = new DOMParser().parseFromString(response.responseText, 'text/html'); resolve(domNew); }, onerror: function(error) { resolve('请求错误' + url); } }); })); }); Promise.race(promises) .then((data) => { // 获取 response 和 condition // 判断第一个完成的请求是否满足对应条件 if(data.indexOf('#') > -1) { console.log(data); // 取消其他未完成的请求 (可选) promises.forEach(promise => { if (promise.cancel) { promise.cancel(); } }); } else { // console.log(`链接不满足条件,等待其他结果...`); // 使用 Promise.all() 等待所有请求完成 Promise.all(promises) .then(results => { // 遍历所有结果,查找满足对应条件的结果 console.log('重新查找') results.forEach((data) => { if(data.indexOf('#') > -1) { console.log(data); // console.log(`链接满足条件:`, response); } }); }) .catch(error => { console.error("请求出错:", error); }); } }) .catch(error => { console.error("请求出错:", error); });
撰写油猴脚本这么久,第一次遇到这种棘手的情况,有没有哪些突破的思路呢? 需求链接:"https://zhuanlan.zhihu.com/write" (https://link.segmentfault.com/?enc=tD1wYI7iSUbxcb%2BFrkJAUw%3D%3D.plUQuBODloTVRK%2FK1BlXTpd45A2ZTor0cauNwvxOuyLRQM5aGB34JezMViAJTqo8) 需求是在这个链接的内置编辑器里使用脚本发布一篇文章,要有标题,正文,话题。 但是click()用了等于没用,甚至连聚焦都做不到;还有想直接把文本植入网页里面,但是植入以后仍然判定没有变化,除非利用键盘按键手动编辑一下文本内容。 所以有没有大佬可以指点一下啊,我该怎么办呢? 我想自己手写一个浏览器扩展,不知道有助于解决这个问题吗? 前提:不使用按键精灵,python等外置工具。因为考虑到跨平台操作,不只是在电脑上,还要在手机端操作。