JavaScript实现按键精灵

最近有个需求,需要在页面上面自动点击、输入、提交。

用以模拟真实用户的操作行为,可以通过直接执行某个元素绑定的事件,来执行操作。

也可以创建事件,再派发事件,执行操作。关于事件的更多细节,可以参考《JavaScript中事件处理

1、模拟MouseEvent中的click事件,x与y位置随机点击

2、模拟TouchEvent中的touchstart和touchmove,用scroll来做滑动效果

3、模拟FocusEvent,聚焦到屏幕中的输入框内

一、鼠标事件MouseEvent

MouseEvent接口指用户与指针设备( 如鼠标 )交互时发生的事件。使用此接口的常见事件包括:click,dblclick,mouseup,mousedown。

MouseEvent派生自 UIEvent,UIEvent 派生自 Event

function random(max) {    return Math.floor(Math.random() * max);
}function on(dom, type, fn) {
    dom.addEventListener(type, fn, false);
}
on(document.body, ‘click‘, function(e) {
    console.log(‘click事件 x:‘+e.clientX, ‘y:‘+e.clientY);
});/**
 * MouseEvent
 * 包括事件 click,dblclick,mouseup,mousedown */function mouse() {    var x = random(window.outerWidth),
        y = random(window.outerHeight);    var event = new MouseEvent(‘click‘, {
        bubbles: true,
        cancelable: true,
        view: window,
        clientX: x,
        clientY: y
    });
    console.log(‘click环境 x:‘+x, ‘y:‘+y);
    document.body.dispatchEvent(event);
}
mouse();

1)Event

语法如下

typeArg:事件的名字,DOMString类型。

eventInit:


属性

选项 默认 类型 描述
bubbles 可选 false Boolean 事件是否冒泡
cancelable 可选 false Boolean 事件是否可取消
scoped 可选 Boolean indicating whether the given event bubbles. If this value is true, deepPath will only contain a target node.
composed 可选 false Boolean
事件是否会影子根(shadow root)之外触发侦听器。

Shadow DOM是指在文档(document)渲染时插入一棵DOM元素子树,但是这棵子树不在主DOM树中。

2)UIEvent

语法如下

有多个事件对象直接或间接的继承了UIEvent,包括:MouseEventTouchEventFocusEventKeyboardEventWheelEvent,InputEventCompositionEvent

UIEventInit:


属性

选项 默认 类型 描述
detail 可选 0 long长整型
根据事件不同意义也会不同。

对 click 或者 dblclick 事件, detail是当前点击数量;

对mousedown或者mouseup事件, detail是1加上当前点击数;

对所有的其它UIEvent对象, detail总是0。

view 可选 null WindowProxy 与事件相关联的窗口

3)MouseEvent

语法如下

mouseEventInit:


属性

选项 默认 类型 描述
screenX/screenY 可选 0 long长整型
鼠标事件发生时相对于用户屏幕screen的水平/垂直坐标位置;

该操作并不会改变真实鼠标的位置。

clientX/clientY 可选 0 long长整型
鼠标事件时相对于浏览器窗口viewport的水平/垂直坐标位置,不包含滚动距离;

该操作并不会改变真实鼠标的位置。

ctrlKey 可选 false Boolean 按下了Ctrl键
shiftKey 可选 false Boolean 按下了Shift键
altKey 可选 false Boolean 按下了Alt键
metaKey 可选 false Boolean 按下了Meta键 
button 可选 0 short短整型
当事件发生时哪个按键被按下或释放;

0:左键 1:中建 2:右键

buttons 可选 0 无符号short
当事件发生时哪些按键被按下;

0:无按键按下 1:左键 2:中建 4:右键

relatedTarget 可选 null EventTarget
标明刚离开的元素 (发生在事件 mouseenter 或 mouseover);

或刚进入的元素 (发生在事件 mouseout 或 mouseleave)。

region 可选 null DOMString 点击事件影响的区域DOM的id

二、触屏事件TouchEvent

TouchEvent是一类描述手指在触摸平面(触摸屏、触摸板等)的状态变化的事件。

每个Touch对象代表一个触点; 每个触点都由其位置,大小,形状,压力大小,和目标元素描述。TouchList对象代表多个触点的一个列表。

触屏touch事件的更多细节,可以参加《触屏touch事件记录

on(document.body, ‘touchstart‘, function(e) {  var touch = e.touches.item(0);
  console.log(‘touchstart x:‘ + touch.clientX, ‘y:‘ + touch.clientY);
});
on(document.body, ‘touchmove‘, function(e) {  var touch = e.touches.item(0);
  console.log(‘touchmove x:‘ + touch.clientX, ‘y:‘ + touch.clientY);
});
on(document.body, ‘touchend‘, function(e) {  var touch = e.changedTouches.item(0);
  console.log(‘touchend x:‘ + touch.clientX, ‘y:‘ + touch.clientY);
});
on(window, ‘scroll‘, function(e) {
  console.log(‘scroll timestamp:‘ + e.timeStamp);
});/**
 * TouchEvent
 * 包括事件 touchstart,touchend,touchmove,touchcancel */function touchstart(x, y, number) {  var touch = new Touch({
    identifier: number,
    target: document.querySelector(‘.drag‘), //随便设置的    clientX: x,
    clientY: y
  });
  console.log(‘touchstart环境 x:‘ + x, ‘y:‘ + y);  var event = new TouchEvent(‘touchstart‘, {
    touches: [touch],
    targetTouches: [touch],
    changedTouches: [touch]
  });
  document.body.dispatchEvent(event); //touchstart}function touchmove(x, y, interval, number) {  var touch = new Touch({
    identifier: number,
    target: document.querySelector(‘.drag‘), //随便设置的    clientX: x,
    clientY: y + interval
  });  var event = new TouchEvent(‘touchmove‘, {
    touches: [touch],
    targetTouches: [touch],
    changedTouches: [touch]
  });
  document.body.dispatchEvent(event); //touchmove}function touch() {  var x = random(window.outerWidth),
    y = random(window.outerHeight),
    number = 1,
    interval = 10;
  touchstart(x, y, number);
  number++;
  touchmove(x, y, interval, number);
  number++;
  interval += 10;
  touchmove(x, y, interval, number);
  number++;
  interval += 10;
  touchmove(x, y, interval, number);

  document.body.scrollTop = interval; //自动滚动}
setTimeout(function() {
  touch();
}, 2000);

1)Touch

语法如下

touchInit:


属性

选项 默认 类型 描述
identifier 必填 long长整型 一个触摸点的数字标记,唯一标识符。
target 必填 EventTarget 触点最开始被跟踪时(在 touchstart 事件中),位于的HTML元素。
clientX/clientY 可选 0 double 触摸点相对于浏览器窗口viewport的位置,不包含滚动距离,这个值会根据用户对可见视区的缩放行为而发生变化。
screenX/screenY 可选 0 double
触摸点相对于屏幕screen的位置。在IOS中与clientX/clientY属性不同,不会受到initial-scale的影响;

而在安卓中微信和UC会受之影响,而手机版chrome与红米note自带的浏览器不会被影响。

pageX/pageY 可选 0 double 和clientX/clientY属性不同,这个值是相对于整个html文档的坐标,这个值包含了垂直滚动的偏移。
radiusX/radiusY 可选 0 float 能够包围用户和触摸平面的接触面的最小椭圆的水平轴(X轴)/垂直轴(Y轴)半径。
rotationAngle 可选 0 float
以度为单位的旋转角,由radiusX和radiusY描述的正方向的椭圆;

通过顺时针旋转这个角度后,能最精确地覆盖住用户和触摸平面的接触面的角度。

force 可选 0 float 手指挤压触摸平面的压力大小,从0.0(没有压力)到1.0(设备可识别的最大压力)的浮点数。

2)TouchEvent

语法如下

touchEventInit:


属性

选项 默认 类型 描述
touches 可选 [] TouchList TouchList类型(包含了一系列Touch对象的数组),当前位于屏幕上的所有手指的列表。
targetTouches 可选 [] TouchList 与touches类似,但是增加了个过滤条件,要与第一个手指点的地方(同一个节点内)相同。
changedTouches 可选 [] TouchList
在touchstart中:列出在此次事件中新增加的触点。如果同时放下一根或两根手指,那么将与touches相同,但如果先放一根,在放第二根,那就会不同。

在touchmove中:列出和上一次事件相比较,发生了变化的触点。

在touchend中:列出离开触摸平面的触点(这些触点对应已经不接触触摸平面的手指)。

ctrlKey 可选 false Boolean 按下了Ctrl键
shiftKey 可选 false Boolean 按下了Shift键
altKey 可选 false Boolean 按下了Alt键
metaKey 可选 false Boolean 按下了Meta键

三、焦点事件FocusEvent

FocusEvent接口表示和焦点相关的事件比如 focus, blur, focusin, 和 focusout。

on(document.getElementById(‘txt‘), ‘focus‘, function(e) {  //console.log(e);
  console.log(‘focus timestamp:‘ + e.timeStamp);
});/**
 * FocusEvent
 * 包括事件 focus, blur, focusin, focusout */function focus() {  var event = new FocusEvent(‘focus‘, {
    view: window
  });
  document.getElementById(‘txt‘).dispatchEvent(event);
}
focus();

1)FocusEvent

语法如下

focusEventInit:


属性

选项 默认 类型 描述
relatedTarget 可选 null EventTarget 辅助FocusEvent目标

时间: 2024-11-08 22:50:58

JavaScript实现按键精灵的相关文章

按键精灵出故障,无法正常充值

故障现象; 公司按键精灵,无法正常充值,浏览器无法显示支付宝页面样式,报不是安全的连接 处理过程 1,暂停按键精灵,将谷歌浏览器清理缓存 2,清理后浏览器直接无法正常显示页面样式,无法加载图片等 3,将浏览器重置默认,依然无法显示 4,卸载现有谷歌浏览器,但保留原有数据,重装后依然 5,怀疑是支付宝安全插件的问题,后百度查看相关文摘,说的是支付宝证书无法加载和密码无法输入的问题,安装了支付宝安全插件后依然这样 6,查资料无果的情况下,卸载现有谷歌浏览器并将其数据全部删除,下载谷歌55版浏览器安装

一个按键精灵后台发送消息的脚本

以前,我也用过按键精灵写过一些脚本,那时候经常用这个来挂机FB什么的. 那天,某网友问起,于是就回答了下 无非就是,抓句柄,然后相对定位坐标或者发送消息到固定窗体 代码如下: 1 //////////////////////////抓窗口句柄////////////////////////////////////////// 2 3 Dim Hwnd 4 5 Hwnd = Plugin.Window.MousePoint() 6 7 sWindow = Plugin.Window.IsWindo

仙境传说-按键精灵脚步研究

仙境传说是很早以前非常流行的一款网络游戏,其中的人物设置的非常可爱,尤其是一些夸张的头饰和百变的插卡系统让人回味无穷.虽然从游戏性来说仍然逃不出韩国游戏泡菜的怪圈(或者说是一款标准的泡菜游戏),但仍然是可圈可点的. 游戏中玩家要耗费大量时间进行练级,虽然现在的代理昆仑也有经验奖励的措施,比如高级经验书,高级JOB经验书,双倍经验时间区等,但是要让玩家,特别是高等级的玩家进行练级仍然是一件非常痛苦的事情.常有的事是,三转100~110的职业往往要在熔岩地图上打一个熔岩波利的怪物来进行性价比较高的练

原来找字也可以这样用ElseIf FindStr 手机按键精灵 跟大漠的区别

原来找字也可以这样用ElseIf FindStr(646, 1109, 776, 1261, "公告小叉", "FFFFFF-333333", 0.9, intX, intY) > 100 or intx > 0 Then         Tap intX+10, intY+10         Delay 1000 跟大漠的有什么区别?大神答:色值大漠是bgr数据模式   而手机按键精灵是rbg要转换的 大漠常用语句大全API http://xx51.

按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格

首先来建立一个新的Excel文档,在桌面上点击右键,选择[新建]-[Excel工作表],命名为[新手学员]. 现在这个新Excel文档是空白的,我们接下来会通过按键精灵的脚本来打开并写入一些数据.打开按键精灵软件,点击[新建],进入我的脚本界面,再点击进入[全部命令].在[全部命令]中选择[插件命令]-[office办公文档插件]-[打开Excel文档].在命令的下面可以看到命令的详细设置,点击[路径].在弹出窗口中选择[新手学员]的Excel文档,点击打开.可以在命令参数中看到引用的文档,点击

按键精灵获取系统时间定时点击

'==========以下是按键精灵录制的内容==========dim h,m,sRem [wait]h=Hour(time)m = Minute(time)s = Second(time)UserVar HH=0 "时"UserVar MM=0 "分"UserVar SS=0 "秒" If h = HH and m = MM and s=SS MoveTo 82, 40Delay 0LeftDown 1Delay 0LeftClick 1De

最近听说搞脚本挺爽的 弄了个按键精灵的找图找色

首先你需要下载个按键精灵的软件.如下http://www.anjian.com/ 下好后就打开按键精灵,首先新建一个空白脚本,然后找到抓取按钮. 随便找张图来找色 比如如上这张,用抓取按钮选择右键找到色素点,如#c10b2a 然后将该值放到颜色/图形命令去 在图形找色这里,还有找图功能,其实原理都差不多,都是通过周边像素点的色值来找到符合这个值得点,这样就能找到所选的数据. 当你找到你想得到的句柄(windows的某些你想要获取的窗口)时,就可以通过找色或找图去设置你自己所要的功能.

用按键精灵写的手机端按键精灵批量加群的脚本

前几天朋友想在手机上面多加几个群,可是一个个的手工操作太难受了,于是就用按键精灵帮他写了一个自动加群的代码.分享给大家. KeepScreen True Delay 2000 Dim scrWidth, scrHeight,a,x,y,i,intX,intY scrWidth = GetScreenX() scrHeight = GetScreenY() 'ShowMessage scrWidth&"--"&scrHeight TracePrint scrWidth T

C#实现按键精灵的'找图' '找色' '找字'的功能

背景:游戏辅助功能通常使用按键精灵编写脚本,按键精灵的最大卖点就是能够找到画面中字,图,色,这对于模拟用户鼠标操作至关重要,这能找到道具,找到血量,实现自动打怪,自动补血,自动买卖道具,博主闲来无聊,看到一款按键精灵实现的辅助,于是乎想用WPF也写一款辅助工具,实现其核心的找图找色等功能.博主测试,对于背景复杂多变的画面,找不变图的成功率达到100%,找带透明的图,比如文字,能达到90%以上.默认您已经知道一个颜色值由argb构成,每个值范围都是0~255.网上发现不少人询问过该问题,几乎没有比