Autopage规则编写指南:XIU2/UserScript自定义翻页

Autopage规则编写指南:XIU2/UserScript自定义翻页

【免费下载链接】UserScript 🐵 自用的一些乱七八糟 油猴脚本~ 【免费下载链接】UserScript 项目地址: https://gitcode.com/gh_mirrors/us/UserScript

你是否还在为浏览论坛、搜索结果时频繁点击"下一页"而烦恼?是否希望网页内容能像瀑布流一样自动加载,让阅读体验更加流畅?Autopage(自动无缝翻页)脚本正是为解决这些问题而生。本文将带你深入了解如何编写自定义翻页规则,让Autopage脚本适配你常用的任何网站。

什么是Autopage

Autopage是XIU2/UserScript项目中的一款用户脚本,它能自动识别网页的分页结构,将下一页内容无缝加载到当前页面底部,实现类似瀑布流的无限滚动效果。目前已支持论坛、搜索引擎、社交媒体等多种类型的网站,如Discuz!、Flarum、百度、谷歌等。

Autopage的核心优势

  • 无缝加载:自动将下一页内容加载到当前页面底部,无需手动点击
  • 高度可定制:通过自定义规则适配几乎任何分页网站
  • 智能识别:内置多种常见论坛系统的自动识别功能
  • 灵活配置:支持自定义翻页按钮、内容区域、加载时机等

规则文件结构解析

Autopage的翻页规则主要定义在两个文件中:

rules.json基本结构

rules.json采用JSON格式,每个网站规则是一个对象,包含以下主要属性:

"网站名称": {
  "host": ["域名1", "域名2"],  // 匹配的域名,可以是字符串或正则表达式
  "url": "/^\\/search/",       // 匹配的URL路径,可以是字符串、正则表达式或函数
  "style": ".pagination{display:none;}", // 自定义CSS样式
  "history": true,             // 是否添加历史记录
  "thread": true,              // 是否为帖子内页模式
  "pager": {                   // 分页相关配置
    "nextL": "a.next",         // 下一页链接选择器
    "pageE": ".content",       // 内容区域选择器
    "replaceE": ".pagination"  // 分页控件选择器(加载后替换)
  }
}

编写自定义规则的基本步骤

1. 确定网站信息

首先需要确定规则适用的网站域名和URL结构。例如,为百度搜索编写规则:

"百度搜索": {
  "host": ["www.baidu.com", "ipv6.baidu.com"],
  "url": "fun.isUrlC(); if (fun.isMobile()) {location.hostname = 'm.baidu.com';} else {return (fun.lp() == '/s')}"
}
  • host:指定适用的域名,可以是字符串数组或正则表达式
  • url:指定适用的URL路径,可以是:
    • 字符串:精确匹配路径
    • 正则表达式:以/开头和结尾,如/^\\/search/
    • 函数:使用JavaScript代码判断是否匹配

2. 定位关键元素

使用浏览器的开发者工具(F12)定位三个关键元素:

  • 下一页链接:用户通常点击的"下一页"按钮或链接
  • 内容区域:需要保留的主要内容部分
  • 分页控件:包含页码的控件(加载新页后会被替换)

例如,为一个典型博客网站定位元素:

"博客网站": {
  "host": "www.example.com",
  "url": "/^\\/blog/",
  "pager": {
    "nextL": "a[rel='next']",       // 下一页链接,通常有rel="next"属性
    "pageE": "article.post",        // 文章内容区域
    "replaceE": "nav.pagination"    // 分页导航控件
  }
}

3. 选择器类型

Autopage支持多种类型的选择器:

  • CSS选择器:最常用的选择器类型,如"a.next""#pagination"
  • XPath选择器:以//开头,如"//a[text()='下一页']"
  • JavaScript函数:以js;开头,如"js; return document.querySelector('a.next')?.href"

4. 处理特殊情况

动态加载内容

有些网站使用AJAX动态加载内容,这时候需要使用type属性指定加载方式:

"动态加载网站": {
  "host": "www.example.com",
  "pager": {
    "type": 2,               // 类型2表示点击加载更多按钮
    "nextL": "button.load-more", // 加载更多按钮
    "interval": 1000         // 点击间隔时间(毫秒)
  }
}
图片懒加载处理

对于使用懒加载的图片,可以通过function属性定义处理函数:

"图片网站": {
  "host": "www.example.com",
  "function": {
    "bF": "return fun.src_bF(pageE,[0,'img[data-src]','data-src'])"
  }
}

上述代码会将data-src属性的值赋给src属性,触发图片加载。

高级规则配置

分页类型(type)详解

Autopage支持多种分页类型,通过pager.type指定:

类型值说明适用场景
0默认类型普通链接跳转分页
2点击加载点击"加载更多"按钮加载内容
5自定义函数需要复杂逻辑计算下一页URL
6AJAX加载通过AJAX加载内容并替换

使用JavaScript函数增强规则

对于复杂的匹配逻辑或处理过程,可以使用JavaScript函数:

"复杂网站": {
  "host": "www.example.com",
  "url": "fun.isUrlC(); return (fun.lp() == '/search' && fun.indexOF('q=','s'))",
  "pager": {
    "nextL": "js; let page = parseInt(getCSS('.current').textContent) + 1; return '/search?page=' + page"
  }
}

自定义样式和函数

  • style:自定义CSS样式,用于隐藏不需要的元素或调整布局
  • function:自定义JavaScript函数,包含以下几个钩子:
    • bF:加载内容前处理
    • aF:加载内容后处理
"自定义样式和函数示例": {
  "host": "www.example.com",
  "style": ".ads{display:none !important;}",
  "function": {
    "bF": "pageE.forEach(e => e.classList.add('new-page'))",
    "aF": "initImages(); bindEvents();"
  }
}

调试与测试

规则调试方法

  1. 查看控制台输出:Autopage会在浏览器控制台输出加载状态和错误信息
  2. 使用开发者工具:检查元素选择器是否正确匹配
  3. 修改本地规则:可以先修改本地rules.json进行测试,成功后再考虑提交PR

常见问题排查

  • 规则不生效:检查host和url是否匹配当前页面
  • 选择器错误:使用document.querySelector()在控制台测试选择器
  • 分页类型错误:根据网站分页方式选择正确的type值
  • 冲突问题:检查是否有其他脚本影响页面结构

规则示例:为"示例论坛"编写规则

让我们以一个假设的"示例论坛"为例,完整编写一个翻页规则。

网站特点分析

  • 域名为:forum.example.com
  • 列表页URL:/forum-1-1.html(板块1,页码1)
  • 帖子页URL:/thread-12345-1-1.html(帖子ID12345,页码1)
  • 下一页链接:<a href="/forum-1-2.html" class="nxt">下一页</a>
  • 内容区域:<div class="threadlist">...</div>
  • 分页控件:<div class="pagenav">...</div>

编写列表页规则

"示例论坛 - 列表页": {
  "host": "forum.example.com",
  "url": "/^\\/forum-\\d+-\\d+\\.html/",
  "pager": {
    "nextL": "a.nxt",
    "pageE": ".threadlist",
    "replaceE": ".pagenav"
  }
}

编写帖子页规则

"示例论坛 - 帖子内": {
  "host": "forum.example.com",
  "url": "/^\\/thread-\\d+-\\d+-\\d+\\.html/",
  "thread": true,
  "pager": {
    "nextL": "js; let href = fun.getCSS('a.nxt').href; return href.replace(/-\\d+-\\d+\\.html$/, '-' + (parseInt(RegExp.$1)+1) + '-1.html')",
    "pageE": "#postlist",
    "replaceE": ".pagenav"
  }
}

规则贡献与分享

如果你编写了新的规则并希望分享给其他用户,可以通过以下方式贡献:

  1. Fork XIU2/UserScript项目
  2. 修改other/Autopage/rules.json添加你的规则
  3. 提交Pull Request

总结与展望

通过本文的介绍,你应该已经掌握了Autopage规则的基本结构和编写方法。Autopage脚本为我们提供了一个强大的工具,让网页浏览体验更加流畅高效。随着你编写的规则越来越多,几乎所有你常用的网站都能实现自动翻页功能。

未来,Autopage可能会加入更多智能识别功能,进一步降低规则编写的门槛。但在此之前,手动编写自定义规则仍然是最灵活和强大的方式。

现在,是时候动手为你常用的网站编写Autopage规则了。祝你编写愉快,浏览顺畅!

如果你有任何问题或建议,欢迎在项目的Issues区提出,或参与社区讨论。

提示:Autopage规则会定期自动更新,你也可以通过脚本菜单手动更新。规则文件的最后更新时间记录在other/Autopage/ruleUpdateTime.json中。

【免费下载链接】UserScript 🐵 自用的一些乱七八糟 油猴脚本~ 【免费下载链接】UserScript 项目地址: https://gitcode.com/gh_mirrors/us/UserScript

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值