← 全部文章

教程

自动展开"显示更多"并加载分页内容

评论线程、产品评价、文档和搜索结果都喜欢把内容藏在"显示更多"按钮后面,或者把它拆分到无尽的页面上。用一条 JustZix JavaScript 规则,你可以自动展开并加载全部内容,然后在一次连续的滚动中阅读。

模式:点击直到它消失

一条自动展开规则反复做一件事:找到按钮、点击它、等待新内容、重复——直到按钮消失。下面是一个自包含的版本,带一个安全上限,使它永远无法无限循环。

function autoExpand(selector, maxClicks) {
  var clicks = 0;
  var timer = setInterval(function () {
    var btn = document.querySelector(selector);
    if (!btn || clicks >= maxClicks) {
      clearInterval(timer);
      return;
    }
    btn.click();
    clicks++;
  }, 800);
}

autoExpand('.show-more-button', 50);

800 毫秒的间隔给页面时间在两次点击之间渲染新条目。对慢速网站把它调大。maxClicks 上限 50 防止在无限信息流上失控循环。

按文本匹配按钮

如果按钮没有稳定的选择器,就按它的标签来找它。这个辅助函数返回第一个文本匹配的可见元素。

function findByText(words) {
  var els = document.querySelectorAll('button, a, [role="button"]');
  for (var i = 0; i < els.length; i++) {
    var t = (els[i].textContent || '').trim().toLowerCase();
    for (var j = 0; j < words.length; j++) {
      if (t.indexOf(words[j]) !== -1 && els[i].offsetParent !== null) {
        return els[i];
      }
    }
  }
  return null;
}

var timer = setInterval(function () {
  var btn = findByText(['show more', 'load more', 'view more', 'see more']);
  if (btn) { btn.click(); } else { clearInterval(timer); }
}, 800);

offsetParent !== null 检查跳过隐藏的按钮,所以当真正的按钮被移除时循环会正确结束。

一次展开每个折叠的章节

文档页面常常使用许多小切换(FAQ 手风琴、代码示例)。要一次全部打开,就点击每个当前折叠的切换。

var toggles = document.querySelectorAll('[aria-expanded="false"]');
toggles.forEach(function (t) {
  t.click();
});

aria-expanded 属性是一项 Web 标准,所以这在大量无障碍组件上都有效,无需按站点的选择器。

自动加载下一页

对于经典的编号分页,你可以把下一页的条目拉进当前页。这个版本找到"下一页"链接,用 fetch 在同源上获取页面,并追加新的列表项。

function loadNextPage(listSelector, nextSelector) {
  var next = document.querySelector(nextSelector);
  var list = document.querySelector(listSelector);
  if (!next || !list || !next.href) return;

  fetch(next.href)
    .then(function (r) { return r.text(); })
    .then(function (html) {
      var doc = new DOMParser().parseFromString(html, 'text/html');
      var newList = doc.querySelector(listSelector);
      if (newList) {
        Array.prototype.forEach.call(newList.children, function (item) {
          list.appendChild(item);
        });
      }
    })
    .catch(function () { /* 忽略网络错误 */ });
}

loadNextPage('.results-list', 'a[rel="next"]');

这只会从你已经所在的同一个网站请求页面——没有第三方调用。如果你想一次拉取好几页,就把它包在一个带点击上限的循环里。

实用建议

现成示例里找到即插即用的版本,或者下载 JustZix 开始自动化。如果网站上选择也被禁用了,参见解除对复制和右键的封锁

为这篇文章评分

暂无评分 — 成为第一个。

自己动手试试

安装 JustZix,粘贴本文中的任意代码片段。两分钟,从零到一条在你所有设备上生效的规则。

获取 JustZix

功能 · 工作原理 · 示例 · 应用场景