周虽旧邦,其命维新。一一《诗经》

自动仿真人类滚动脚本:让你的网页浏览更“像人类”

在前端开发、自动化测试或数据采集的过程中,我们经常会遇到“模拟人类操作”的需求。例如,自动滚动页面以加载惰性内容、触发懒加载图片,或者让自动化检测工具误以为是真人在浏览网页。
传统的 window.scrollTo()window.scrollBy() 方法虽然可以实现页面滚动,但往往过于机械,容易被反爬虫系统识别。

本文介绍一个简单易用、可持续运行的仿真人类自动滚动脚本,它通过“随机滚动步长+随机停顿”的方式,让页面滚动行为更贴近真实用户操作。


一、脚本源码解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(function autoHumanScroll() {
const minDelay = 5000; // 最小停顿5秒
const maxDelay = 10000; // 最大停顿10秒
const minStep = 20; // 最小滚动20px
const maxStep = 80; // 最大滚动80px

function scrollStep() {
// 如果已经到底部
if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
window.scrollTo(0, 0); // 回到顶部
} else {
// 随机滚动距离
const step = Math.floor(Math.random() * (maxStep - minStep + 1)) + minStep;
window.scrollBy(0, step);
}
// 随机延迟后再次滚动
const delay = Math.floor(Math.random() * (maxDelay - minDelay + 1)) + minDelay;
window._autoScrollTimer = setTimeout(scrollStep, delay);
}

// 停止函数(需要时在控制台运行 stopHumanScroll() 即可)
window.stopHumanScroll = function() {
clearTimeout(window._autoScrollTimer);
};

scrollStep();
})();

二、核心思路与特点

  1. 随机滚动距离
    每次滚动的像素值 step20px80px 之间随机,避免每次滚动幅度一致而显得“机器化”。

  2. 随机停顿时间
    每次滚动后,脚本会随机等待 5~10 秒再进行下一次滚动。这样模拟了人类“停下来思考或浏览内容”的自然行为。

  3. 自动回到顶部
    当页面滚动到底部时,自动返回顶部,适合无限滚动页面或需要循环刷新的场景。

  4. 可随时停止
    只需在浏览器控制台输入 stopHumanScroll() 即可终止自动滚动,方便调试和人工干预。


三、应用场景举例

  • 前端懒加载测试:自动触发懒加载图片、无限滚动列表等组件的加载逻辑,发现潜在 bug。
  • 自动化演示:产品介绍、数据大屏自动翻页展示,提升观看体验。
  • 反爬虫规避:爬虫或数据采集时,模拟人类操作以降低被封风险(请合法合规使用)。
  • 辅助阅读:让长文档、电子书自动慢慢滚动,解放双手。

四、使用方法

  1. 打开目标网页,按 F12 或右键选择“检查”进入开发者控制台。
  2. 粘贴上述脚本,回车即可开始自动滚动。
  3. 若需停止,控制台执行 stopHumanScroll()

五、可扩展与优化建议

  • 支持横向滚动:可根据需求将 window.scrollBy(0, step) 修改为横向滚动。
  • 自定义滚动区域:将 window 替换为特定容器元素,实现局部滚动。
  • 增加“停留点”逻辑:比如每滚动到底后停留更久、滚动到特定区域时暂停。
  • 适配移动端:可结合 touch 事件或适配滚动逻辑。

六、安全与合规提示

请勿将该脚本用于恶意刷取、攻击或违反网站规则的行为。自动化操作应遵守目标网站的服务条款和 robots 协议。


七、结语

通过简单的脚本和巧妙的“伪随机”控制,我们可以轻松实现仿真的自动滚动,为自动化测试、数据采集和用户体验提供更多便利。希望本文能为你的前端开发和自动化实践带来启发!