有没有办法阻止机器人点击输入?

Is there a way to prevent click input from bots?

我有一款 javascript canvas 游戏 pixi.js 需要玩家按下特定的按钮组合才能完成关卡。他们基本上必须按下与某种颜色匹配的按钮。

事实证明,玩家正在 python 中编写机器人来执行此任务,并且他们每次都获得最高分。该游戏已经上线并且用户喜欢玩它,所以我无法真正改变任何游戏玩法。

所以我考虑了一些可能的解决方案,但我有一些顾虑

  1. 每级之间的验证码
  2. 检查输入速度
  3. 检查输入的一致性

验证码会损害用户体验,关于如何绕过它的视频有很多。在机器人的创建者了解发生了什么之后,2 和 3 将失败。所以我真的坚持我能做什么。

在允许单击按钮之前,我会考虑一个随机的宽限期。这可能会难倒一些机器人,但是是可以绕过的。

除此之外,我将介绍 clicks/interactions 的时间安排。每次请求下一个级别时,与配置文件进行比较,如果它们始终相同,则引入随机按钮 ID、按钮形状(圆形、椭圆形、方形等)、按钮放置(交换按钮)以避免简单的脚本编写。字体和实际文本也可以变化。

我还将输入元素更改为 <input type="image">,因为它会为您提供准确的坐标(如果可能 - 我不熟悉 pixi.js),这将有助于分析。

您还可以实现某种鼠标位置跟踪器,但使用触摸屏的人不会为此生成数据。如果用户输入是触摸,您可以补充额外检查,但机器人很容易绕过它。

编辑
我不知道某些检测其他 JavaScript 导入并从而检测潜在机器人的库是否适用。可能是一种考虑途径。

做这样的事情:Check whether user has a Chrome extension installed 验证您是在浏览器中 运行 而不是在 python 环境中可能是另一种途径。这意味着您将用户限制在某些浏览器上,并且可以规避许多其他代码。 Cost/benefit这里要牢记。
如果一切都运行通过具有某种无头界面的实际浏览器,它根本就没有用。

编辑 2
快速谷歌搜索 python automate browser game 会出现 a tutorial of how to automate browser games with python。粗略地看一下,让你的按钮四处移动和改变字体会很有效,甚至“随机”调整游戏区域的大小(即使你有全屏功能)也可能是一种可行的防御措施。同样,按照教程并尝试使用它来自动化它,看看如何阻止它会是一个很好的练习。

你也可以考虑请一些同学帮忙。对于许多提供基于项目的课程的计算机研究课程来说,这可能是一个很好的项目创意。它也可以是学生工作类型的交易 - 如果您想确保获得结果和“报告”。

我认为你的方法是有效的。每个关卡之间加Capcha好像有点过分,可以在游戏开始前加。

检查各个点击之间的间隔并定义一些阈值可能是个好主意,您可以安全地假设是机器人点击了按钮。

您可以采取的另一种方法是使查找正确按钮变得更加复杂。诸如随机化元素 ID、不在按钮内呈现标签而是作为单独元素的方法(我假设这是一款具有固定 window 大小的游戏,您不太关心移动设备)。

我不熟悉 Pixi.js,但这可能是一种可以考虑的方法。

------------------------编辑-------------------- --

如果你 运行 你的游戏在 iframe 中怎么办?