在补环境时,有时候需要模拟鼠标轨迹,生成轨迹,对轨迹加密后发到到服务端进行验证。
鼠标轨迹一般有点击、滑动等,这里主要说下思路以及分享部分代码提供参考。
首先页面肯定会注册点击、滑动这些事件,那么我们可以监听这些事件从而获取响应得点击、滑动事件函数,获取到函数后,就可以使用算法生成轨迹,参考代码如下。都是白嫖,就别太挑剔了,至少给大家提供了一个思路,好多人连思路都没有。
window["onload"]();//注册页面事件
let clickEventList;
if(ldvm.memory.asyncEvent.listener){
clickEventList = ldvm.memory.asyncEvent.listener["click"];//鼠标单击
}
let onmousemoveFunc = document["onmousemove"];
let clickEvent = clickEventList[0];
let mself = clickEvent.self;//当前对象
let listener = clickEvent.listener;//调用函数,就是单击事件函数
//listener.call(self);//进行调用
//模拟鼠标事件轨迹
let mdiv = document.createElement('div');
let myClick = function myClick(x,y){
x = parseInt(x);
y = parseInt(y);
var pointerEvent = {
"altKey":false,
"isTrusted":true,
"target":mdiv,
"srcElement":mdiv,
"clientX":x,
"clientY":y,
"layerX":x,
"layerY":y,
"pageX":x,
"pageY":y,
"screenX":x,
"screenY":y,
"pointerType":"mouse",
"type":"click",
"view":window
};
pointerEvent = ldvm.toolsFunc.createProxyObj(pointerEvent,PointerEvent,"pointerEvent");
listener.call(mself,pointerEvent);
}
let mourseMoveByZb = function mourseMoveByZb(x,y){
x = parseInt(x);
y = parseInt(y);
var mouseEvent = {
"target":mdiv,
"clientX":x,
"clientY":y,
"altKey":false,
"isTrusted":true,
"target":mdiv,
"srcElement":mdiv,
"layerX":x,
"layerY":y,
"pageX":x,
"pageY":y,
"screenX":x,
"screenY":y,
"type":"mousemove",
"view":window
};
mouseEvent = ldvm.toolsFunc.createProxyObj(mouseEvent,MouseEvent,"mouseEvent");
onmousemoveFunc.call(document,mouseEvent);
}
let zuobiaoMn = function(){
debugger;
let zbArr = [
{'x':303,'y':108},
{'x':406,'y':232},
{'x':503,'y':391},
{'x':609,'y':478},
{'x':705,'y':553},
{'x':835,'y':602},
{'x':992,'y':732},
{'x':1008,'y':441},
{'x':671,'y':521},
{'x':1202,'y':723}
];
var num1 = ldvm.toolsFunc.getSuijishu(0,9);
var num2 = ldvm.toolsFunc.getSuijishu(0,9);
var num3 = ldvm.toolsFunc.getSuijishu(0,9);
var ele1 = zbArr[num1];
var ele2 = zbArr[num2];
var ele3 = zbArr[num3];
let x1 = ele1.x;
let y1 = ele1.y;
let x2 = ele2.x;
let y2 = ele2.y;
let x3 = ele3.x;
let y3 = ele3.y;
//159,81,19|55,56,1609|219,89,3361
//先生成轨迹
var param = x1 + ',' + y1 + '|' + x2 + ',' + y2 + '|' + x3 + ',' + y3;
var traceStr = ldvm.toolsFunc.getTrace(param);
var arr = traceStr.split('|');
// mourseMoveByZb(x1,y1);
myClick(x1, y1);
for (let i = 0; i < arr.length; i++) {
var mrr = arr[i];
var brr = mrr.split(',');
var x = brr[0];
var y = brr[1];
mourseMoveByZb(x, y);
//moursemove
if (x == x2 && y == y2) {
myClick(x2, y2);
}
}
mourseMoveByZb(x3, y3);
myClick(x3, y3);
}
纯技术交流,请勿用于非法用途,如有权益问题可以发私信联系我删除.