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

怎么在命令之间进行延迟/delay/sleep?

[复制链接]
  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 310 天

    [LV.8]以坛为家I

    1

    主题

    11

    回帖

    143

    积分

    中级工程师

    积分
    143

    油中2周年新人报道

    发表于 2022-12-21 15:16:43 | 显示全部楼层 | 阅读模式
    悬赏2油猫币已解决

    比如我希望这样

    (function() {
        'use strict';
    
        // Your code here...
        cmd_a()
        sleep(1)
        cmd_b()
        sleep(1)
        cmd_c()        
    })();

    最佳答案

    查看完整内容

    最好用他前边提的 你发的这个代码会严重阻塞网页 弊端太重了一般情况下
  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 310 天

    [LV.8]以坛为家I

    1

    主题

    11

    回帖

    143

    积分

    中级工程师

    积分
    143

    油中2周年新人报道

    发表于 2022-12-21 15:30:09 | 显示全部楼层
    本帖最后由 iamqz 于 2022-12-22 14:08 编辑

    JavaScript 中实现 sleep - 刘哇勇 - 博客园
    https://www.cnblogs.com/Wayou/p/javascript_sleep.html
    在这篇文章里发现一种方法:
    1. function syncSleep(time) {
    2.   const start = new Date().getTime();
    3.   while (new Date().getTime() - start < time) {}
    4. }
    复制代码
    上面这种是同步执行延迟,
    经各位猴友的提醒和我的测试,发现这种方式会阻塞其他油猴脚本和网页加载, 而且它和html元素的.click()命令组合使用时,所有的click()都会在最后才执行,而不是立马执行, 因此不推荐.

    于是改用下面的异步延迟, 推荐下面这种异步方式

    1.      function sleep1(time) {
    2.          time*=1000
    3.         return new Promise(resolve => {
    4.             setTimeout(() => {
    5.            resolve();
    6.           }, time);
    7.        });
    8.     }
    复制代码



    然后在async 函数里使用 await sleep1(延迟秒数)  进行调用
    测试例子见 楼下 https://bbs.tampermonkey.net.cn/ ... ptid=3916&pid=48370

    感谢各位猴友~ 完结撒花~

    已有1人评分好评 油猫币 理由
    zip11 + 1 + 7 很给力!

    查看全部评分 总评分:好评 +1  油猫币 +7 

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 310 天

    [LV.8]以坛为家I

    1

    主题

    11

    回帖

    143

    积分

    中级工程师

    积分
    143

    油中2周年新人报道

    发表于 2022-12-22 13:52:01 | 显示全部楼层

    本帖最后由 iamqz 于 2022-12-22 13:57 编辑

    异步延迟 测试例子:
    多次间隔地点击baidu.com首页右侧百度热搜的换一换按钮

    // ==UserScript==
    // @name         测试油猴4
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        *://*/*
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=baidu.com
    // @grant        none
    // ==/UserScript==
    
        function log(msg){
            console.log(msg)
        }
    
         function sleep1(time) {
            time*=1000
            return new Promise(resolve => {
                setTimeout(() => {
                    resolve();
                }, time);
            });
        }
    
    // 油猴主函数,加上async 改成异步函数; 在内部使用await sleep()来调用异步延迟
    (async function() {
        'use strict';
    
        // Your code here...
    
        log(`异步测试油猴1`)
        await sleep1(3)
        document.querySelector("a.c-font-normal.c-color-gray2.hot-refresh").click()
        log(`异步测试油猴2`)
        await sleep1(3)
        document.querySelector("a.c-font-normal.c-color-gray2.hot-refresh").click()
    
    })();
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    636

    主题

    5189

    回帖

    6071

    积分

    管理员

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

    积分
    6071

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

    发表于 2022-12-21 15:16:44 | 显示全部楼层
    最好用他前边提的
    你发的这个代码会严重阻塞网页
    弊端太重了一般情况下
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    293

    主题

    3898

    回帖

    3819

    积分

    管理员

    积分
    3819

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-12-21 15:48:20 | 显示全部楼层
    iamqz 发表于 2022-12-21 15:30
    JavaScript 中实现 sleep - 刘哇勇 - 博客园
    https://www.cnblogs.com/Wayou/p/javascript_sleep.html
    在这 ...

    这个就算了,可以用await/async setTimeout去实现
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情

    2023-10-19 09:35
  • 签到天数: 66 天

    [LV.6]常住居民II

    6

    主题

    126

    回帖

    219

    积分

    高级工程师

    积分
    219

    油中2周年生态建设者

    发表于 2022-12-21 16:32:14 | 显示全部楼层
    如果a、b、c存在因果关系,建议直接快进学习promise……虽然难度很高
    回复

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 709 天

    [LV.9]以坛为家II

    27

    主题

    733

    回帖

    7216

    积分

    荣誉开发者

    精通各种语言的HelloWord!

    积分
    7216

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

    发表于 2022-12-21 16:37:01 | 显示全部楼层
    用promise吧
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    293

    主题

    3898

    回帖

    3819

    积分

    管理员

    积分
    3819

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-12-21 16:57:38 | 显示全部楼层
    极品小猫 发表于 2022-12-21 16:32
    如果a、b、c存在因果关系,建议直接快进学习promise……虽然难度很高

    我觉得很容易
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情

    2023-10-19 09:35
  • 签到天数: 66 天

    [LV.6]常住居民II

    6

    主题

    126

    回帖

    219

    积分

    高级工程师

    积分
    219

    油中2周年生态建设者

    发表于 2022-12-22 12:16:04 | 显示全部楼层

    如果promise里没有ajax之类的异步操作,是挺容易
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 310 天

    [LV.8]以坛为家I

    1

    主题

    11

    回帖

    143

    积分

    中级工程师

    积分
    143

    油中2周年新人报道

    发表于 2022-12-22 14:06:38 | 显示全部楼层
    李恒道 发表于 2022-12-21 15:16
    最好用他前边提的
    你发的这个代码会严重阻塞网页
    弊端太重了一般情况下

    确实是! 已经改用异步了!感谢!
    回复

    使用道具 举报

    发表回复

    本版积分规则

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