自动无缝翻页

自动无缝翻页,目前支持:所有「Discuz!、Flarum」论坛、423Down、Apphot、不死鸟、小众软件、异次元软件、微当下载、异星软件空间、豆瓣电影、微博评论、3DM游戏网、游侠网、游民星空、千图网、阿里小站、RARBG、FitGirl Repacks、AlphaCoders、PubMed、AfreecaTV...

当前为 2021-08-03 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name 自动无缝翻页
  3. // @version 1.3.8
  4. // @author X.I.U
  5. // @description 自动无缝翻页,目前支持:所有「Discuz!、Flarum」论坛、423Down、Apphot、不死鸟、小众软件、异次元软件、微当下载、异星软件空间、豆瓣电影、微博评论、3DM游戏网、游侠网、游民星空、千图网、阿里小站、RARBG、FitGirl Repacks、AlphaCoders、PubMed、AfreecaTV...
  6. // @match *://*/*
  7. // @exclude *://www.423down.com/*.html
  8. // @exclude *://apphot.cc/*.html
  9. // @connect www.gamersky.com
  10. // @icon https://i.loli.net/2021/03/07/rdijeYm83pznxWq.png
  11. // @grant GM_xmlhttpRequest
  12. // @grant GM_registerMenuCommand
  13. // @grant GM_openInTab
  14. // @grant GM_getValue
  15. // @grant GM_setValue
  16. // @license GPL-3.0 License
  17. // @run-at document-end
  18. // @namespace https://github.com/XIU2/UserScript
  19. // @supportURL https://github.com/XIU2/UserScript
  20. // @homepageURL https://github.com/XIU2/UserScript
  21. // ==/UserScript==
  22.  
  23. (function() {
  24. 'use strict';
  25. // 目前支持的网站
  26. var websiteList = ['www.423down.com', 'apphot.cc', 'iao.su', 'www.appinn.com', 'www.iplaysoft.com', 'www.weidown.com',
  27. 'art.alphacoders.com', 'wall.alphacoders.com', 'avatars.alphacoders.com', 'mobile.alphacoders.com',
  28. 'pubmed.ncbi.nlm.nih.gov',
  29. 'movie.douban.com',
  30. 'search.douban.com',
  31. 'www.3dmgame.com', 'www.gamersky.com', 'www.ali213.net', 'gl.ali213.net',
  32. 'www.58pic.com',
  33. 'rarbgprx.org',
  34. 'fitgirl-repacks.site',
  35. 'www.yxssp.com',
  36. 'weibo.com',
  37. 'www.afreecatv.com'];
  38.  
  39. if (GM_getValue('menu_disable') == null){GM_setValue('menu_disable', [])};
  40. // 注册(不可用)脚本菜单
  41. if (menu_disable('check')) { // 当前网站是否已存在禁用列表中
  42. GM_registerMenuCommand('❎ 已禁用 (点击对当前网站启用)', function(){menu_disable('del')});
  43. return
  44. } else {
  45. if (websiteList.indexOf(location.host) > -1 // 其他网站列表
  46. || document.querySelector('meta[name="author"][content*="Discuz!"], meta[name="generator"][content*="Discuz!"]') // 所有 Discuz! 论坛
  47. || document.getElementById('flarum-loading') // 所有 Flarum 论坛
  48. ) {
  49. GM_registerMenuCommand('✅ 已启用 (点击对当前网站禁用)', function(){menu_disable('add')});
  50. } else {
  51. GM_registerMenuCommand('❌ 当前网站暂不支持 [点击申请支持]', function () {window.GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true});window.GM_openInTab('https://gf.qytechs.cn/zh-CN/scripts/419215/feedback', {active: true,insert: true,setParent: true});});
  52. return
  53. }
  54. }
  55. GM_registerMenuCommand('💬 反馈 & 欢迎申请支持', function () {window.GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true});window.GM_openInTab('https://gf.qytechs.cn/zh-CN/scripts/419215/feedback', {active: true,insert: true,setParent: true});});
  56.  
  57. // 默认 ID 为 0
  58. var curSite = {SiteTypeID: 0};
  59.  
  60. /*
  61. 自动翻页规则
  62. type:
  63. 1 = 脚本实现自动无缝翻页
  64. 2 = 网站自带了自动无缝翻页功能,只需要点击下一页按钮即可,这时 nextText 为按钮文本,避免一瞬间加载太多次下一页
  65. 3 = 依靠元素距离可视区域底部的距离来触发翻页
  66. HT_insert:
  67. 1 = 插入该元素本身的前面;
  68. 2 = 插入该元素当中,第一个子元素前面;
  69. 3 = 插入该元素当中,最后一个子元素后面;
  70. 4 = 插入该元素本身的后面;
  71. scrollDelta:数值越大,滚动条触发点越靠上(越早开始翻页),一般是访问网页速度越慢,该值就需要越大
  72. function:
  73. before = 插入前执行函数;
  74. after = 插入后执行函数;
  75. parameter = 参数
  76. */
  77. let DBSite = {
  78. discuz_forum: {
  79. SiteTypeID: 1,
  80. pager: {
  81. type: 2,
  82. nextLink: '#autopbn',
  83. nextText: '下一页 »',
  84. scrollDelta: 1000
  85. }
  86. },
  87. discuz_thread: {
  88. SiteTypeID: 2,
  89. pager: {
  90. type: 1,
  91. nextLink: '//a[@class="nxt"][@href]',
  92. pageElement: 'css;div#postlist > div[id^="post_"]',
  93. HT_insert: ['css;div#postlist', 3],
  94. replaceE: 'css;div.pg',
  95. scrollDelta: 1000
  96. }
  97. },
  98. discuz_search: {
  99. SiteTypeID: 3,
  100. pager: {
  101. type: 1,
  102. nextLink: '//a[@class="nxt"][@href]',
  103. pageElement: 'css;div#threadlist > ul',
  104. HT_insert: ['css;div#threadlist', 3],
  105. replaceE: 'css;div.pg',
  106. scrollDelta: 1000
  107. }
  108. },
  109. discuz_guide: {
  110. SiteTypeID: 4,
  111. pager: {
  112. type: 1,
  113. nextLink: '//a[@class="nxt"][@href]',
  114. pageElement: 'css;div#threadlist div.bm_c table > tbody',
  115. HT_insert: ['css;div#threadlist div.bm_c table', 3],
  116. replaceE: 'css;div.pg',
  117. scrollDelta: 1000
  118. }
  119. },
  120. discuz_youspace: {
  121. SiteTypeID: 5,
  122. pager: {
  123. type: 1,
  124. nextLink: '//a[@class="nxt"][@href]',
  125. pageElement: 'css;tbody > tr:not(.th)',
  126. HT_insert: ['css;tbody', 3],
  127. replaceE: 'css;div.pg',
  128. scrollDelta: 1000
  129. }
  130. },
  131. discuz_collection: {
  132. SiteTypeID: 6,
  133. pager: {
  134. type: 1,
  135. nextLink: '//a[@class="nxt"][@href]',
  136. pageElement: 'css;div#ct div.bm_c table > tbody',
  137. HT_insert: ['css;div#ct div.bm_c table', 3],
  138. replaceE: 'css;div.pg',
  139. scrollDelta: 1000
  140. }
  141. },
  142. flarum: {
  143. SiteTypeID: 7,
  144. pager: {
  145. type: 2,
  146. nextLink: '.DiscussionList-loadMore > button[title]',
  147. scrollDelta: 1000
  148. }
  149. },
  150. _423down_postslist: {
  151. SiteTypeID: 8,
  152. pager: {
  153. type: 1,
  154. nextLink: '//div[@class="paging"]//a[contains(text(),"下一页")][@href]',
  155. pageElement: 'css;div.content-wrap ul.excerpt > li',
  156. HT_insert: ['css;div.content-wrap ul.excerpt', 3],
  157. replaceE: 'css;div.paging',
  158. scrollDelta: 1500
  159. }
  160. },
  161. apphot_postslist: {
  162. SiteTypeID: 9,
  163. pager: {
  164. type: 1,
  165. nextLink: '//div[@class="pagination"]//a[contains(text(),"下一页")][@href]',
  166. pageElement: 'css;div.content > article.excerpt',
  167. HT_insert: ['css;div.pagination', 1],
  168. replaceE: 'css;div.pagination',
  169. scrollDelta: 1500
  170. }
  171. },
  172. iao_su_postslist: {
  173. SiteTypeID: 10,
  174. pager: {
  175. type: 1,
  176. nextLink: '//li[@class="btn btn-primary next"]//a[@href]',
  177. pageElement: 'css;#index > article, #archive > article',
  178. HT_insert: ['css;ol.page-navigator', 1],
  179. replaceE: 'css;ol.page-navigator',
  180. scrollDelta: 800
  181. },
  182. function: {
  183. before: iao_su_postslist_beforeFunction
  184. }
  185. },
  186. appinn_postslist: {
  187. SiteTypeID: 11,
  188. pager: {
  189. type: 1,
  190. nextLink: '//a[@class="next page-numbers"][@href]',
  191. pageElement: 'css;section#latest-posts > article',
  192. HT_insert: ['css;nav.navigation.pagination', 1],
  193. replaceE: 'css;div.nav-links',
  194. scrollDelta: 1500
  195. }
  196. },
  197. iplaysoft_postslist: {
  198. SiteTypeID: 12,
  199. pager: {
  200. type: 1,
  201. nextLink: '//div[@class="pagenavi"]//a[@title="下一页"][@href]',
  202. pageElement: 'css;#postlist > div.entry',
  203. HT_insert: ['css;#postlist > .pagenavi-button', 1],
  204. replaceE: 'css;.pagenavi-button, .pagenavi',
  205. scrollDelta: 1200
  206. },
  207. function: {
  208. before: iplaysoft_postslist_beforeFunction
  209. }
  210. },
  211. iplaysoft_postcomments: {
  212. SiteTypeID: 13,
  213. pager: {
  214. type: 2,
  215. nextLink: '#loadHistoryComments',
  216. nextText: '展开后面',
  217. scrollDelta: 1200
  218. }
  219. },
  220. pubmed_postslist: {
  221. SiteTypeID: 14,
  222. pager: {
  223. type: 2,
  224. nextLink: 'button.load-button.next-page',
  225. nextText: 'Show more',
  226. scrollDelta: 1500
  227. }
  228. },
  229. wall_alphacoders: {
  230. SiteTypeID: 15,
  231. pager: {
  232. type: 1,
  233. nextLink: '//a[@id="next_page"][@href]',
  234. pageElement: 'css;.thumb-container-big, .avatar-thumb, .thumb-element',
  235. HT_insert: ['css;.thumb-container-big:nth-last-child(1), .avatar-thumb:nth-last-child(1), .thumb-element:nth-last-child(1)', 4],
  236. replaceE: '//div[@class="hidden-xs hidden-sm"]/..',
  237. scrollDelta: 1000
  238. }
  239. },
  240. art_alphacoders: {
  241. SiteTypeID: 16,
  242. pager: {
  243. type: 1,
  244. nextLink: '//a[@id="next_page"][@href]',
  245. pageElement: 'css;.container-masonry > div',
  246. HT_insert: ['css;.container-masonry', 3],
  247. replaceE: '//div[@class="hidden-xs hidden-sm"]/..',
  248. scrollDelta: 1000
  249. },
  250. function: {
  251. before: art_alphacoders_beforeFunction
  252. }
  253. },
  254. fitgirl: {
  255. SiteTypeID: 17,
  256. pager: {
  257. type: 1,
  258. nextLink: '//a[@class="next page-numbers"][@href]',
  259. pageElement: 'css;article[id^="post-"]',
  260. HT_insert: ['css;nav.navigation.paging-navigation', 1],
  261. replaceE: 'css;nav.navigation.paging-navigation',
  262. scrollDelta: 2000
  263. }
  264. },
  265. weidown: {
  266. SiteTypeID: 18,
  267. pager: {
  268. type: 1,
  269. nextLink: '//a[@class="nextpage"][@href]',
  270. pageElement: 'css;.articleWrapper > .itemArticle, .articleWrapper > .richTextItem.search',
  271. HT_insert: ['css;.articleWrapper', 3],
  272. replaceE: 'css;#pageGroup',
  273. scrollDelta: 1500
  274. }
  275. },
  276. weidown_search: {
  277. SiteTypeID: 19,
  278. pager: {
  279. type: 1,
  280. nextLink: '//a[@class="nextpage"][@href]',
  281. pageElement: 'css;.articleListWrapper > .richTextItem.search',
  282. HT_insert: ['css;#pageGroup', 1],
  283. replaceE: 'css;#pageGroup',
  284. scrollDelta: 700
  285. }
  286. },
  287. weidown_special: {
  288. SiteTypeID: 20,
  289. pager: {
  290. type: 1,
  291. nextLink: '//a[@class="nextpage"][@href]',
  292. pageElement: 'css;.special > .item',
  293. HT_insert: ['css;.special', 3],
  294. replaceE: 'css;#pageGroup',
  295. scrollDelta: 700
  296. }
  297. },
  298. douban_subject_comments: {
  299. SiteTypeID: 21,
  300. pager: {
  301. type: 1,
  302. nextLink: '//a[@class="next"][@href]',
  303. pageElement: 'css;#comments > .comment-item',
  304. HT_insert: ['css;#paginator', 1],
  305. replaceE: 'css;#paginator',
  306. scrollDelta: 700
  307. }
  308. },
  309. douban_subject_reviews: {
  310. SiteTypeID: 22,
  311. pager: {
  312. type: 1,
  313. nextLink: '//link[@rel="next"][@href]',
  314. pageElement: 'css;.review-list > div',
  315. HT_insert: ['css;.review-list', 3],
  316. replaceE: 'css;.paginator',
  317. scrollDelta: 700
  318. }
  319. },
  320. douban_subject_episode: {
  321. SiteTypeID: 23,
  322. pager: {
  323. type: 1,
  324. nextLink: '//link[@rel="next"][@href]',
  325. pageElement: 'css;#comments > div',
  326. HT_insert: ['css;#comments', 3],
  327. replaceE: 'css;.paginator',
  328. scrollDelta: 700
  329. }
  330. },
  331. douban_search: {
  332. SiteTypeID: 24,
  333. pager: {
  334. type: 1,
  335. nextLink: '//a[@class="next"][@href]',
  336. pageElement: 'css;#root [class^="_"] [class^="sc-"]',
  337. HT_insert: ['css;.paginator', 1],
  338. replaceE: 'css;.paginator',
  339. scrollDelta: 700
  340. }
  341. },
  342. _3dmgame: {
  343. SiteTypeID: 25,
  344. pager: {
  345. type: 3,
  346. nextLink: '//li[@class="next"]/a[@href]',
  347. pageElement: 'css;.news_warp_center > *',
  348. HT_insert: ['css;.news_warp_center', 3],
  349. replaceE: 'css;.pagewrap',
  350. scrollElement: '.pagewrap',
  351. scrollDelta: 400
  352. }
  353. },
  354. gamersky_ent: {
  355. SiteTypeID: 26,
  356. pager: {
  357. type: 3,
  358. nextLink: '//div[@class="page_css"]/a[text()="下一页"][@href]',
  359. pageElement: 'css;.Mid2L_con > *:not(.gs_nc_editor):not(.pagecss):not(.page_css):not(.gs_ccs_solve):not(.post_ding)',
  360. HT_insert: ['css;.page_css', 1],
  361. replaceE: 'css;.page_css',
  362. scrollElement: '.page_css',
  363. scrollDelta: 100
  364. }
  365. },
  366. gamersky_gl: {
  367. SiteTypeID: 27,
  368. pager: {
  369. type: 3,
  370. nextLink: '//div[@class="page_css"]/a[text()="下一页"][@href]',
  371. pageElement: 'css;.Mid2L_con > *:not(.gs_nc_editor):not(.pagecss):not(.gs_ccs_solve):not(.post_ding)',
  372. HT_insert: ['css;.gs_nc_editor', 1],
  373. replaceE: 'css;.page_css',
  374. scrollElement: '.pagecss',
  375. scrollDelta: -1000
  376. }
  377. },
  378. ali213_www: {
  379. SiteTypeID: 28,
  380. pager: {
  381. type: 3,
  382. nextLink: '//a[@id="after_this_page"][@href]',
  383. pageElement: 'css;#Content >*:not(.news_ding):not(.page_fenye)',
  384. HT_insert: ['css;.page_fenye', 1],
  385. replaceE: 'css;.page_fenye',
  386. scrollElement: '.page_fenye',
  387. scrollDelta: 400
  388. }
  389. },
  390. ali213_gl: {
  391. SiteTypeID: 29,
  392. pager: {
  393. type: 3,
  394. nextLink: '//a[@class="next n"][@href]',
  395. pageElement: 'css;.c-detail >*',
  396. HT_insert: ['css;.c-detail', 3],
  397. replaceE: 'css;.page_fenye',
  398. scrollElement: '.page_fenye',
  399. scrollDelta: 400
  400. }
  401. },
  402. _58pic: {
  403. SiteTypeID: 30,
  404. pager: {
  405. type: 1,
  406. nextLink: '//div[contains(@class,"page-box")]//a[text()="下一页"][@href]',
  407. pageElement: 'css;.pic-box > .qtw-card',
  408. HT_insert: ['css;.pic-box', 3],
  409. replaceE: 'css;.page-box',
  410. scrollDelta: 2000
  411. },
  412. function: {
  413. before: _58pic_beforeFunction
  414. }
  415. },
  416. _58pic_c: {
  417. SiteTypeID: 31,
  418. pager: {
  419. type: 1,
  420. nextLink: '//div[contains(@class,"page-box")]//a[text()="下一页"][@href]',
  421. pageElement: 'css;.list-box > .qtw-card',
  422. HT_insert: ['css;.list-box', 3],
  423. replaceE: 'css;.page-box',
  424. scrollDelta: 4000
  425. },
  426. function: {
  427. before: _58pic_beforeFunction
  428. }
  429. },
  430. rarbgprx: {
  431. SiteTypeID: 32,
  432. pager: {
  433. type: 1,
  434. nextLink: '(//a[@title="next page"])[1][@href]',
  435. pageElement: 'css;table.lista2t tr.lista2',
  436. HT_insert: ['css;table.lista2t > tbody', 3],
  437. replaceE: 'css;#pager_links',
  438. scrollDelta: 900
  439. }
  440. },
  441. yxssp: {
  442. SiteTypeID: 33,
  443. pager: {
  444. type: 1,
  445. nextLink: '//div[@class="page-nav td-pb-padding-side"]/a[last()][@href]',
  446. pageElement: 'css;.td-modules-container.td-module-number4 > div',
  447. HT_insert: ['css;.td-modules-container.td-module-number4', 3],
  448. replaceE: 'css;.page-nav.td-pb-padding-side',
  449. scrollDelta: 900
  450. }
  451. },
  452. weibo_comment: {
  453. SiteTypeID: 34,
  454. pager: {
  455. type: 2,
  456. nextLink: 'a[action-type="click_more_comment"]',
  457. nextText: '查看更多c',
  458. scrollDelta: 1000
  459. }
  460. },
  461. afreecatv: {
  462. SiteTypeID: 35,
  463. pager: {
  464. type: 2,
  465. nextLink: '.btn-more > button',
  466. nextText: '查看更多',
  467. scrollDelta: 1000
  468. }
  469. }
  470. };
  471.  
  472.  
  473. switch (location.host) {
  474. case "www.423down.com":
  475. curSite = DBSite._423down_postslist;
  476. break;
  477. case "apphot.cc":
  478. curSite = DBSite.apphot_postslist;
  479. break;
  480. case "iao.su":
  481. curSite = DBSite.iao_su_postslist;
  482. break;
  483. case "www.appinn.com":
  484. curSite = DBSite.appinn_postslist;
  485. break;
  486. case "www.iplaysoft.com":
  487. if (location.pathname.indexOf(".html") > -1 || location.pathname.indexOf("/p/") > -1) { // 文章内
  488. curSite = DBSite.iplaysoft_postcomments;
  489. } else { // 其他页面
  490. curSite = DBSite.iplaysoft_postslist;
  491. }
  492. break;
  493. case "www.weidown.com":
  494. if (location.pathname.indexOf("/search/") > -1) {
  495. curSite = DBSite.weidown_search;
  496. } else if (location.pathname.indexOf("/special/") > -1) {
  497. curSite = DBSite.weidown_special;
  498. } else {
  499. curSite = DBSite.weidown;
  500. }
  501. break;
  502. case "www.yxssp.com":
  503. curSite = DBSite.yxssp;
  504. break;
  505. case "fitgirl-repacks.site":
  506. curSite = DBSite.fitgirl;
  507. break;
  508. case "art.alphacoders.com":
  509. curSite = DBSite.art_alphacoders;
  510. setTimeout(art_alphacoders_beforeFunction_0, 1000);
  511. break;
  512. case "wall.alphacoders.com":
  513. case "avatars.alphacoders.com":
  514. case "mobile.alphacoders.com":
  515. curSite = DBSite.wall_alphacoders;
  516. break;
  517. case "pubmed.ncbi.nlm.nih.gov":
  518. curSite = DBSite.pubmed_postslist;
  519. break;
  520. case "movie.douban.com":
  521. if (location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/comments') > -1) { // 短评
  522. curSite = DBSite.douban_subject_comments;
  523. } else if (location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/reviews') > -1) { // 影评
  524. curSite = DBSite.douban_subject_reviews;
  525. }else if(location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/episode') > -1) { // 电视剧每集评论
  526. curSite = DBSite.douban_subject_episode;
  527. }
  528. break;
  529. case "search.douban.com":
  530. curSite = DBSite.douban_search;
  531. break;
  532. case "www.3dmgame.com":
  533. curSite = DBSite._3dmgame;
  534. break;
  535. case "www.gamersky.com":
  536. if (location.pathname.indexOf("/ent/") > -1) {
  537. curSite = DBSite.gamersky_ent;
  538. } else {
  539. curSite = DBSite.gamersky_gl;
  540. }
  541. //document.lastElementChild.appendChild(document.createElement('style')).textContent = `.Comment {display: none !important;}` // 隐藏评论区
  542. break;
  543. case "www.ali213.net":
  544. curSite = DBSite.ali213_www;
  545. break;
  546. case "gl.ali213.net":
  547. curSite = DBSite.ali213_gl;
  548. document.lastElementChild.appendChild(document.createElement('style')).textContent = `.n_show_b {display: none !important;}` // 隐藏部分碍事元素
  549. break;
  550. case "www.58pic.com":
  551. if (location.pathname.indexOf("/tupian/") > -1) {
  552. curSite = DBSite._58pic;
  553. } else if (location.pathname.indexOf("/c/") > -1) {
  554. curSite = DBSite._58pic_c;
  555. }
  556. break;
  557. case "rarbgprx.org":
  558. curSite = DBSite.rarbgprx;
  559. break;
  560. case "weibo.com":
  561. curSite = DBSite.weibo_comment;
  562. break;
  563. case "www.afreecatv.com":
  564. curSite = DBSite.afreecatv;
  565. break;
  566. default:
  567. if (document.querySelector('meta[name="author"][content*="Discuz!"], meta[name="generator"][content*="Discuz!"]')) {
  568. // < 所有 Discuz!论坛 >
  569. if (location.pathname.indexOf('.html') > -1) { // 判断是不是静态网页(.html 结尾)
  570. if (location.pathname.indexOf('forum') > -1) { // 各版块帖子列表
  571. curSite = DBSite.discuz_forum;
  572. } else if (location.pathname.indexOf('thread') > -1) { // 帖子内
  573. curSite = DBSite.discuz_thread;
  574. hidePgbtn(); // 隐藏帖子内的 [下一页] 按钮
  575. }else if(location.pathname.indexOf('search') > -1) { // 搜索结果
  576. curSite = DBSite.discuz_search;
  577. }
  578. } else {
  579. if (location.search.indexOf('mod=forumdisplay') > -1) { // 各版块帖子列表
  580. curSite = DBSite.discuz_forum;
  581. } else if (location.search.indexOf('mod=viewthread') > -1) { // 帖子内
  582. curSite = DBSite.discuz_thread;
  583. hidePgbtn(); // 隐藏帖子内的 [下一页] 按钮
  584. } else if (location.search.indexOf('mod=guide') > -1) { // 导读帖子列表
  585. curSite = DBSite.discuz_guide;
  586. } else if(location.search.indexOf('mod=space') > -1 && location.search.indexOf('&view=me') > -1) { // 别人的主题/回复
  587. curSite = DBSite.discuz_youspace;
  588. } else if (location.search.indexOf('mod=collection') > -1) { // 淘贴列表
  589. curSite = DBSite.discuz_collection;
  590. } else if (location.pathname.indexOf('search') > -1) { // 搜索结果
  591. curSite = DBSite.discuz_search;
  592. } else { // 考虑到部分论坛的部分板块帖子列表 URL 是自定义的
  593. curSite = DBSite.discuz_forum;
  594. }
  595. }
  596. } else if (document.getElementById('flarum-loading') && location.pathname.indexOf('/d/') === -1) {
  597. // < 所有 Flarum 论坛 >
  598. curSite = DBSite.flarum;
  599. }
  600. }
  601. curSite.pageUrl = ""; // 下一页URL
  602. pageLoading(); // 自动无缝翻页
  603.  
  604.  
  605. // 自动无缝翻页
  606. function pageLoading() {
  607. if (curSite.SiteTypeID > 0) {
  608. windowScroll(function (direction, e) {
  609. if (direction === "down") { // 下滑才准备翻页
  610. let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop,
  611. scrollHeight = window.innerHeight || document.documentElement.clientHeight,
  612. scrollDelta = curSite.pager.scrollDelta;
  613. if (curSite.pager.type === 3) { // 翻页类型 3
  614. let scrollElement = document.querySelector(curSite.pager.scrollElement);
  615. //console.log(scrollElement.offsetTop - (scrollTop + scrollHeight), scrollDelta, curSite.SiteTypeID)
  616. if (scrollElement.offsetTop - (scrollTop + scrollHeight) <= scrollDelta) {
  617. if (curSite.SiteTypeID === 25) curSite.pager.scrollDelta -= 800 // 游民星空的比较奇葩,需要特殊处理下
  618. ShowPager.loadMorePage();
  619. }
  620. } else {
  621. if (document.documentElement.scrollHeight <= scrollHeight + scrollTop + scrollDelta) {
  622. if (curSite.pager.type === 2) { // 翻页类型 2
  623. let autopbn = document.querySelector(curSite.pager.nextLink);
  624. if (autopbn) { // 如果正在加载,就不再点击
  625. if (!curSite.pager.nextText) { // 如果没有指定 nextText 就直接点击
  626. autopbn.click();
  627. } else if (autopbn.innerText.indexOf(curSite.pager.nextText) > -1){ // 如果指定了 nextText 就需要判断后再点击(避免已经在加载了,还重复点击)
  628. autopbn.click();
  629. }
  630. }
  631. } else {
  632. ShowPager.loadMorePage();
  633. }
  634. }
  635. }
  636. }
  637. });
  638. }
  639. }
  640.  
  641.  
  642. function getElementToPageTop(el) {
  643. if(el.parentElement) {
  644. return getElementToPageTop(el.parentElement) + el.offsetTop
  645. }
  646. return el.offsetTop
  647. }
  648.  
  649.  
  650. // 隐藏帖子内的 [下一页] 按钮
  651. function hidePgbtn() {
  652. let style_hidePgbtn = document.createElement('style');
  653. style_hidePgbtn.innerHTML = `.pgbtn {display: none;}`;
  654. document.head.appendChild(style_hidePgbtn);
  655. }
  656.  
  657.  
  658. // iplaysoft 的插入前函数
  659. function iplaysoft_postslist_beforeFunction(pageElems) {
  660. pageElems.forEach(function (one) {
  661. let now = one.querySelector('img.lazyload')
  662. if (now && !now.getAttribute('src')) {
  663. now.setAttribute('src',now.getAttribute('data-src'))
  664. now.setAttribute('srcset',now.getAttribute('data-src'))
  665. now.setAttribute('class','lazyloaded')
  666. }
  667. });
  668. return pageElems
  669. }
  670.  
  671.  
  672. // iao.su 的插入前函数
  673. function iao_su_postslist_beforeFunction(pageElems) {
  674. pageElems.forEach(function (one) {
  675. let now = one.getElementsByClassName('post-card')[0]
  676. if (now) {
  677. now.getElementsByClassName('blog-background')[0].style.backgroundImage = 'url("' + RegExp("(?<=loadBannerDirect\\(').*(?=', '',)").exec(now.getElementsByTagName("script")[0].innerText)[0]; + '")';
  678. }
  679. });
  680. return pageElems
  681. }
  682.  
  683.  
  684. // art_alphacoders
  685. function art_alphacoders_beforeFunction_0() {
  686. let pageElems1 = document.querySelectorAll('.container-masonry > div')
  687. document.querySelector('.container-masonry').style.height = 'auto'
  688. pageElems1.forEach(function (one) {
  689. one.setAttribute('style','float: left');
  690. });
  691. }
  692.  
  693.  
  694. // art_alphacoders 的插入前函数
  695. function art_alphacoders_beforeFunction(pageElems) {
  696. pageElems.forEach(function (one) {
  697. one.setAttribute('style','float: left');
  698. });
  699. return pageElems
  700. }
  701.  
  702.  
  703. // 58pic 的插入前函数
  704. function _58pic_beforeFunction(pageElems) {
  705. let is_one = document.querySelector('.qtw-card.place-box.is-one');
  706. if (is_one && is_one.style.display != 'none') {
  707. is_one.setAttribute('style', 'display: none;')
  708. }
  709. pageElems.forEach(function (one) {
  710. let now = one.querySelector('img.lazy')
  711. if (now && now.getAttribute('src') != now.dataset.original) {
  712. now.setAttribute('src', now.dataset.original)
  713. now.setAttribute('style', 'display: block;')
  714. }
  715. });
  716. return pageElems
  717. }
  718.  
  719.  
  720. // 启用/禁用 (当前网站)
  721. function menu_disable(type) {
  722. switch(type) {
  723. case 'check':
  724. if(check()) return true
  725. return false
  726. break;
  727. case 'add':
  728. add();
  729. break;
  730. case 'del':
  731. del();
  732. break;
  733. }
  734.  
  735. function check() { // 存在返回真,不存在返回假
  736. let list = GM_getValue('menu_disable'); // 读取网站列表
  737. if (list.indexOf(location.host) === -1) return false // 不存在返回假
  738. return true
  739. }
  740.  
  741. function add() {
  742. if (check()) return
  743. let list = GM_getValue('menu_disable'); // 读取网站列表
  744. list.push(location.host); // 追加网站域名
  745. GM_setValue('menu_disable', list); // 写入配置
  746. location.reload(); // 刷新网页
  747. }
  748.  
  749. function del() {
  750. if (!check()) return
  751. let list = GM_getValue('menu_disable'), // 读取网站列表
  752. index = list.indexOf(location.host);
  753. list.splice(index, 1); // 删除网站域名
  754. GM_setValue('menu_disable', list); // 写入配置
  755. location.reload(); // 刷新网页
  756. }
  757. }
  758.  
  759.  
  760. // 滚动条事件
  761. function windowScroll(fn1) {
  762. var beforeScrollTop = document.documentElement.scrollTop,
  763. fn = fn1 || function () {};
  764. setTimeout(function () { // 延时执行,避免刚载入到页面就触发翻页事件
  765. window.addEventListener("scroll", function (e) {
  766. var afterScrollTop = document.documentElement.scrollTop,
  767. delta = afterScrollTop - beforeScrollTop;
  768. if (delta == 0) return false;
  769. fn(delta > 0 ? "down" : "up", e);
  770. beforeScrollTop = afterScrollTop;
  771. }, false);
  772. }, 1000)
  773. }
  774.  
  775.  
  776. var ShowPager = { // 修改自 https://gf.qytechs.cn/scripts/14178
  777. getFullHref: function (e) {
  778. if(e == null) return '';
  779. "string" != typeof e && (e = e.getAttribute("href"));
  780. var t = this.getFullHref.a;
  781. return t || (this.getFullHref.a = t = document.createElement("a")), t.href = e, t.href;
  782. },
  783. createDocumentByString: function (e) {
  784. if (e) {
  785. if ("HTML" !== document.documentElement.nodeName) return (new DOMParser).parseFromString(e, "application/xhtml+xml");
  786. var t;
  787. try {
  788. t = (new DOMParser).parseFromString(e, "text/html");
  789. } catch (e) {
  790. }
  791. if (t) return t;
  792. if (document.implementation.createHTMLDocument) t = document.implementation.createHTMLDocument("ADocument"); else try {
  793. (t = document.cloneNode(!1)).appendChild(t.importNode(document.documentElement, !1)),
  794. t.documentElement.appendChild(t.createElement("head")), t.documentElement.appendChild(t.createElement("body"));
  795. } catch (e) {
  796. }
  797. if (t) {
  798. var r = document.createRange();
  799. r.selectNodeContents(document.body);
  800. var n = r.createContextualFragment(e);
  801. t.body.appendChild(n);
  802. for (var a, o = {
  803. TITLE: !0,
  804. META: !0,
  805. LINK: !0,
  806. STYLE: !0,
  807. BASE: !0
  808. }, i = t.body, s = i.childNodes, c = s.length - 1; c >= 0; c--) o[(a = s[c]).nodeName] && i.removeChild(a);
  809. return t;
  810. }
  811. } else console.error("没有找到要转成DOM的字符串");
  812. },
  813. loadMorePage: function () {
  814. if (curSite.pager) {
  815. let curPageEle = getElementByXpath(curSite.pager.nextLink);
  816. var url = this.getFullHref(curPageEle);
  817. //console.log(`${url} ${curPageEle} ${curSite.pageUrl}`);
  818. if (url === '') return;
  819. if (curSite.pageUrl === url) return;// 避免重复加载相同的页面
  820. curSite.pageUrl = url;
  821. // 读取下一页的数据
  822. curSite.pager.startFilter && curSite.pager.startFilter();
  823. GM_xmlhttpRequest({
  824. url: url,
  825. method: "GET",
  826. timeout: 5000,
  827. onload: function (response) {
  828. try {
  829. //console.log(`${response.responseText}`)
  830. var newBody = ShowPager.createDocumentByString(response.responseText);
  831. let pageElems = getAllElements(curSite.pager.pageElement, newBody, newBody);
  832. let toElement = getAllElements(curSite.pager.HT_insert[0])[0];
  833. if (pageElems.length >= 0) {
  834. // 如果有插入前函数就执行函数
  835. if (curSite.function && curSite.function.before) {
  836. if (curSite.function.parameter) { // 如果指定了参数
  837. pageElems = curSite.function.before(curSite.function.parameter);
  838. }else{
  839. pageElems = curSite.function.before(pageElems);
  840. }
  841. }
  842. // 插入位置
  843. let addTo;
  844. switch (curSite.pager.HT_insert[1]) {
  845. case 1:
  846. addTo = "beforebegin"
  847. break;
  848. case 2:
  849. addTo = "afterbegin"
  850. break;
  851. case 3:
  852. addTo = "beforeend"
  853. break;
  854. case 4:
  855. addTo = "afterend"
  856. break;
  857. }
  858. // 插入新页面元素
  859. pageElems.forEach(function (one) {
  860. toElement.insertAdjacentElement(addTo, one);
  861. });
  862. // 替换待替换元素
  863. try {
  864. let oriE = getAllElements(curSite.pager.replaceE);
  865. let repE = getAllElements(curSite.pager.replaceE, newBody, newBody);
  866. if (oriE.length === repE.length) {
  867. for (var i = 0; i < oriE.length; i++) {
  868. oriE[i].outerHTML = repE[i].outerHTML;
  869. }
  870. }
  871. } catch (e) {
  872. console.log(e);
  873. }
  874. // 如果有插入后函数就执行函数
  875. if (curSite.function && curSite.function.after) {
  876. if (curSite.function.parameter) { // 如果指定了参数
  877. curSite.function.after(curSite.function.parameter);
  878. }else{
  879. curSite.function.after();
  880. }
  881. }
  882. }
  883. } catch (e) {
  884. console.log(e);
  885. }
  886. }
  887. });
  888. }
  889. },
  890. };
  891.  
  892.  
  893. function getElementByXpath(e, t, r) {
  894. r = r || document, t = t || r;
  895. try {
  896. return r.evaluate(e, t, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  897. } catch (t) {
  898. return void console.error("无效的xpath");
  899. }
  900. }
  901.  
  902.  
  903. function getAllElements(e, t, r, n, o) {
  904. let getAllElementsByXpath = function(e, t, r) {
  905. return r = r || document, t = t || r, r.evaluate(e, t, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
  906. }
  907.  
  908. var i, s = [];
  909. if (!e) return s;
  910. 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) {
  911. return (t || document).querySelectorAll(e);
  912. }(e.slice(4), t) : getAllElementsByXpath(e, t, r); else {
  913. if (!(i = e(r, n, o))) return s;
  914. if (i.nodeType) return s[0] = i, s;
  915. }
  916. return function makeArray(e) {
  917. var t, r, n, o = [];
  918. if (e.pop) {
  919. for (t = 0, r = e.length; t < r; t++) (n = e[t]) && (n.nodeType ? o.push(n) : o = o.concat(makeArray(n)));
  920. return a()(o);
  921. }
  922. if (e.item) {
  923. for (t = e.length; t;) o[--t] = e[t];
  924. return o;
  925. }
  926. if (e.iterateNext) {
  927. for (t = e.snapshotLength; t;) o[--t] = e.snapshotItem(t);
  928. return o;
  929. }
  930. }(i);
  931. }
  932. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址