tansuo 发表于 2023-11-10 18:13:05

模拟点击事件每次延时5秒钟

想让模拟点击事件每次延时5秒钟,可是没有反应
function monitorDomChange() {
 randomChars.forEach(function(value) {
   console.log(value);
    // 模拟点击事件
    if (value) {
       setTimeout(() => {
    // 在这里执行您想要的操作
       const event = new MouseEvent('click', {
             bubbles: true,
             cancelable: true,
             view: unsafeWindow,
         });
            value.dispatchEvent(event);
          }, 5000);
      //setInterval( value.dispatchEvent(event), 5000);
      
      //debugger
      const targetDivSelector = '#endText';
      const targetDiv = document.querySelector(targetDivSelector);
              if (targetDiv) {
                console.log('发现div:', targetDiv);
                // 在这里可以对目标div进行操作或获取需要的数据
              } else {
                console.log('没有发现div');
              }
            }
          }      
      );
    }

cxxjackie 发表于 2023-11-10 18:13:06

tansuo 发表于 2023-11-11 10:00
> (forum.php?mod=redirect&goto=findpost&pid=72048&ptid=5333)
...

把你的点击操作等代码写在 do something 那里,不要改前面的东西,前面代码的作用就是暂停5秒,类似其他语言里的sleep。

李恒道 发表于 2023-11-10 20:29:50

[油猴脚本开发指南]包装异步代码为同步代码
https://bbs.tampermonkey.net.cn/thread-883-1-1.html

cxxjackie 发表于 2023-11-10 22:28:46

async function monitorDomChange() {
    // 不要用forEach
    for (const value of randomChars) {
      console.log(value);
      await new Promise(r => setTimeout(r, 5000));
      // do something
    }
}

tansuo 发表于 2023-11-11 10:00:41

本帖最后由 tansuo 于 2023-11-11 18:22 编辑

> (forum.php?mod=redirect&goto=findpost&pid=72048&ptid=5333)
> >

大佬,我的代码现在实现延迟模拟点击5秒了,但是只实现模拟点击一次,console.log('发现div:', targetDiv);没有打印,debugger调试后 到await new Promise(resolver => setTimeout(() => {这里就停了

async function monitorDomChange() {
   for (const value of randomChars) {
   console.log(value);
   //debugger
    // 模拟点击事件
    if (value) {
      await new Promise(resolver => setTimeout(() => {
    // 在这里执行您想要的操作
       const event = new MouseEvent('click', {
             bubbles: true,
             cancelable: true,
             view: unsafeWindow,
         });
            value.dispatchEvent(event);
          }, 5000));
      const targetDivSelector = '#endText';
      const targetDiv = document.querySelector(targetDivSelector);
            if (targetDiv) {
                console.log('发现div:', targetDiv);
                // 在这里可以对目标div进行操作或获取需要的数据
            } else {
                console.log('没有发现div');
            }
            }
          }
    }

tansuo 发表于 2023-11-11 19:00:00

李恒道 发表于 2023-11-10 20:29
[油猴脚本开发指南]包装异步代码为同步代码
https://bbs.tampermonkey.net.cn/thread-883-1-1.html ...

大神,看看我回cxxjackie大神的帖子,使用有什么问题

李恒道 发表于 2023-11-11 20:54:50

tansuo 发表于 2023-11-11 19:00
大神,看看我回cxxjackie大神的帖子,使用有什么问题
c大给的是例子
跟之前你开的那个帖子一个问题
你不理解自己的业务需求
别人很难直接搞同步异步问题
容易出现自己不理解自己代码,但是又没法改
还是认真学学吧
感觉完全没静下心读资料...
跟上个问题几乎一模一样

granded 发表于 2023-11-11 20:58:59

本帖最后由 granded 于 2023-11-11 21:04 编辑

resolve没回调不是一直卡吗?不懂

tansuo 发表于 2023-11-11 21:39:25

granded 发表于 2023-11-11 20:58
resolve没回调不是一直卡吗?不懂

没有回调是什么意思?

tansuo 发表于 2023-11-12 17:19:27

cxxjackie 发表于 2023-11-10 18:13
把你的点击操作等代码写在 do something 那里,不要改前面的东西,前面代码的作用就是暂停5秒,类似其他 ...

大神目前是可以实现每隔5秒实现模拟点击一次,但奇怪的是最后一次循环打印console.log('发现div:', targetDiv);时所有打印的值变成一样内容,前几个值以前是不一样的。而且我把打印的值targetDiv传给const targetDivValues = [];在保存html时最后获取的targetDiv没有保存,但value保存到html里了,下面是代码
var randomChars = [];
let title;
// 创建一个空数组用于存储targetDiv的值
const targetDivValues = [];
async function monitorDomChange() {
    // 不要用forEach
    for (const value of randomChars) {
      console.log(value);
      await new Promise(r => setTimeout(r, 10000));
      // do something
      if (value) {
            // 在这里执行您想要的操作
            const event = new MouseEvent('click', {
                bubbles: true,
                cancelable: true,
                view: unsafeWindow,
            });
            value.dispatchEvent(event);
      }
      //debugger
      const targetDivSelector = '#endText';
      const targetDiv = document.querySelector(targetDivSelector);
      if (targetDiv) {
            console.log('发现div:', targetDiv);
            // 将targetDiv的值保存在存储器中
            targetDivValues.push(targetDiv.innerHTML);
            targetDivValues.push(value.innerHTML);
      } else {
            console.log('没有发现div');
      }
    }
    // 将存储器数据保存为HTML文件
    await new Promise(r => setTimeout(r, 20000));
    const htmlContent =targetDivValues.map(value => value.replace(/&draft=0&type=norm&pm=y/g, '').replace(/&draft=0&type=norm&actID=0/g, '')).join('');
    const blob = new Blob(, { type: 'text/html' });
    const url = URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    console.log('书名1111',title);
    link.download = `${title}.html`;
    link.click();
}
页: [1] 2
查看完整版本: 模拟点击事件每次延时5秒钟