XHS_Downloader/static/自动滚动页面.js

102 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ==UserScript==
// @name 自动滚动页面
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 模拟自然滚动,测试页面滚动效果
// @author ChatGPT, JoeanAmier
// @match *://*/* // 匹配所有页面,也可以指定具体网站
// @grant none
// @run-at document-end // 在页面加载完毕后运行脚本
// ==/UserScript==
(function () {
'use strict';
// 配置滚动模式
const scrollMode = 'limited'; // 'none'、'endless' 或 'limited'
const maxScrollCount = 10; // 最大滚动次数(如果模式是 'limited'
// 随机整数生成函数
const getRandomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
// 判断是否需要暂停,模拟用户的停顿行为
const shouldPause = () => Math.random() < 0.2; // 20%几率停顿
// 执行一次增量滚动
const scrollOnce = () => {
const scrollDistanceMin = 50; // 最小滚动距离
const scrollDistanceMax = 200; // 最大滚动距离
const scrollDistance = getRandomInt(scrollDistanceMin, scrollDistanceMax);
console.log(`滚动距离: ${scrollDistance}px`); // 日志输出滚动距离
window.scrollBy(0, scrollDistance); // 增量滚动
};
// 检查是否已经滚动到底部
const isAtBottom = () => {
const docHeight = document.documentElement.scrollHeight;
const winHeight = window.innerHeight;
const scrollPos = window.scrollY;
return (docHeight - winHeight - scrollPos <= 10); // 如果距离底部小于10px认为滚动到底部
};
// 自动滚动主函数
const scrollScreen = (callback, scrollCount = 0,) => {
const timeoutMin = 100; // 最小滚动间隔
const timeoutMax = 300; // 最大滚动间隔
console.log('开始滚动...');
const scrollInterval = setInterval(() => {
if (shouldPause()) {
// 停顿,模拟用户的休息
clearInterval(scrollInterval);
setTimeout(() => {
scrollScreen(callback, scrollCount,); // 重新启动滚动
}, getRandomInt(500, 1500)); // 随机停顿时间
} else if (scrollMode === 'endless') {
// 无限滚动至底部模式
if (!isAtBottom()) {
scrollOnce(); // 执行一次滚动
} else {
// 到达底部,停止滚动
clearInterval(scrollInterval);
callback(); // 调用回调函数
console.log('已经到达页面底部,停止滚动');
}
} else if (scrollMode === 'limited') {
// 滚动指定次数模式
if (scrollCount < maxScrollCount && !isAtBottom()) {
scrollOnce(); // 执行一次滚动
scrollCount++;
} else {
// 如果到达底部或滚动次数已满,停止滚动
clearInterval(scrollInterval);
callback(); // 调用回调函数
console.log(`已经滚动${scrollCount}次,停止滚动`);
}
} else if (scrollMode === 'none') {
// 关闭滚动功能
clearInterval(scrollInterval);
console.log('自动滚动已关闭');
}
}, getRandomInt(timeoutMin, timeoutMax)); // 随机滚动间隔
};
// 等待页面完全加载后执行滚动
window.addEventListener('load', () => {
console.log('页面加载完成');
// 检查页面是否足够长,以便滚动
if (document.body.scrollHeight > window.innerHeight && scrollMode !== 'none') {
// 执行自动滚动
scrollScreen(() => {
console.log('滚动完成');
});
} else {
console.log('页面没有足够的内容进行滚动,或者自动滚动已关闭');
}
});
})();