通过滚动行为检测爬虫机器人
Detecting scraper bots through scroll behaviour

自阅读 Kwang-Il Goh 关于复杂系统突发性和记忆的论文后,我着迷于用 Burstiness 和 Memory 这两个指标分析事件驱动系统。以往我尝试用请求时间区分人类与机器人,但像 ClaudeBot 这样的先进爬虫利用无头浏览器轻易伪装。最近我发现,人类在网页上寻找信息时的滚动行为具有独特的突发性模式,这很难被机器人模仿。我利用 FP-Agent 数据集,计算了各代理在页面滚动事件中的突发性与记忆值,并训练了一个 LightGBM 模型。结果显示,人类分布与机器人显著不同,模型仅凭这两个特征就达到了 73.4% 的准确率,尽管人类与 ChatGPT Agent 仍有混淆。这表明滚动行为是区分爬虫的宝贵数据点,未来结合鼠标移动等特征,有望构建更通用的防护模型。
当我用滚轮滚动页面寻找信息时,通常不会线性地一直向下滚动直到找到目标,而是以突发性的模式进行。
HN 评论区
18- xp84
我很好奇,我们是否会走到这样一个节点:某些网站会希望尽可能对爬虫友好(希望它们能转向提供合理的、带速率限制的公开 API,这样大家都能节省时间和带宽),而其余网站则恰恰相反。
如果你提供的是某种服务,而 AI 代理真的普及到人们会说“Claude,帮我买根大约 5 英尺长、拉丝镍色的新淋浴软管。用我惯用的评估标准,别超过 20 美元”,那么很多电商网站就会非常有动力去对爬虫友好。
当然,所有“内容”类网站则恰恰相反,它们不想浪费带宽,并希望与任何可能想要抓取它们的实体达成独家付费内容合作。
- bryanrasmussen
嗯,这挺有意思的。当我编写针对某个特定平台的爬虫时,我也做了很多这类事情,因为我当时很 paranoid(多疑),不想被封禁。所以我做的事情包括:
检测当前加载页面中我想要操作的所有元素。找到我想点击的元素。滚动到我想点击的元素处。执行随机的视口滚动动作,稍微滚出视口范围,再滚回来,确定我将点击的鼠标位置——即可点击元素的中心 x, y 坐标,确定可点击元素的边界框 x, y 坐标,在边界框内选择一个点作为点击位置,加入一些随机性以模拟人类无法每次都精准点击中心的情况,毕竟人类又不是每次都点得那么准对吧。设置随机的鼠标移动速度。实现鼠标抖动函数(在前往最终点击的 x, y 坐标的途中,确定一系列 x, y 坐标点,依次向这些点移动,同时加入鼠标速度的随机性,这样没人会说“咦,这鼠标移动得太直接、太顺滑了,不自然”)。到达点击位置。随机等待一段时间后点击。
如果仅凭这种方法,我无法持续获取符合我标准的新点击元素,那我就需要滚动来检测是否有新元素。
随机滚动次数。随机滚动速度。随机滚动距离。
开始滚动。到达滚动距离后停止。随机上下滚动。
我的自动化目标并不是让我的爬虫能完成数百人的工作量。我的目标是完成……
- ventana
太棒了!
我曾尝试分析 Google Ads 引流到我关心的一个网站的情况,仅仅通过查看鼠标移动和滚动事件是否存在(更不用说分析其模式),我就明白了有多少爬虫,或者那些只是误点了广告却从未在我网站上进行任何操作的用户,被 Google Ads 计为付费点击。如果能像这篇文章那样分析模式,那意义就更大了。