• 技术文章 >web前端 >js教程

    教你用JavaScript实现一个“按键精灵”!

    藏色散人藏色散人2022-08-07 10:28:36转载127

    JavaScript奇淫技巧:按键精灵

    按键精灵之类的自动化工具,可以解放双手,帮我们自动完成许多工作,在很多场景中,可以极大提升生产力。

    本文将展示:用JavaScript实现一个“按键精灵”,演示自动完成点击、聚焦、输入等操作。

    实现效果

    如上图动画,在页面中,自动执行了如下操作:

    1、间隔一秒依次点击两个按钮;

    2、给输入框设置焦点;

    3、在输入框输入文字;

    4、点击打开链接;

    功能原理

    原理并不复杂,获取元素,并执行点击、设焦点等事件。

    难点有两处:

    1、没有ID、Name的元素,不能使用getElementById、getElementByName,如何对其定位;

    解决方法是:使用querySelectorAll获取页面所有元素,然后用匹配源码的方式,精确定位元素。代码如下:

    2、如何设置延时:点击一个位置后,等待几秒,再执行下一个操作。

    解决方法是:使用setTimeOut及回调函数。代码如下:

    重点代码详解

    依前面讲述的原理,准备好点击、设焦点、赋值函数,如下:

    调用时,传入源码、延时值、回调函数。

    即:对指定源码的元素进行操作,然后延时一定时长,再执行回调函数。

    其中源码部分可以在页面查看器中获得,如下图所示:

    完整源码

    这里再给出以上示例的完整代码,保存为html即可运行。

    <html>
    <body>
    <script>
    document.body.addEventListener("click", function(e) {
    console.log('点击:',e.originalTarget);
    });
    </script>
    <h1>JS版按键精灵</h1>
    <div>
    一、按钮:<br>
    <button style="width: 100px; height:100px;" onclick="alert('1被点击');">1</button>
    <button style="width: 100px; height:100px;" onclick="alert('2被点击');">2</button>
    <br>
    <br>
    二、输入框:
    <input type="text" value="">
    <br>
    <br>
    三、链接:<a href="http://jshaman.com" target="iframe1">jshaman.com</a>
    <br>
    <iframe name="iframe1"></iframe>
    </div>
    <br>
    <hr>
    <button onclick="fun1();">开始自动执行</button>
    <br>
    依次执行以下操作:<br>
    1、点击第一、第二按钮;2、给输入框设置焦点;3、给输入框设置值:abc;4、点击链接;
    <br>
    </body>
    <script>
    //点击事件
    //参数:
    //outer_html:要点击的元素源码
    //delay:延时
    //call_back:回调函数
    function click(outer_html, delay, call_back){
    //获取页面所有元素
    var all_elements = document.querySelectorAll('*');
    //遍历元素
    for(i=0; i<all_elements.length; i++){
    //匹配符合条件的元素
    if(all_elements[i].outerHTML==outer_html){
    //点击
    all_elements[i].click();
    }
    }
    if(delay && call_back){
    //过多少毫秒后执行回调函数
    setTimeout(call_back, delay)
    }
    };
    //设置焦点,即选中
    //参数:
    //outer_html:元素源码
    //delay:延时
    //call_back:回调函数
    function focus(outer_html, delay, call_back){
    //获取页面所有元素
    var all_elements = document.querySelectorAll('*');
    //遍历元素
    for(i=0; i<all_elements.length; i++){
    //匹配符合条件的元素
    if(all_elements[i].outerHTML==outer_html){
    //设焦点
    all_elements[i].focus();
    }
    }
    if(delay && call_back){
    //过多少毫秒后执行回调函数
    setTimeout(call_back, delay)
    }
    };
    //设置内容
    function setvalue(outer_html, type, value, delay, call_back){
    //获取页面所有元素
    var all_elements = document.querySelectorAll('*');
    //遍历元素
    for(i=0; i<all_elements.length; i++){
    //匹配符合条件的元素
    if(all_elements[i].outerHTML==outer_html){
    //点击
    all_elements[i][type] = value;
    }
    }
    if(delay && call_back){
    //过多少毫秒后执行回调函数
    setTimeout(call_back, delay)
    }
    };
    //点击按钮
    function fun1(){
    //要点击的元素的源码
    var outer_html = `<button style="width: 100px; height:100px;" onclick="alert('1被点击');">1</button>`;
    click(outer_html, 1000, fun2);
    }
    //点击按钮
    function fun2(){
    //要点击的元素的源码
    var outer_html = `<button style="width: 100px; height:100px;" onclick="alert('2被点击');">2</button>`;
    click(outer_html, 1000, fun3);
    }
    //给input设置焦点和值
    function fun3(){
    //要点击的元素的源码
    var outer_html = `<input type="text" value="">`;
    focus(outer_html);
    setvalue(outer_html,"value","abc",1000,call_back_function)
    }
    //点击链接
    function call_back_function(){
    var out_html = `<a href="http://jshaman.com" target="iframe1">jshaman.com</a>`;
    click(out_html);
    console.log("已完成自动点击")
    }
    </script>
    </html>

    代码安全性

    公开透明的JavaScript很容易被看懂功能逻辑,也可以被任意修改。如果希望提高代码安全性,应对代码加密保护。比如,可以使用专业的JavaScript代码混淆加密工具JShaman。上面完整源码中的JavaScript代码经JShaman加密后,会变成如下形式,而使用不受任何影响:

    注:左侧为原始代码,右侧为加密后的代码。

    相关推荐:【JavaScript视频教程

    以上就是教你用JavaScript实现一个“按键精灵”!的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:javascript
    上一篇:js实现模拟鼠标拖拽事件(附图文实例) 下一篇:用JavaScript模拟实现打字小游戏!
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• JavaScript HTML DOM导航(总结分享)• 详解JavaScript如何操作元素属性,样式和类名• 快速讲解JavaScript如何操作元素内容• 详解JavaScript实现全选和反选的功能(附代码示例)
    1/1

    PHP中文网