Files
UserScript/Autopage.user.js
T
2021-08-05 17:13:51 +08:00

1038 lines
43 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 自动无缝翻页
// @version 1.4.2
// @author X.I.U
// @description 自动无缝翻页,目前支持:所有「Discuz!、Flarum」论坛、豆瓣、微博、千图网、3DM、游侠网、游民星空、423Down、Apphot、不死鸟、亿破姐、小众软件、微当下载、落尘之木、异次元软件、老殁殁漂遥、异星软件空间、RARBG、PubMed、AfreecaTV、AlphaCoders、FitGirl Repacks...
// @match *://*/*
// @connect www.gamersky.com
// @icon https://i.loli.net/2021/03/07/rdijeYm83pznxWq.png
// @grant GM_xmlhttpRequest
// @grant GM_registerMenuCommand
// @grant GM_openInTab
// @grant GM_getValue
// @grant GM_setValue
// @license GPL-3.0 License
// @run-at document-end
// @namespace https://github.com/XIU2/UserScript
// @supportURL https://github.com/XIU2/UserScript
// @homepageURL https://github.com/XIU2/UserScript
// ==/UserScript==
(function() {
'use strict';
var webType, curSite = {SiteTypeID: 0};
// 目前支持的网站
const websiteList = ['movie.douban.com', 'weibo.com', 'www.58pic.com',
'www.3dmgame.com', 'www.ali213.net', 'gl.ali213.net', 'www.gamersky.com',
'www.423down.com', 'apphot.cc', 'iao.su', 'www.ypojie.com', 'www.appinn.com', 'www.weidown.com', 'www.luochenzhimu.com', 'www.iplaysoft.com', 'www.mpyit.com', 'www.yxssp.com',
'rarbgprx.org',
'pubmed.ncbi.nlm.nih.gov',
'www.afreecatv.com',
'art.alphacoders.com', 'wall.alphacoders.com', 'avatars.alphacoders.com', 'mobile.alphacoders.com',
'fitgirl-repacks.site'];
if (GM_getValue('menu_disable') == null){GM_setValue('menu_disable', [])};
if (GM_getValue('menu_discuz_thread_page') == null){GM_setValue('menu_discuz_thread_page', true)};
// 注册脚本菜单
if (menu_disable('check')) { // 当前网站是否已存在禁用列表中
GM_registerMenuCommand('❎ 已禁用 (点击对当前网站启用)', function(){menu_disable('del')});
return
} else {
if (websiteList.indexOf(location.host) > -1) {
webType = 1 // 其他网站
} else if (document.querySelector('meta[name="author"][content*="Discuz!"], meta[name="generator"][content*="Discuz!"]') || document.getElementById('ft') && document.getElementById('ft').textContent.indexOf('Discuz!') > -1) {
webType = 2 // 所有 Discuz! 论坛
} else if (document.getElementById('flarum-loading')) {
webType = 3 // 所有 Flarum 论坛
} else {
GM_registerMenuCommand('❌ 当前网站暂不支持 [点击申请支持]', function () {window.GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true});window.GM_openInTab('https://greasyfork.org/zh-CN/scripts/419215/feedback', {active: true,insert: true,setParent: true});});
return
}
GM_registerMenuCommand('✅ 已启用 (点击对当前网站禁用)', function(){menu_disable('add')});
if (webType === 2) {
GM_registerMenuCommand(`${GM_getValue('menu_discuz_thread_page')?'✅':'❎'} 帖子内自动翻页 (仅 Discuz! 论坛)`, function(){menu_switch(GM_getValue('menu_discuz_thread_page'), 'menu_discuz_thread_page', 'Discuz! 论坛帖子内翻页')});
}
}
GM_registerMenuCommand('💬 反馈 & 欢迎申请支持', function () {window.GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true});window.GM_openInTab('https://greasyfork.org/zh-CN/scripts/419215/feedback', {active: true,insert: true,setParent: true});});
/*
自动翻页规则
type:
1 = 脚本实现自动无缝翻页
2 = 网站自带了自动无缝翻页功能,只需要点击下一页按钮即可
nextText: 按钮文本,只有按钮文本为该文本时才会点击按钮加载下一页,避免一瞬间加载太多次下一页
intervals: 点击间隔时间,对于没有按钮文字变化的按钮,可以手动指定间隔时间,单位:ms
3 = 依靠元素距离可视区域底部的距离来触发翻页
HT_insert:
1 = 插入该元素本身的前面;
2 = 插入该元素当中,第一个子元素前面;
3 = 插入该元素当中,最后一个子元素后面;
4 = 插入该元素本身的后面;
scrollDelta:数值越大,滚动条触发点越靠上(越早开始翻页),一般是访问网页速度越慢,该值就需要越大(如果 Type = 3,则相反)
function:
before = 插入前执行函数;
after = 插入后执行函数;
parameter = 参数
*/
let DBSite = {
discuz_forum: {
SiteTypeID: 0,
pager: {
type: 2,
nextLink: '#autopbn',
nextText: '下一页 »',
scrollDelta: 1000
}
},
discuz_thread: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="nxt"][@href]',
pageElement: 'css;div#postlist > div[id^="post_"]',
HT_insert: ['css;div#postlist', 3],
replaceE: 'css;div.pg',
scrollDelta: 1000
}
},
discuz_search: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="nxt"][@href]',
pageElement: 'css;div#threadlist > ul',
HT_insert: ['css;div#threadlist', 3],
replaceE: 'css;div.pg',
scrollDelta: 1000
}
},
discuz_guide: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="nxt"][@href]',
pageElement: 'css;div#threadlist div.bm_c table > tbody',
HT_insert: ['css;div#threadlist div.bm_c table', 3],
replaceE: 'css;div.pg',
scrollDelta: 1000
}
},
discuz_youspace: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="nxt"][@href]',
pageElement: 'css;tbody > tr:not(.th)',
HT_insert: ['css;tbody', 3],
replaceE: 'css;div.pg',
scrollDelta: 1000
}
},
discuz_collection: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="nxt"][@href]',
pageElement: 'css;div#ct div.bm_c table > tbody',
HT_insert: ['css;div#ct div.bm_c table', 3],
replaceE: 'css;div.pg',
scrollDelta: 1000
}
},
flarum: {
SiteTypeID: 0,
pager: {
type: 2,
nextLink: '.DiscussionList-loadMore > button[title]',
scrollDelta: 1000
}
},
douban_subject_comments: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="next"][@href]',
pageElement: 'css;#comments > .comment-item',
HT_insert: ['css;#paginator', 1],
replaceE: 'css;#paginator',
scrollDelta: 1000
}
},
douban_subject_reviews: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//link[@rel="next"][@href]',
pageElement: 'css;.review-list > div',
HT_insert: ['css;.review-list', 3],
replaceE: 'css;.paginator',
scrollDelta: 1000
}
},
douban_subject_episode: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//link[@rel="next"][@href]',
pageElement: 'css;#comments > div',
HT_insert: ['css;#comments', 3],
replaceE: 'css;.paginator',
scrollDelta: 1000
}
},
weibo_comment: {
SiteTypeID: 0,
pager: {
type: 2,
nextLink: 'a[action-type="click_more_comment"]',
nextText: '查看更多c',
scrollDelta: 1000
}
},
_58pic: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//div[contains(@class,"page-box")]//a[text()="下一页"][@href]',
pageElement: 'css;.pic-box > .qtw-card',
HT_insert: ['css;.pic-box', 3],
replaceE: 'css;.page-box',
scrollDelta: 2000
},
function: {
before: _58pic_beforeFunction
}
},
_58pic_c: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//div[contains(@class,"page-box")]//a[text()="下一页"][@href]',
pageElement: 'css;.list-box > .qtw-card',
HT_insert: ['css;.list-box', 3],
replaceE: 'css;.page-box',
scrollDelta: 4000
},
function: {
before: _58pic_beforeFunction
}
},
_3dmgame: {
SiteTypeID: 0,
pager: {
type: 3,
nextLink: '//li[@class="next"]/a[@href]',
pageElement: 'css;.news_warp_center > *',
HT_insert: ['css;.news_warp_center', 3],
replaceE: 'css;.pagewrap',
scrollElement: '.pagewrap',
scrollDelta: 400
}
},
ali213_www: {
SiteTypeID: 0,
pager: {
type: 3,
nextLink: '//a[@id="after_this_page"][@href]',
pageElement: 'css;#Content >*:not(.news_ding):not(.page_fenye)',
HT_insert: ['css;.page_fenye', 1],
replaceE: 'css;.page_fenye',
scrollElement: '.page_fenye',
scrollDelta: 400
}
},
ali213_gl: {
SiteTypeID: 0,
pager: {
type: 3,
nextLink: '//a[@class="next n"][@href]',
pageElement: 'css;.c-detail >*',
HT_insert: ['css;.c-detail', 3],
replaceE: 'css;.page_fenye',
scrollElement: '.page_fenye',
scrollDelta: 400
}
},
gamersky_ent: {
SiteTypeID: 0,
pager: {
type: 3,
nextLink: '//div[@class="page_css"]/a[text()="下一页"][@href]',
pageElement: 'css;.Mid2L_con > *:not(.gs_nc_editor):not(.pagecss):not(.page_css):not(.gs_ccs_solve):not(.post_ding)',
HT_insert: ['css;.page_css', 1],
replaceE: 'css;.page_css',
scrollElement: '.page_css',
scrollDelta: 100
}
},
gamersky_gl: {
SiteTypeID: 0,
pager: {
type: 3,
nextLink: '//div[@class="page_css"]/a[text()="下一页"][@href]',
pageElement: 'css;.Mid2L_con > *:not(.gs_nc_editor):not(.pagecss):not(.gs_ccs_solve):not(.post_ding)',
HT_insert: ['css;.gs_nc_editor', 1],
replaceE: 'css;.page_css',
scrollElement: '.pagecss',
scrollDelta: -1000
},
function: {
before: gamersky_gl_beforeFunction
}
},
_423down_postslist: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//div[@class="paging"]//a[contains(text(),"下一页")][@href]',
pageElement: 'css;div.content-wrap ul.excerpt > li',
HT_insert: ['css;div.content-wrap ul.excerpt', 3],
replaceE: 'css;div.paging',
scrollDelta: 1500
}
},
apphot_postslist: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//div[@class="pagination"]//a[contains(text(),"下一页")][@href]',
pageElement: 'css;div.content > article.excerpt',
HT_insert: ['css;div.pagination', 1],
replaceE: 'css;div.pagination',
scrollDelta: 1500
}
},
iao_su_postslist: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//li[@class="btn btn-primary next"]//a[@href]',
pageElement: 'css;#index > article, #archive > article',
HT_insert: ['css;ol.page-navigator', 1],
replaceE: 'css;ol.page-navigator',
scrollDelta: 800
},
function: {
before: iao_su_postslist_beforeFunction
}
},
appinn_postslist: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="next page-numbers"][@href]',
pageElement: 'css;section#latest-posts > article',
HT_insert: ['css;nav.navigation.pagination', 1],
replaceE: 'css;div.nav-links',
scrollDelta: 1500
}
},
weidown: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="nextpage"][@href]',
pageElement: 'css;.articleWrapper > .itemArticle, .articleWrapper > .richTextItem.search',
HT_insert: ['css;.articleWrapper', 3],
replaceE: 'css;#pageGroup',
scrollDelta: 1500
}
},
weidown_search: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="nextpage"][@href]',
pageElement: 'css;.articleListWrapper > .richTextItem.search',
HT_insert: ['css;#pageGroup', 1],
replaceE: 'css;#pageGroup',
scrollDelta: 700
}
},
weidown_special: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="nextpage"][@href]',
pageElement: 'css;.special > .item',
HT_insert: ['css;.special', 3],
replaceE: 'css;#pageGroup',
scrollDelta: 700
}
},
luochenzhimu: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//li[@class="next-page"]/a[@href]',
pageElement: 'css;.content > article',
HT_insert: ['css;.content > .pagination', 1],
replaceE: 'css;.content > .pagination',
scrollDelta: 1000
},
function: {
before: luochenzhimu_beforeFunction
}
},
iplaysoft_postslist: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//div[@class="pagenavi"]//a[@title="下一页"][@href]',
pageElement: 'css;#postlist > div.entry',
HT_insert: ['css;#postlist > .pagenavi-button', 1],
replaceE: 'css;.pagenavi-button, .pagenavi',
scrollDelta: 1200
},
function: {
before: iplaysoft_postslist_beforeFunction
}
},
iplaysoft_postcomments: {
SiteTypeID: 0,
pager: {
type: 2,
nextLink: '#loadHistoryComments',
nextText: '展开后面',
scrollDelta: 1200
}
},
mpyit: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="page-numbers"][@title="下一页"][@href]',
pageElement: 'css;#post > div[id^="post-"]',
HT_insert: ['css;#post > #pagenavi', 1],
replaceE: 'css;#post > #pagenavi',
scrollDelta: 1700
}
},
mpyit_category: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="page-numbers"][@title="下一页"][@href]',
pageElement: 'css;#content > div[class^="entry_box"]',
HT_insert: ['css;#content > #pagenavi', 1],
replaceE: 'css;#content > #pagenavi',
scrollDelta: 1700
}
},
yxssp: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//div[@class="page-nav td-pb-padding-side"]/a[last()][@href]',
pageElement: 'css;.td-modules-container.td-module-number4 > div',
HT_insert: ['css;.td-modules-container.td-module-number4', 3],
replaceE: 'css;.page-nav.td-pb-padding-side',
scrollDelta: 1000
}
},
rarbgprx: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '(//a[@title="next page"])[1][@href]',
pageElement: 'css;table.lista2t tr.lista2',
HT_insert: ['css;table.lista2t > tbody', 3],
replaceE: 'css;#pager_links',
scrollDelta: 900
}
},
pubmed_postslist: {
SiteTypeID: 0,
pager: {
type: 2,
nextLink: 'button.load-button.next-page',
nextText: 'Show more',
scrollDelta: 1500
}
},
afreecatv: {
SiteTypeID: 0,
pager: {
type: 2,
nextLink: '.btn-more > button',
intervals: 2000,
scrollDelta: 1000
}
},
alphacoders_art: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@id="next_page"][@href]',
pageElement: 'css;.container-masonry > div',
HT_insert: ['css;.container-masonry', 3],
replaceE: '//div[@class="hidden-xs hidden-sm"]/..',
scrollDelta: 1000
},
function: {
before: alphacoders_art_beforeFunction
}
},
alphacoders_wall: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@id="next_page"][@href]',
pageElement: 'css;.thumb-container-big, .avatar-thumb, .thumb-element',
HT_insert: ['css;.thumb-container-big:nth-last-child(1), .avatar-thumb:nth-last-child(1), .thumb-element:nth-last-child(1)', 4],
replaceE: '//div[@class="hidden-xs hidden-sm"]/..',
scrollDelta: 1000
}
},
fitgirl: {
SiteTypeID: 0,
pager: {
type: 1,
nextLink: '//a[@class="next page-numbers"][@href]',
pageElement: 'css;article[id^="post-"]',
HT_insert: ['css;nav.navigation.paging-navigation', 1],
replaceE: 'css;nav.navigation.paging-navigation',
scrollDelta: 2000
}
}
};
// 生成 ID
generateID();
// 用于脚本判断
const SiteType = {
GAMERSKY_GL: DBSite.gamersky_gl.SiteTypeID
};
if (webType === 1) { // < 其他网站 >
switch (location.host) {
case 'movie.douban.com':
if (location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/comments') > -1) { // 短评
curSite = DBSite.douban_subject_comments;
} else if (location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/reviews') > -1) { // 影评
curSite = DBSite.douban_subject_reviews;
} else if(location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/episode') > -1) { // 电视剧每集评论
curSite = DBSite.douban_subject_episode;
}
break;
case 'weibo.com':
curSite = DBSite.weibo_comment;
break;
case 'www.58pic.com':
if (location.pathname.indexOf('/tupian/') > -1) {
curSite = DBSite._58pic;
} else if (location.pathname.indexOf('/c/') > -1) {
curSite = DBSite._58pic_c;
}
break;
case 'www.3dmgame.com':
curSite = DBSite._3dmgame;
break;
case 'www.ali213.net':
curSite = DBSite.ali213_www;
break;
case 'gl.ali213.net':
curSite = DBSite.ali213_gl;
document.lastElementChild.appendChild(document.createElement('style')).textContent = `.n_show_b {display: none !important;}` // 隐藏部分碍事元素
break;
case 'www.gamersky.com':
if (location.pathname.indexOf('/ent/') > -1) {
curSite = DBSite.gamersky_ent;
} else {
curSite = DBSite.gamersky_gl;
}
break;
case 'www.423down.com':
if (location.pathname.indexOf('.html') === -1) curSite = DBSite._423down_postslist;
break;
case 'apphot.cc':
if (location.pathname.indexOf('.html') === -1) curSite = DBSite.apphot_postslist;
break;
case 'iao.su':
curSite = DBSite.iao_su_postslist;
break;
case 'www.appinn.com':
curSite = DBSite.appinn_postslist;
break;
case 'www.weidown.com':
if (location.pathname.indexOf('/search/') > -1) {
curSite = DBSite.weidown_search;
} else if (location.pathname.indexOf('/special/') > -1) {
curSite = DBSite.weidown_special;
} else {
curSite = DBSite.weidown;
}
break;
case 'www.ypojie.com':
case 'www.luochenzhimu.com':
curSite = DBSite.luochenzhimu;
break;
case 'www.iplaysoft.com':
if (location.pathname.indexOf('.html') > -1 || location.pathname.indexOf('/p/') > -1) { // 文章内
curSite = DBSite.iplaysoft_postcomments;
} else { // 其他页面
curSite = DBSite.iplaysoft_postslist;
}
break;
case 'www.mpyit.com':
if (location.pathname === '/' && !location.search) {
curSite = DBSite.mpyit;
} else if (location.pathname.indexOf('/category/') > -1 || location.search.indexOf('?s=') > -1) {
curSite = DBSite.mpyit_category;
}
break;
case 'www.yxssp.com':
curSite = DBSite.yxssp;
break;
case 'rarbgprx.org':
curSite = DBSite.rarbgprx;
break;
case 'pubmed.ncbi.nlm.nih.gov':
curSite = DBSite.pubmed_postslist;
break;
case 'www.afreecatv.com':
curSite = DBSite.afreecatv;
break;
case 'art.alphacoders.com':
curSite = DBSite.alphacoders_art;
setTimeout(alphacoders_art_beforeFunction_0, 1000);
break;
case 'wall.alphacoders.com':
case 'avatars.alphacoders.com':
case 'mobile.alphacoders.com':
curSite = DBSite.alphacoders_wall;
break;
case 'fitgirl-repacks.site':
curSite = DBSite.fitgirl;
break;
}
} else if (webType === 2) { // < 所有 Discuz!论坛 >
if (location.pathname.indexOf('.html') > -1) { // 判断是不是静态网页(.html 结尾)
if (location.pathname.indexOf('forum') > -1) { // 各版块帖子列表
if (document.getElementById('autopbn')) { // 判断是否有 [下一页] 按钮
curSite = DBSite.discuz_forum;
} else {
curSite = DBSite.discuz_guide;
}
} else if (location.pathname.indexOf('thread') > -1) { // 帖子内
if (GM_getValue('menu_discuz_thread_page')) {
curSite = DBSite.discuz_thread;
hidePgbtn(); // 隐藏帖子内的 [下一页] 按钮
}
}else if(location.pathname.indexOf('search') > -1) { // 搜索结果
curSite = DBSite.discuz_search;
}
} else {
if (location.search.indexOf('mod=forumdisplay') > -1) { // 各版块帖子列表
if (document.getElementById('autopbn')) { // 判断是否有 [下一页] 按钮
curSite = DBSite.discuz_forum;
} else {
curSite = DBSite.discuz_guide;
}
} else if (location.search.indexOf('mod=viewthread') > -1) { // 帖子内
if (GM_getValue('menu_discuz_thread_page')) {
curSite = DBSite.discuz_thread;
hidePgbtn(); // 隐藏帖子内的 [下一页] 按钮
}
} else if (location.search.indexOf('mod=guide') > -1) { // 导读帖子列表
curSite = DBSite.discuz_guide;
} else if(location.search.indexOf('mod=space') > -1 && location.search.indexOf('&view=me') > -1) { // 别人的主题/回复
curSite = DBSite.discuz_youspace;
} else if (location.search.indexOf('mod=collection') > -1) { // 淘贴列表
curSite = DBSite.discuz_collection;
} else if (location.pathname.indexOf('search') > -1) { // 搜索结果
curSite = DBSite.discuz_search;
} else { // 考虑到部分论坛的部分板块帖子列表 URL 是自定义的
curSite = DBSite.discuz_forum;
}
}
} else if (webType === 3) { // < 所有 Flarum 论坛 >
curSite = DBSite.flarum;
}
curSite.pageUrl = ''; // 下一页URL
pageLoading(); // 自动无缝翻页
// 自动无缝翻页
function pageLoading() {
if (curSite.SiteTypeID > 0) {
windowScroll(function (direction, e) {
if (direction === "down") { // 下滑才准备翻页
let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop,
scrollHeight = window.innerHeight || document.documentElement.clientHeight,
scrollDelta = curSite.pager.scrollDelta;
if (curSite.pager.type === 3) { // 翻页类型 3
let scrollElement = document.querySelector(curSite.pager.scrollElement);
//console.log(scrollElement.offsetTop - (scrollTop + scrollHeight), scrollDelta, curSite.SiteTypeID)
if (scrollElement.offsetTop - (scrollTop + scrollHeight) <= scrollDelta) {
if (curSite.SiteTypeID === SiteType.GAMERSKY_GL) curSite.pager.scrollDelta -= 800 // 游民星空 gl 的比较奇葩,需要特殊处理下
ShowPager.loadMorePage();
}
} else {
if (document.documentElement.scrollHeight <= scrollHeight + scrollTop + scrollDelta) {
if (curSite.pager.type === 2) { // 翻页类型 2
if (curSite.SiteTypeID > 0) { // 如果指定了间隔时间,那么就依靠这个判断时间到了没有~
let autopbn = document.querySelector(curSite.pager.nextLink);
if (autopbn) { // 寻找下一页链接
if (!curSite.pager.nextText) { // 如果没有指定 nextText 就直接点击
autopbn.click();
} else if (autopbn.textContent.indexOf(curSite.pager.nextText) > -1){ // 如果指定了 nextText 就需要判断后再点击(避免已经在加载了,还重复点击)
autopbn.click();
}
// 对于没有按钮文字变化的按钮,可以手动指定间隔时间
if (curSite.pager.intervals) {
let _SiteTypeID = curSite.SiteTypeID;
curSite.SiteTypeID = 0;
setTimeout(function(){curSite.SiteTypeID = _SiteTypeID;}, curSite.pager.intervals)
}
}
}
} else { // 翻页类型 1
ShowPager.loadMorePage();
}
}
}
}
});
}
}
/*function getElementToPageTop(el) {
if(el.parentElement) {
return getElementToPageTop(el.parentElement) + el.offsetTop
}
return el.offsetTop
}*/
// 隐藏帖子内的 [下一页] 按钮(Discuz! 论坛)
function hidePgbtn() {
let style_hidePgbtn = document.createElement('style');
style_hidePgbtn.innerHTML = `.pgbtn {display: none;}`;
document.head.appendChild(style_hidePgbtn);
}
// 58pic 的插入前函数(加载图片)
function _58pic_beforeFunction(pageElems) {
let is_one = document.querySelector('.qtw-card.place-box.is-one');
if (is_one && is_one.style.display != 'none') {
is_one.setAttribute('style', 'display: none;')
}
pageElems.forEach(function (one) {
let now = one.querySelector('img.lazy')
if (now && now.getAttribute('src') != now.dataset.original) {
now.setAttribute('src', now.dataset.original)
now.setAttribute('style', 'display: block;')
}
});
return pageElems
}
// 游民星空攻略 的插入前函数(移除下一页底部的 "更多相关内容请关注:xxx" 文字)
function gamersky_gl_beforeFunction(pageElems) {
pageElems.forEach(function (one) {
if (one.tagName === 'P' && one.textContent.indexOf('更多相关内容请关注') > -1) {
one.style.display = 'none';
}
});
return pageElems
}
// iao.su 的插入前函数(加载图片)
function iao_su_postslist_beforeFunction(pageElems) {
pageElems.forEach(function (one) {
let now = one.getElementsByClassName('post-card')[0]
if (now) {
now.getElementsByClassName('blog-background')[0].style.backgroundImage = 'url("' + now.getElementsByTagName('script')[0].textContent.split("'")[1] + '")';
//now.getElementsByClassName('blog-background')[0].style.backgroundImage = 'url("' + RegExp("(?<=loadBannerDirect\\(').*(?=', '',)").exec(now.getElementsByTagName('script')[0].textContent)[0]; + '")';
}
});
return pageElems
}
// luochenzhimu 的插入前函数(加载图片)
function luochenzhimu_beforeFunction(pageElems) {
pageElems.forEach(function (one) {
let now = one.querySelector('img.thumb')
if (now) {
now.setAttribute('src', now.dataset.src)
}
});
return pageElems
}
// iplaysoft 的插入前函数(加载图片)
function iplaysoft_postslist_beforeFunction(pageElems) {
pageElems.forEach(function (one) {
let now = one.querySelector('img.lazyload')
if (now && !now.src) {
now.setAttribute('src', now.dataset.src)
now.setAttribute('srcset', now.dataset.src)
now.setAttribute('class', 'lazyloaded')
}
});
return pageElems
}
// alphacoders_art 的插入前函数(图片结构调整)
function alphacoders_art_beforeFunction(pageElems) {
pageElems.forEach(function (one) {
one.setAttribute('style','float: left');
});
return pageElems
}
// alphacoders_art(图片结构调整)
function alphacoders_art_beforeFunction_0() {
let pageElems1 = document.querySelectorAll('.container-masonry > div')
document.querySelector('.container-masonry').style.height = 'auto'
pageElems1.forEach(function (one) {
one.setAttribute('style','float: left');
});
}
// 启用/禁用 (当前网站)
function menu_disable(type) {
switch(type) {
case 'check':
if(check()) return true
return false
break;
case 'add':
add();
break;
case 'del':
del();
break;
}
function check() { // 存在返回真,不存在返回假
let list = GM_getValue('menu_disable'); // 读取网站列表
if (list.indexOf(location.host) === -1) return false // 不存在返回假
return true
}
function add() {
if (check()) return
let list = GM_getValue('menu_disable'); // 读取网站列表
list.push(location.host); // 追加网站域名
GM_setValue('menu_disable', list); // 写入配置
location.reload(); // 刷新网页
}
function del() {
if (!check()) return
let list = GM_getValue('menu_disable'), // 读取网站列表
index = list.indexOf(location.host);
list.splice(index, 1); // 删除网站域名
GM_setValue('menu_disable', list); // 写入配置
location.reload(); // 刷新网页
}
}
// 菜单开关
function menu_switch(menu_status, Name, Tips) {
if (menu_status === true){
GM_setValue(`${Name}`, false);
}else{
GM_setValue(`${Name}`, true);
}
location.reload();
};
// 生成 ID
function generateID() {
let num = 0
for (let val in DBSite) {
DBSite[val].SiteTypeID = num = num + 1;
}
}
// 滚动条事件
function windowScroll(fn1) {
var beforeScrollTop = document.documentElement.scrollTop,
fn = fn1 || function () {};
setTimeout(function () { // 延时执行,避免刚载入到页面就触发翻页事件
window.addEventListener("scroll", function (e) {
var afterScrollTop = document.documentElement.scrollTop,
delta = afterScrollTop - beforeScrollTop;
if (delta == 0) return false;
fn(delta > 0 ? "down" : "up", e);
beforeScrollTop = afterScrollTop;
}, false);
}, 1000)
}
var ShowPager = { // 修改自 https://greasyfork.org/scripts/14178
getFullHref: function (e) {
if(e == null) return '';
"string" != typeof e && (e = e.getAttribute("href"));
var t = this.getFullHref.a;
return t || (this.getFullHref.a = t = document.createElement("a")), t.href = e, t.href;
},
createDocumentByString: function (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();
r.selectNodeContents(document.body);
var n = r.createContextualFragment(e);
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的字符串");
},
loadMorePage: function () {
if (curSite.pager) {
let curPageEle = getElementByXpath(curSite.pager.nextLink);
var url = this.getFullHref(curPageEle);
//console.log(`${url} ${curPageEle} ${curSite.pageUrl}`);
if (url === '') return;
if (curSite.pageUrl === url) return;// 避免重复加载相同的页面
curSite.pageUrl = url;
// 读取下一页的数据
curSite.pager.startFilter && curSite.pager.startFilter();
GM_xmlhttpRequest({
url: url,
method: 'GET',
timeout: 5000,
onload: function (response) {
try {
//console.log(`${response.responseText}`)
var newBody = ShowPager.createDocumentByString(response.responseText);
let pageElems = getAllElements(curSite.pager.pageElement, newBody, newBody);
let toElement = getAllElements(curSite.pager.HT_insert[0])[0];
if (pageElems.length >= 0) {
// 如果有插入前函数就执行函数
if (curSite.function && curSite.function.before) {
if (curSite.function.parameter) { // 如果指定了参数
pageElems = curSite.function.before(curSite.function.parameter);
} else {
pageElems = curSite.function.before(pageElems);
}
}
// 插入位置
let addTo;
switch (curSite.pager.HT_insert[1]) {
case 1:
addTo = "beforebegin"
break;
case 2:
addTo = "afterbegin"
break;
case 3:
addTo = "beforeend"
break;
case 4:
addTo = "afterend"
break;
}
// 插入新页面元素
pageElems.forEach(function (one) {
toElement.insertAdjacentElement(addTo, one);
});
// 替换待替换元素
try {
let oriE = getAllElements(curSite.pager.replaceE);
let repE = getAllElements(curSite.pager.replaceE, newBody, newBody);
if (oriE.length === repE.length) {
for (var i = 0; i < oriE.length; i++) {
oriE[i].outerHTML = repE[i].outerHTML;
}
}
} catch (e) {
console.log(e);
}
// 如果有插入后函数就执行函数
if (curSite.function && curSite.function.after) {
if (curSite.function.parameter) { // 如果指定了参数
curSite.function.after(curSite.function.parameter);
}else{
curSite.function.after();
}
}
}
} catch (e) {
console.log(e);
}
}
});
}
},
};
function getElementByXpath(e, t, r) {
r = r || document, t = t || r;
try {
return r.evaluate(e, t, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
} catch (t) {
return void console.error("无效的xpath");
}
}
function getAllElements(e, t, r, n, o) {
let getAllElementsByXpath = function(e, t, r) {
return r = r || document, t = t || r, r.evaluate(e, t, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}
var i, s = [];
if (!e) return s;
if (r = r || document, n = n || window, o = o || void 0, t = t || r, "string" == typeof e) i = 0 === e.search(/^css;/i) ? function getAllElementsByCSS(e, t) {
return (t || document).querySelectorAll(e);
}(e.slice(4), t) : getAllElementsByXpath(e, t, r); else {
if (!(i = e(r, n, o))) return s;
if (i.nodeType) return s[0] = i, s;
}
return function makeArray(e) {
var t, r, n, o = [];
if (e.pop) {
for (t = 0, r = e.length; t < r; t++) (n = e[t]) && (n.nodeType ? o.push(n) : o = o.concat(makeArray(n)));
return a()(o);
}
if (e.item) {
for (t = e.length; t;) o[--t] = e[t];
return o;
}
if (e.iterateNext) {
for (t = e.snapshotLength; t;) o[--t] = e.snapshotItem(t);
return o;
}
}(i);
}
})();