上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12下一页
返回列表 发新帖

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

[复制链接]
  • TA的每日心情
    开心
    2023-12-25 06:51
  • 签到天数: 35 天

    [LV.5]常住居民I

    9

    主题

    56

    回帖

    67

    积分

    初级工程师

    积分
    67

    油中3周年

    发表于 2023-11-10 18:13:05 | 显示全部楼层 | 阅读模式
    悬赏10油猫币已解决

    想让模拟点击事件每次延时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');
                  }
                }
              }      
          );
        }

    最佳答案

    查看完整内容

    把你的点击操作等代码写在 do something 那里,不要改前面的东西,前面代码的作用就是暂停5秒,类似其他语言里的sleep。
  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-11-10 18:13:06 | 显示全部楼层
    tansuo 发表于 2023-11-11 10:00
    [md]> [cxxjackie 发表于 2023-11-10 22:28](forum.php?mod=redirect&goto=findpost&pid=72048&ptid=5333)
    ...

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6758

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-11-10 20:29:50 | 显示全部楼层
    [油猴脚本开发指南]包装异步代码为同步代码
    https://bbs.tampermonkey.net.cn/thread-883-1-1.html
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-11-10 22:28:46 | 显示全部楼层
    1. async function monitorDomChange() {
    2.     // 不要用forEach
    3.     for (const value of randomChars) {
    4.         console.log(value);
    5.         await new Promise(r => setTimeout(r, 5000));
    6.         // do something
    7.     }
    8. }
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-12-25 06:51
  • 签到天数: 35 天

    [LV.5]常住居民I

    9

    主题

    56

    回帖

    67

    积分

    初级工程师

    积分
    67

    油中3周年

    发表于 2023-11-11 10:00:41 | 显示全部楼层

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

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

    大佬,我的代码现在实现延迟模拟点击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');
    }
    }
    }
    }

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-12-25 06:51
  • 签到天数: 35 天

    [LV.5]常住居民I

    9

    主题

    56

    回帖

    67

    积分

    初级工程师

    积分
    67

    油中3周年

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

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6758

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-11-11 20:54:50 | 显示全部楼层
    tansuo 发表于 2023-11-11 19:00
    大神,看看我回cxxjackie大神的帖子,使用有什么问题

    c大给的是例子
    跟之前你开的那个帖子一个问题
    你不理解自己的业务需求
    别人很难直接搞同步异步问题
    容易出现自己不理解自己代码,但是又没法改
    还是认真学学吧
    感觉完全没静下心读资料...
    跟上个问题几乎一模一样
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-5-7 18:25
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    5

    主题

    23

    回帖

    32

    积分

    助理工程师

    积分
    32
    发表于 2023-11-11 20:58:59 | 显示全部楼层
    本帖最后由 granded 于 2023-11-11 21:04 编辑

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

    使用道具 举报

  • TA的每日心情
    开心
    2023-12-25 06:51
  • 签到天数: 35 天

    [LV.5]常住居民I

    9

    主题

    56

    回帖

    67

    积分

    初级工程师

    积分
    67

    油中3周年

    发表于 2023-11-11 21:39:25 | 显示全部楼层

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

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

    没有回调是什么意思?

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-12-25 06:51
  • 签到天数: 35 天

    [LV.5]常住居民I

    9

    主题

    56

    回帖

    67

    积分

    初级工程师

    积分
    67

    油中3周年

    发表于 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([htmlContent], { 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();
    }

    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表