sgstvbdy 发表于 2024-12-22 08:35:39

edge

// 定义变量A为null(表示空)
let A = null;

// 使用Promise来进行定时循环操作,并确保A的值被正确设置
function loopAndFindElement(max) {
    return new Promise((resolve) => {
      (function checkElements(i) {
            // 如果已经找到了元素,则不再继续循环
            if (A === true) {
                resolve();
                return;
            }

            // 如果循环次数达到最大值且未找到元素,设置A为假并结束
            if (i >= max) {
                A = false;
                console.log("循环结束,未找到目标元素。");
                resolve();
                return;
            }

            // 遍历页面中的所有元素(这里以p标签为例,你可以根据需要调整选择器)
            const elements = document.querySelectorAll('p'); // 也可以使用更具体的选择器

            for (const element of elements) {
                // 检查元素的文本内容是否等于"测试"
                if (element.textContent.trim() === "测试") {
                  // 找到元素后执行点击操作
                  element.click();
                  // 设置A为真
                  A = true;
                  console.log("找到了元素并已点击。");

                  // 立即退出函数
                  resolve();
                  return;
                }
            }

            // 如果没有找到元素,等待1秒再进行下一次循环
            setTimeout(() => checkElements(i + 1), 1000);
      })(0); // 立即执行函数,从第0次开始
    });
}

// 开始循环,总共进行10次尝试
loopAndFindElement(10).then(() => {
    // 所有循环尝试完成后,输出变量A
    console.log("最终变量A的值为:", A);
    A;
});
控制台是没问题的,A   false但是异步提交js返回结果是空因为不能用循环?还是什么原因
// 注意:这段代码应该在浏览器环境中运行,例如通过浏览器的开发者工具控制台。

揰掵佲 发表于 2024-12-22 08:35:40

其实已经执行了.只是你EDGE没有监控控制台消息,所以导致没办法看到在火山输出而已....


用这个 window.chrome.webview.postMessage(A);
window.chrome.webview.postMessage("最终变量A的值为:"+A);就可以输出了

Edge浏览框_收到信息 接收事件 这里如果是购买了 实战的收费课程 看看CDP协议那几课

sgstvbdy 发表于 2024-12-22 18:54:44

揰掵佲 发表于 2024-12-22 08:35
其实已经执行了.只是你EDGE没有监控控制台消息,所以导致没办法看到在火山输出而已....




感觉还是不能加循环之类的还没运行完 就收到消息了

揰掵佲 发表于 2024-12-22 18:58:23

sgstvbdy 发表于 2024-12-22 18:54
感觉还是不能加循环之类的还没运行完 就收到消息了
循环无所谓的 异步 最后还是会反馈结果的,
我说的不是 运行JS_异步 是 指自己写的JS代码的异步
页: [1]
查看完整版本: edge