⭐无缝加载 下一页内容 至网页底部(类似瀑布流,无限滚动,无需手动点击下一页)⭐,目前支持:【所有「Discuz!、Flarum、phpBB、MyBB、Xiuno、XenForo、NexusPHP...」论坛】【百度、谷歌(Google)、必应(Bing)、搜狗、微信、360、Yahoo、Yandex 等搜索引擎...】、贴吧、豆瓣、知乎、NGA、V2EX、起点中文、千图网、千库网、Pixabay、Pixiv、3DM、游侠网、游民星空、NexusMods、Steam 创意工坊、CS.RIN.RU、RuTracker、BT之家、萌番组、动漫花园、樱花动漫、爱恋动漫、AGE 动漫、Nyaa、SrkBT、RARBG、SubHD、423Down、不死鸟、扩展迷、小众软件、【动漫狂、动漫屋、漫画猫、漫画屋、漫画 DB、HiComic、Mangabz、Xmanhua 等漫画网站...】、PubMed、Z-Library、GreasyFork、Github、StackOverflow(以上仅一小部分常见网站,更多的写不下了...
不会添加这个功能,而且改代码的话也不是改一两行就能实现的。
不过你可以进去网页 1 秒后,直接把滚动条拉到底,然后脚本就会一直加载下一页(滚动条低于触发线就会一直触发),直到最后一页。
不会添加这个功能,而且改代码的话也不是改一两行就能实现的。
不过你可以进去网页 1 秒后,直接把滚动条拉到底,然后脚本就会一直加载下一页(滚动条低于触发线就会一直触发),直到最后一页。
拉到底之后它会不停的向上动,还是要一次一次的拉才行。我看了下代码触发翻页是这个scrollD 但是我自己改了这个值好像没什么作用呢,比如改到9000之类的 也能少拉几次。
xiurenji: {
host: /\.xiuren[a-z]+\./,
functionS: function() {insStyle('img[src$=".gif"]:not([src*="logo"]) {display: none !important;}');
if (indexOF('.html') && !indexOF('/index')) {
curSite = DBSite.xiurenji;
} else if (indexOF('search')) {
curSite = DBSite.xiurenji_search;
} else {
curSite = DBSite.xiurenji_list;
}},
pager: {
type: 1,
nextL: '//div[@class="page"]/a[text()="下页"]',
pageE: 'css;div.content > p > *',
replaceE: 'css;.page',
scrollD: 1500
}
}, // xiurenji - 图片页
xiurenji_list: {
pager: {
type: 1,
nextL: '//div[@class="page"]/a[text()="下页"]',
pageE: 'css;li.i_list',
replaceE: 'css;.page',
scrollD: 1000
}
}, // xiurenji - 分类页
xiurenji_search: {
pager: {
type: 1,
nextL: 'css;.page > a.current+a',
pageE: 'css;.node > *',
replaceE: 'css;.page',
scrollD: 700
}
}, // xiurenji - 搜索页
大神能给指导一下嘛
如果要改动代码实现你要的功能,那么其他所有网站规则都会受影响,这意味着你修改后,这个脚本就只适用于这个网站了。
如果你要采集保存这网站的图片,何必这么多此一举呢。。。
就是另写一个针对性的脚本,都比改来改去的更快更好。
我直接复制了一份脚本,精简到只支持这个网站的图片页,打开网页后每隔 500 毫秒就会翻页一次。
如果这个网站改域名了,那你只需要改一下脚本开头的域名即可。
这个新脚本会和 [自动无缝翻页] 冲突,记得在 [自动无缝翻页] 菜单选项中禁用这个网站,或者你打开该网站图片页时,点一下左下角的页码按钮暂停翻页,以避免两个脚本冲突。
我只帮你到这里了,其他需求、改动什么的后续你自己研究吧。
// ==UserScript==
// @name 自动无缝翻页 - xiuren
// @version 1.0.0
// @author X.I.U
// @description 给 @丝情画意 临时写的
// @match https://www.xiurenb.net/*
// @grant GM_xmlhttpRequest
// @license GPL-3.0 License
// @run-at document-end
// @namespace xiuren
// ==/UserScript==
(function() {
'use strict';
var curSite = {SiteTypeID: 0}, SiteType, pausePage = true, lp = location.pathname,
DBSite = {
xiurenji: {
functionS: function() {insStyle('img[src$=".gif"]:not([src*="logo"]) {display: none !important;}');if (location.pathname.indexOf('.html') > -1 && location.pathname.indexOf('/index') === -1) {curSite = DBSite.xiurenji;}},
pager: {
type: 1,
nextL: '//div[@class="page"]/a[text()="下页"]',
pageE: 'css;div.content > p > *',
replaceE: 'css;.page',
scrollD: 1500
}
} // xiurenji - 图片页
}
DBSite.xiurenji.functionS()
// 插入 Style CSS 样式
if (curSite.style) insStyle(curSite.style)
curSite.pageUrl = ''; // 下一页URL
let timer = setInterval(function(){ // 每 500 毫秒翻页一次
if (pausePage === false) {
clearInterval(timer); // 取消定时器
} else {
checkURL(getPageElems); // 继续循环翻页
}
}, 500);
// --------------------------------------------------------
// 翻页类型 1/3
function getPageElems(url) {
GM_xmlhttpRequest({
url: url,
method: 'GET',
overrideMimeType: 'text/html; charset=' + document.charset,
headers: {
'Referer': location.href
},
timeout: 10000,
onload: function (response) {
try {
//console.log('最终 URL:' + response.finalUrl, '返回内容:' + response.responseText)
processElems(createDocumentByString(response.responseText));
} catch (e) {
console.log(e);
}
}
});
}
// XHR 后处理结果,插入、替换元素等(适用于翻页类型 1/3/6)
function processElems(response) {
if (!curSite.pager.insertP) {curSite.pager.insertP = [curSite.pager.pageE, 5]}
let pageElems = getAll(curSite.pager.pageE, response, response), toElement;
if (curSite.pager.insertP[1] === 5) { // 插入 pageE 列表最后一个元素的后面
toElement = getAll(curSite.pager.insertP[0]).pop();
} else {
toElement = getOne(curSite.pager.insertP[0]);
}
if (pageElems.length > 0 && toElement) {
// 插入位置
let addTo = getAddTo(curSite.pager.insertP[1]);
// 插入新页面元素
if (curSite.pager.insertP[1] === 2 || curSite.pager.insertP[1] === 4 || curSite.pager.insertP[1] === 5) pageElems.reverse(); // 插入到 [元素内头部]、[目标本身后面] 时,需要反转顺序
pageElems.forEach(function (one) {toElement.insertAdjacentElement(addTo, one);});
// 替换待替换元素
if (curSite.pager.replaceE) replaceElems(response);
}
}
// 通用型获取下一页地址(从 元素 中获取页码)
function getNextE(css) {
if (!css) css = curSite.pager.nextL;
let next = getOne(css)
if (next && next.nodeType === 1 && next.href && next.href.slice(0,4) === 'http' && next.href != curSite.pageUrl) {
if (curSite.pager.forceHTTPS && location.protocol === 'https:') {
curSite.pageUrl = next.href.replace(/^http:/,'https:');
} else {
curSite.pageUrl = next.href;
}
//console.log(curSite.pageUrl)
return true
}
pausePage = false;
return false
}
// 检查 URL
function checkURL(func) {
if (typeof curSite.pager.nextL == 'function') {
let tempUrl = curSite.pager.nextL();
if (!tempUrl || (tempUrl && tempUrl.slice(0,4) != 'http') || tempUrl === curSite.pageUrl ) {pausePage = false; return};
curSite.pageUrl = tempUrl;
func(curSite.pageUrl);
} else if (getNextE()) {
func(curSite.pageUrl);
}
//console.log(curSite.pageUrl);
}
// 替换元素
function replaceElems(pageElems, o = curSite.pager.replaceE, r = curSite.pager.replaceE) {
let oriE = getAll(o),
repE = getAll(r, pageElems, pageElems);
//console.log(oriE, repE)
if (oriE.length != 0 && repE.length != 0 && oriE.length === repE.length) {
for (let i = 0; i < oriE.length; i++) {
oriE[i].outerHTML = repE[i].outerHTML;
}
return true
}
return false
}
// 插入 <Style>
function insStyle(style) {
document.documentElement.appendChild(document.createElement('style')).textContent = style;
}
// 获取元素(CSS/Xpath)来自:https://github.com/machsix/Super-preloader
function getCSS(css, contextNode = document) {
return contextNode.querySelector(css);
}
function getAllCSS(css, contextNode = document) {
return [].slice.call(contextNode.querySelectorAll(css));
}
function getXpath(xpath, contextNode, doc = document) {
contextNode = contextNode || doc;
try {
const result = doc.evaluate(xpath, contextNode, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
// 应该总是返回一个元素节点
return result.singleNodeValue && result.singleNodeValue.nodeType === 1 && result.singleNodeValue;
} catch (err) {
throw new Error(`无效 Xpath: ${xpath}`);
}
}
function getAllXpath(xpath, contextNode, doc = document) {
contextNode = contextNode || doc;
const result = [];
try {
const query = doc.evaluate(xpath, contextNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (let i = 0; i < query.snapshotLength; i++) {
const node = query.snapshotItem(i);
// 如果是 Element 节点
if (node.nodeType === 1) result.push(node);
}
} catch (err) {
throw new Error(`无效 Xpath: ${xpath}`);
}
return result;
}
function getOne(selector, contextNode = undefined, doc = document) {
if (!selector) return;
contextNode = contextNode || doc;
if (selector.search(/^css;/i) === 0) {
return getCSS(selector.slice(4), contextNode);
} else {
return getXpath(selector, contextNode, doc);
}
}
function getAll(selector, contextNode = undefined, doc = document) {
if (!selector) return [];
contextNode = contextNode || doc;
if (selector.search(/^css;/i) === 0) {
return getAllCSS(selector.slice(4), contextNode);
} else {
return getAllXpath(selector, contextNode, doc);
}
}
function createDocumentByString(e) {
if (e) {
if ('HTML' !== document.documentElement.nodeName) return (new DOMParser).parseFromString(e, 'application/xhtml+xml');
var t;
try { t = (new DOMParser).parseFromString(e, 'text/html');} catch (e) {}
if (t) return t;
if (document.implementation.createHTMLDocument) {
t = document.implementation.createHTMLDocument('ADocument');
} else {
try {((t = document.cloneNode(!1)).appendChild(t.importNode(document.documentElement, !1)), t.documentElement.appendChild(t.createElement('head')), t.documentElement.appendChild(t.createElement('body')));} catch (e) {}
}
if (t) {
var r = document.createRange(),
n = r.createContextualFragment(e);
r.selectNodeContents(document.body);
t.body.appendChild(n);
for (var a, o = { TITLE: !0, META: !0, LINK: !0, STYLE: !0, BASE: !0}, i = t.body, s = i.childNodes, c = s.length - 1; c >= 0; c--) o[(a = s[c]).nodeName] && i.removeChild(a);
return t;
}
} else console.error('没有找到要转成 DOM 的字符串');
}
// 插入位置
function getAddTo(num) {
switch (num) {
case 1:
return 'beforebegin'; break;
case 2:
return 'afterbegin'; break;
case 3:
case 6:
return 'beforeend'; break;
case 4:
case 5:
return 'afterend'; break;
}
}
})();
大神费心了 但是只能翻到第二页就不动了 = =!
我随便点了几个图片页,都能正常翻页,可以明显看到滚动条变化,以及顶部的页码元素变化。
Edge、Chrome 都测试正常,脚本没问题。
脚本以外的问题,我不会去管,毕竟这个脚本只是临时给你写的,没有精力去一直提供帮助。
我随便点了几个图片页,都能正常翻页,可以明显看到滚动条变化,以及顶部的页码元素变化。
Edge、Chrome 都测试正常,脚本没问题。
脚本以外的问题,我不会去管,毕竟这个脚本只是临时给你写的,没有精力去一直提供帮助。
恩 好的 再次感谢大神的回复 (‐^▽^‐)
https://www.xiurenb.net/
这个网站 之前已经支持自动翻页了的 但是希望能直接一下子翻到底 就是不需要鼠标滚动到底部才显示, 这样可以方便直接保存图片。 希望大神能弄个这个功能,或者告诉我怎么改下代码