【发布时间】:2015-02-11 02:19:03
【问题描述】:
是否可以通过 Javascript 检测合成点击(不是人工生成的点击,而是使用 JS 或其他自动化工具生成的点击)?
【问题讨论】:
标签: javascript events click
是否可以通过 Javascript 检测合成点击(不是人工生成的点击,而是使用 JS 或其他自动化工具生成的点击)?
【问题讨论】:
标签: javascript events click
您可能希望观察 mousemove 事件和 click 事件。如果您正在捕捉点击事件,但没有 mousemove 事件,我认为可以肯定地说机器人正在点击您的网站。
【讨论】:
也许我们可以这样做:
document.onmousedown = function(e) {
if (typeof(e.pageX) !== 'undefined' && e.pageX != 0)
{
alert ('human');
}else{
alert ('else');
}
}
或类似的方法:
document.onmousedown = function(e) {
if(e.screenX && e.screenX != 0 && e.screenY && e.screenY != 0){
alert("real button click");
}else{
alert("something else");
}
}
请看这里:Detect if button click real user or triggered by a script
注意:如果您需要 jquery 解决方案,请访问: Check if event is triggered by a human
【讨论】:
您可以像在其他 anwsers 中一样使用 vanilla Javascript,也可以考虑使用 jquery,以便轻松检测非人工点击。
1.使用jquery定义一个全局的点击事件处理程序。这样你就可以捕捉到页面元素上的所有点击。
$(document).click(function(event) {
});
2.如果 event.originalEvent 存在,则检查是否存在单击是由人执行的。 More info
鼠标点击
$(document).click(function(event) {
if (event.originalEvent === undefined) {
alert('not human')
} else {
alert(' human');
}
});
按键
$(document).keypress(function(event) {
if (event.originalEvent === undefined) {
alert('not human')
} else {
alert(' human');
}
});
这是一个示例代码。
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$(document).click(function(event) {
if (event.originalEvent === undefined) {
alert('not human')
} else {
alert(' human');
}
});
$(document).keypress(function(event) {
if (event.originalEvent === undefined) {
alert('not human')
} else {
alert(' human');
}
});
$(document).click();
$(document).keypress();
});
</script>
</head>
<body>
<p>Click me !</p>
</body>
</html>
【讨论】:
仅通过检查页面事件没有可靠的方法来做到这一点。
您当然可以判断一个事件是由代码触发还是由“鼠标点击”触发的,但是无法确定是否真的有人点击了鼠标,我相信这就是您要问的。
您可能可以观察鼠标移动并对其进行分析,以查看它们是否包含足够的人类肌肉运动伪影(非线性运动),但如果这确实有效,我预计它不会持续很长时间,直到广告欺诈的人流行起来并添加一些随机性。
这就是为什么 Google 和其他公司采用 CAPTCHA 和其他图灵类型测试的原因。
【讨论】:
这是一个老问题,但接受的答案使用 jQuery,我相信这里的很多访问者都在寻找一个普通的 JS 解决方案。如果不需要支持IE,可以使用Event.isTrusted:
document.querySelector('a').onclick = function(event) {
if('isTrusted' in event) {
if(event.isTrusted === true) {
console.log('clicked on by a human');
} else if(event.isTrusted === false) {
console.log('click was triggered by a script');
}
}
};
https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted
在 IE 中,除createEvent 创建的事件外,所有事件都是可信的:
https://technet.microsoft.com/en-us/windows/ff974948(v=vs.60)
【讨论】:
我知道这个问题很老,但正确的方法是使用event.isTrusted,如果用户用鼠标单击,则为真,如果由脚本调度,则为假。
【讨论】: