自动无缝翻页

自动无缝翻页,目前支持:423Down、Apphot、不死鸟、小众软件、异次元软件、微当下载、异星软件空间、豆瓣电影、3DM、游民星空、千图网、RARBG、FitGirl Repacks、AlphaCoders、PubMed、三国杀论坛、百分浏览器论坛...

当前为 2021-06-23 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name 自动无缝翻页
  3. // @version 1.2.6
  4. // @author X.I.U
  5. // @description 自动无缝翻页,目前支持:423Down、Apphot、不死鸟、小众软件、异次元软件、微当下载、异星软件空间、豆瓣电影、3DM、游民星空、千图网、RARBG、FitGirl Repacks、AlphaCoders、PubMed、三国杀论坛、百分浏览器论坛...
  6. // @match *://www.423down.com/*
  7. // @exclude *://www.423down.com/*.html
  8. // @match *://apphot.cc/*
  9. // @exclude *://apphot.cc/*.html
  10. // @match *://iao.su/*
  11. // @match *://www.appinn.com/
  12. // @match *://www.appinn.com/*/*/
  13. // @match *://www.appinn.com/?s=*
  14. // @match *://www.iplaysoft.com/*
  15. // @match *://www.weidown.com/*
  16. // @match *://fitgirl-repacks.site/*
  17. // @match *://*.alphacoders.com/*
  18. // @match *://club.sanguosha.com/*
  19. // @match *://www.centbrowser.net/*
  20. // @match *://pubmed.ncbi.nlm.nih.gov/?term=*
  21. // @match *://movie.douban.com/*
  22. // @match *://search.douban.com/*
  23. // @match *://www.3dmgame.com/bagua/*.html
  24. // @match *://www.gamersky.com/ent/*/*.shtml
  25. // @match *://www.58pic.com/*
  26. // @match *://rarbgprx.org/torrents.php*
  27. // @match *://www.yxssp.com/*
  28. // @icon https://i.loli.net/2021/03/07/rdijeYm83pznxWq.png
  29. // @grant GM_xmlhttpRequest
  30. // @grant GM_registerMenuCommand
  31. // @grant GM_openInTab
  32. // @license GPL-3.0 License
  33. // @run-at document-end
  34. // @namespace https://github.com/XIU2/UserScript
  35. // ==/UserScript==
  36.  
  37. (function() {
  38. // 注册脚本菜单
  39. 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});});
  40.  
  41. // 默认 ID 为 0
  42. var curSite = {SiteTypeID: 0};
  43.  
  44. // 自动翻页规则
  45. // type:1 = 脚本实现自动无缝翻页,2 = 网站自带了自动无缝翻页功能,只需要点击下一页按钮即可,这时 nextText 为按钮文本,避免一瞬间加载太多次下一页
  46. // HT_insert:1 = 插入该元素本身的前面;2 = 插入该元素当中,第一个子元素前面;3 = 插入该元素当中,最后一个子元素后面;4 = 插入该元素本身的后面;
  47. // scrollDelta:数值越大,滚动条触发点越靠上(越早开始翻页),一般是访问网页速度越慢,该值就需要越大
  48. // function:before = 插入前执行函数;after = 插入后执行函数;parameter = 参数
  49. let DBSite = {
  50. _423down_postslist: {
  51. SiteTypeID: 1,
  52. pager: {
  53. type: 1,
  54. nextLink: '//div[@class="paging"]//a[contains(text(),"下一页")][@href]',
  55. pageElement: 'css;div.content-wrap ul.excerpt > li',
  56. HT_insert: ['css;div.content-wrap ul.excerpt', 3],
  57. replaceE: 'css;div.paging',
  58. scrollDelta: 1500
  59. }
  60. },
  61. apphot_postslist: {
  62. SiteTypeID: 2,
  63. pager: {
  64. type: 1,
  65. nextLink: '//div[@class="pagination"]//a[contains(text(),"下一页")][@href]',
  66. pageElement: 'css;div.content > article.excerpt',
  67. HT_insert: ['css;div.pagination', 1],
  68. replaceE: 'css;div.pagination',
  69. scrollDelta: 1500
  70. }
  71. },
  72. iao_su_postslist: {
  73. SiteTypeID: 3,
  74. pager: {
  75. type: 1,
  76. nextLink: '//li[@class="btn btn-primary next"]//a[@href]',
  77. pageElement: 'css;#index > article, #archive > article',
  78. HT_insert: ['css;ol.page-navigator', 1],
  79. replaceE: 'css;ol.page-navigator',
  80. scrollDelta: 800
  81. },
  82. function: {
  83. before: iao_su_postslist_beforeFunction
  84. }
  85. },
  86. appinn_postslist: {
  87. SiteTypeID: 4,
  88. pager: {
  89. type: 1,
  90. nextLink: '//a[@class="next page-numbers"][@href]',
  91. pageElement: 'css;section#latest-posts > article',
  92. HT_insert: ['css;nav.navigation.pagination', 1],
  93. replaceE: 'css;div.nav-links',
  94. scrollDelta: 1500
  95. }
  96. },
  97. iplaysoft_postslist: {
  98. SiteTypeID: 5,
  99. pager: {
  100. type: 1,
  101. nextLink: '//div[@class="pagenavi"]//a[@title="下一页"][@href]',
  102. pageElement: 'css;#postlist > div.entry',
  103. HT_insert: ['css;#postlist > .pagenavi-button', 1],
  104. replaceE: 'css;.pagenavi-button, .pagenavi',
  105. scrollDelta: 1200
  106. },
  107. function: {
  108. before: iplaysoft_postslist_beforeFunction
  109. }
  110. },
  111. iplaysoft_postcomments: {
  112. SiteTypeID: 6,
  113. pager: {
  114. type: 2,
  115. nextLink: '#loadHistoryComments',
  116. nextText: '展开后面',
  117. scrollDelta: 1200
  118. }
  119. },
  120. discuz_forum: {
  121. SiteTypeID: 7,
  122. pager: {
  123. type: 2,
  124. nextLink: '#autopbn',
  125. nextText: '下一页 »',
  126. scrollDelta: 1000
  127. }
  128. },
  129. discuz_thread: {
  130. SiteTypeID: 8,
  131. pager: {
  132. type: 1,
  133. nextLink: '//a[@class="nxt"][@href]',
  134. pageElement: 'css;div#postlist > div[id^="post_"]',
  135. HT_insert: ['css;div#postlist', 3],
  136. replaceE: 'css;div.pg',
  137. scrollDelta: 1000
  138. }
  139. },
  140. discuz_search: {
  141. SiteTypeID: 9,
  142. pager: {
  143. type: 1,
  144. nextLink: '//a[@class="nxt"][@href]',
  145. pageElement: 'css;div#threadlist > ul',
  146. HT_insert: ['css;div#threadlist', 3],
  147. replaceE: 'css;div.pg',
  148. scrollDelta: 1000
  149. }
  150. },
  151. pubmed_postslist: {
  152. SiteTypeID: 10,
  153. pager: {
  154. type: 2,
  155. nextLink: 'button.load-button.next-page',
  156. nextText: 'Show more',
  157. scrollDelta: 1500
  158. }
  159. },
  160. wall_alphacoders: {
  161. SiteTypeID: 11,
  162. pager: {
  163. type: 1,
  164. nextLink: '//a[@id="next_page"][@href]',
  165. pageElement: 'css;.thumb-container-big, .avatar-thumb, .thumb-element',
  166. HT_insert: ['css;.thumb-container-big:nth-last-child(1), .avatar-thumb:nth-last-child(1), .thumb-element:nth-last-child(1)', 4],
  167. replaceE: '//div[@class="hidden-xs hidden-sm"]/..',
  168. scrollDelta: 1000
  169. }
  170. },
  171. art_alphacoders: {
  172. SiteTypeID: 12,
  173. pager: {
  174. type: 1,
  175. nextLink: '//a[@id="next_page"][@href]',
  176. pageElement: 'css;.container-masonry > div',
  177. HT_insert: ['css;.container-masonry', 3],
  178. replaceE: '//div[@class="hidden-xs hidden-sm"]/..',
  179. scrollDelta: 1000
  180. },
  181. function: {
  182. before: art_alphacoders_beforeFunction
  183. }
  184. },
  185. fitgirl: {
  186. SiteTypeID: 13,
  187. pager: {
  188. type: 1,
  189. nextLink: '//a[@class="next page-numbers"][@href]',
  190. pageElement: 'css;article[id^="post-"]',
  191. HT_insert: ['css;nav.navigation.paging-navigation', 1],
  192. replaceE: 'css;nav.navigation.paging-navigation',
  193. scrollDelta: 2000
  194. }
  195. },
  196. weidown: {
  197. SiteTypeID: 14,
  198. pager: {
  199. type: 1,
  200. nextLink: '//a[@class="nextpage"][@href]',
  201. pageElement: 'css;.articleWrapper > .itemArticle, .articleWrapper > .richTextItem.search',
  202. HT_insert: ['css;.articleWrapper', 3],
  203. replaceE: 'css;#pageGroup',
  204. scrollDelta: 1500
  205. }
  206. },
  207. weidown_search: {
  208. SiteTypeID: 14,
  209. pager: {
  210. type: 1,
  211. nextLink: '//a[@class="nextpage"][@href]',
  212. pageElement: 'css;.articleListWrapper > .richTextItem.search',
  213. HT_insert: ['css;#pageGroup', 1],
  214. replaceE: 'css;#pageGroup',
  215. scrollDelta: 700
  216. }
  217. },
  218. weidown_special: {
  219. SiteTypeID: 14,
  220. pager: {
  221. type: 1,
  222. nextLink: '//a[@class="nextpage"][@href]',
  223. pageElement: 'css;.special > .item',
  224. HT_insert: ['css;.special', 3],
  225. replaceE: 'css;#pageGroup',
  226. scrollDelta: 700
  227. }
  228. },
  229. douban_subject_comments: {
  230. SiteTypeID: 15,
  231. pager: {
  232. type: 1,
  233. nextLink: '//a[@class="next"][@href]',
  234. pageElement: 'css;#comments > .comment-item',
  235. HT_insert: ['css;#paginator', 1],
  236. replaceE: 'css;#paginator',
  237. scrollDelta: 700
  238. }
  239. },
  240. douban_subject_reviews: {
  241. SiteTypeID: 16,
  242. pager: {
  243. type: 1,
  244. nextLink: '//link[@rel="next"][@href]',
  245. pageElement: 'css;.review-list > div',
  246. HT_insert: ['css;.review-list', 3],
  247. replaceE: 'css;.paginator',
  248. scrollDelta: 700
  249. }
  250. },
  251. douban_subject_episode: {
  252. SiteTypeID: 17,
  253. pager: {
  254. type: 1,
  255. nextLink: '//link[@rel="next"][@href]',
  256. pageElement: 'css;#comments > div',
  257. HT_insert: ['css;#comments', 3],
  258. replaceE: 'css;.paginator',
  259. scrollDelta: 700
  260. }
  261. },
  262. douban_search: {
  263. SiteTypeID: 18,
  264. pager: {
  265. type: 1,
  266. nextLink: '//a[@class="next"][@href]',
  267. pageElement: 'css;#root [class^="_"] [class^="sc-"]',
  268. HT_insert: ['css;.paginator', 1],
  269. replaceE: 'css;.paginator',
  270. scrollDelta: 700
  271. }
  272. },
  273. _3dmgame: {
  274. SiteTypeID: 19,
  275. pager: {
  276. type: 1,
  277. nextLink: '//li[@class="next"]/a[@href]',
  278. pageElement: 'css;.news_warp_center > p',
  279. HT_insert: ['css;.news_warp_center', 3],
  280. replaceE: 'css;.pagewrap',
  281. scrollDelta: 1000
  282. }
  283. },
  284. gamersky: {
  285. SiteTypeID: 20,
  286. pager: {
  287. type: 1,
  288. nextLink: '//div[@class="page_css"]/a[text()="下一页"][@href]',
  289. pageElement: 'css;.Mid2L_con > p',
  290. HT_insert: ['css;.page_css', 1],
  291. replaceE: 'css;.page_css',
  292. scrollDelta: 1000
  293. }
  294. },
  295. _58pic: {
  296. SiteTypeID: 21,
  297. pager: {
  298. type: 1,
  299. nextLink: '//div[contains(@class,"page-box")]//a[text()="下一页"][@href]',
  300. pageElement: 'css;.pic-box > .qtw-card',
  301. HT_insert: ['css;.pic-box', 3],
  302. replaceE: 'css;.page-box',
  303. scrollDelta: 2000
  304. },
  305. function: {
  306. before: _58pic_beforeFunction
  307. }
  308. },
  309. _58pic_c: {
  310. SiteTypeID: 22,
  311. pager: {
  312. type: 1,
  313. nextLink: '//div[contains(@class,"page-box")]//a[text()="下一页"][@href]',
  314. pageElement: 'css;.list-box > .qtw-card',
  315. HT_insert: ['css;.list-box', 3],
  316. replaceE: 'css;.page-box',
  317. scrollDelta: 4000
  318. },
  319. function: {
  320. before: _58pic_beforeFunction
  321. }
  322. },
  323. rarbgprx: {
  324. SiteTypeID: 23,
  325. pager: {
  326. type: 1,
  327. nextLink: '(//a[@title="next page"])[1][@href]',
  328. pageElement: 'css;table.lista2t tr.lista2',
  329. HT_insert: ['css;table.lista2t > tbody', 3],
  330. replaceE: 'css;#pager_links',
  331. scrollDelta: 900
  332. }
  333. },
  334. yxssp: {
  335. SiteTypeID: 24,
  336. pager: {
  337. type: 1,
  338. nextLink: '//div[@class="page-nav td-pb-padding-side"]/a[last()][@href]',
  339. pageElement: 'css;.td-modules-container.td-module-number4 > div',
  340. HT_insert: ['css;.td-modules-container.td-module-number4', 3],
  341. replaceE: 'css;.page-nav.td-pb-padding-side',
  342. scrollDelta: 900
  343. }
  344. }
  345. };
  346.  
  347.  
  348. switch (location.host) {
  349. case "www.423down.com":
  350. curSite = DBSite._423down_postslist;
  351. break;
  352. case "apphot.cc":
  353. curSite = DBSite.apphot_postslist;
  354. break;
  355. case "iao.su":
  356. curSite = DBSite.iao_su_postslist;
  357. break;
  358. case "www.appinn.com":
  359. curSite = DBSite.appinn_postslist;
  360. break;
  361. case "www.iplaysoft.com":
  362. if (location.pathname.indexOf(".html") > -1 || location.pathname.indexOf("/p/") > -1) { // 文章内
  363. curSite = DBSite.iplaysoft_postcomments;
  364. } else { // 其他页面
  365. curSite = DBSite.iplaysoft_postslist;
  366. }
  367. break;
  368. case "www.weidown.com":
  369. if (location.pathname.indexOf("/search/") > -1) {
  370. curSite = DBSite.weidown_search;
  371. } else if (location.pathname.indexOf("/special/") > -1) {
  372. curSite = DBSite.weidown_special;
  373. } else {
  374. curSite = DBSite.weidown;
  375. }
  376. break;
  377. case "www.yxssp.com":
  378. curSite = DBSite.yxssp;
  379. break;
  380. case "fitgirl-repacks.site":
  381. curSite = DBSite.fitgirl;
  382. break;
  383. case "art.alphacoders.com":
  384. curSite = DBSite.art_alphacoders;
  385. setTimeout(art_alphacoders_beforeFunction_0, 1000);
  386. break;
  387. case "wall.alphacoders.com":
  388. case "avatars.alphacoders.com":
  389. case "mobile.alphacoders.com":
  390. curSite = DBSite.wall_alphacoders;
  391. break;
  392. case "club.sanguosha.com": // Discuz! 论坛专用
  393. case "www.centbrowser.net":
  394. if (location.pathname.indexOf('.html') > -1) { // 判断是不是静态网页(.html 结尾)
  395. if (location.pathname.indexOf('forum') > -1) { // 各版块帖子列表
  396. curSite = DBSite.discuz_forum;
  397. } else if (location.pathname.indexOf('thread') > -1) { // 帖子内
  398. curSite = DBSite.discuz_thread;
  399. hidePgbtn(); // 隐藏帖子内的 [下一页] 按钮
  400. }else if(location.pathname.indexOf('search') > -1) { // 搜索结果
  401. curSite = DBSite.discuz_search;
  402. }
  403. } else {
  404. if (location.search.indexOf('mod=forumdisplay') > -1) { // 各版块帖子列表
  405. curSite = DBSite.discuz_forum;
  406. } else if (location.search.indexOf('mod=viewthread') > -1) { // 帖子内
  407. curSite = DBSite.discuz_thread;
  408. hidePgbtn(); // 隐藏帖子内的 [下一页] 按钮
  409. } else if (location.pathname.indexOf('search') > -1) { // 搜索结果
  410. curSite = DBSite.discuz_search;
  411. }
  412. }
  413. break;
  414. case "pubmed.ncbi.nlm.nih.gov":
  415. curSite = DBSite.pubmed_postslist;
  416. break;
  417. case "movie.douban.com":
  418. if (location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/comments') > -1) { // 短评
  419. curSite = DBSite.douban_subject_comments;
  420. } else if (location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/reviews') > -1) { // 影评
  421. curSite = DBSite.douban_subject_reviews;
  422. }else if(location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/episode') > -1) { // 电视剧每集评论
  423. curSite = DBSite.douban_subject_episode;
  424. }
  425. break;
  426. case "search.douban.com":
  427. curSite = DBSite.douban_search;
  428. break;
  429. case "www.3dmgame.com":
  430. curSite = DBSite._3dmgame;
  431. document.lastChild.appendChild(document.createElement('style')).textContent = `#Comments_wrap {display: none !important;}` // 隐藏评论区
  432. break;
  433. case "www.gamersky.com":
  434. curSite = DBSite.gamersky;
  435. document.lastElementChild.appendChild(document.createElement('style')).textContent = `.Comment {display: none !important;}` // 隐藏评论区
  436. break;
  437. case "www.58pic.com":
  438. if (location.pathname.indexOf("/tupian/") > -1) {
  439. curSite = DBSite._58pic;
  440. } else if (location.pathname.indexOf("/c/") > -1) {
  441. curSite = DBSite._58pic_c;
  442. }
  443. break;
  444. case "rarbgprx.org":
  445. curSite = DBSite.rarbgprx;
  446. break;
  447. }
  448. curSite.pageUrl = ""; // 下一页URL
  449. pageLoading(); // 自动无缝翻页
  450.  
  451.  
  452. // 自动无缝翻页
  453. function pageLoading() {
  454. if (curSite.SiteTypeID > 0) {
  455. windowScroll(function (direction, e) {
  456. if (direction === "down") { // 下滑才准备翻页
  457. let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
  458. let scrollDelta = curSite.pager.scrollDelta;
  459. if (document.documentElement.scrollHeight <= document.documentElement.clientHeight + scrollTop + scrollDelta) {
  460. if (curSite.pager.type === 1) {
  461. ShowPager.loadMorePage();
  462. } else {
  463. let autopbn = document.querySelector(curSite.pager.nextLink);
  464. if (autopbn) { // 如果正在加载,就不再点击
  465. if (!curSite.pager.nextText) { // 如果没有指定 nextText 就直接点击
  466. autopbn.click();
  467. } else if (autopbn.innerText.indexOf(curSite.pager.nextText) > -1){ // 如果指定了 nextText 就需要判断后再点击(避免已经在加载了,还重复点击)
  468. autopbn.click();
  469. }
  470. }
  471. }
  472. }
  473. }
  474. });
  475. }
  476. }
  477.  
  478.  
  479. // 隐藏帖子内的 [下一页] 按钮
  480. function hidePgbtn() {
  481. let style_hidePgbtn = document.createElement('style');
  482. style_hidePgbtn.innerHTML = `.pgbtn {display: none;}`;
  483. document.head.appendChild(style_hidePgbtn);
  484. }
  485.  
  486.  
  487. // iplaysoft 的插入前函数
  488. function iplaysoft_postslist_beforeFunction(pageElems) {
  489. pageElems.forEach(function (one) {
  490. let now = one.querySelector("img.lazyload")
  491. if (now && !now.getAttribute('src')) {
  492. now.setAttribute("src",now.getAttribute('data-src'))
  493. now.setAttribute("srcset",now.getAttribute('data-src'))
  494. now.setAttribute("class","lazyloaded")
  495. }
  496. });
  497. return pageElems
  498. }
  499.  
  500.  
  501. // iao.su 的插入前函数
  502. function iao_su_postslist_beforeFunction(pageElems) {
  503. pageElems.forEach(function (one) {
  504. let now = one.getElementsByClassName("post-card")[0]
  505. if (now) {
  506. now.getElementsByClassName("blog-background")[0].style.backgroundImage = 'url("' + RegExp("(?<=loadBannerDirect\\(').*(?=', '',)").exec(now.getElementsByTagName("script")[0].innerText)[0]; + '")';
  507. }
  508. });
  509. return pageElems
  510. }
  511.  
  512.  
  513. // art_alphacoders
  514. function art_alphacoders_beforeFunction_0() {
  515. let pageElems1 = document.querySelectorAll(".container-masonry > div")
  516. document.querySelector(".container-masonry").style.height = "auto"
  517. pageElems1.forEach(function (one) {
  518. one.setAttribute("style","float: left");
  519. });
  520. }
  521.  
  522.  
  523. // art_alphacoders 的插入前函数
  524. function art_alphacoders_beforeFunction(pageElems) {
  525. pageElems.forEach(function (one) {
  526. one.setAttribute("style","float: left");
  527. });
  528. return pageElems
  529. }
  530.  
  531.  
  532. // iplaysoft 的插入前函数
  533. function _58pic_beforeFunction(pageElems) {
  534. let is_one = document.querySelector(".qtw-card.place-box.is-one");
  535. if (is_one && is_one.style.display != "none") {
  536. is_one.setAttribute("style", "display: none;")
  537. }
  538. pageElems.forEach(function (one) {
  539. let now = one.querySelector("img.lazy")
  540. if (now && now.getAttribute('src') === "//icon.qiantucdn.com/static/images/qtw-card/card-place.png") {
  541. now.setAttribute("src", now.dataset.original)
  542. now.setAttribute("style", "display: block;")
  543. }
  544. });
  545. return pageElems
  546. }
  547.  
  548.  
  549. // 滚动条事件
  550. function windowScroll(fn1) {
  551. var beforeScrollTop = document.documentElement.scrollTop,
  552. fn = fn1 || function () {};
  553. setTimeout(function () { // 延时执行,避免刚载入到页面就触发翻页事件
  554. window.addEventListener("scroll", function (e) {
  555. var afterScrollTop = document.documentElement.scrollTop,
  556. delta = afterScrollTop - beforeScrollTop;
  557. if (delta == 0) return false;
  558. fn(delta > 0 ? "down" : "up", e);
  559. beforeScrollTop = afterScrollTop;
  560. }, false);
  561. }, 1000)
  562. }
  563.  
  564.  
  565. var ShowPager = { // 修改自 https://greasyfork.org/scripts/14178
  566. getFullHref: function (e) {
  567. if(e == null) return '';
  568. "string" != typeof e && (e = e.getAttribute("href"));
  569. var t = this.getFullHref.a;
  570. return t || (this.getFullHref.a = t = document.createElement("a")), t.href = e, t.href;
  571. },
  572. createDocumentByString: function (e) {
  573. if (e) {
  574. if ("HTML" !== document.documentElement.nodeName) return (new DOMParser).parseFromString(e, "application/xhtml+xml");
  575. var t;
  576. try {
  577. t = (new DOMParser).parseFromString(e, "text/html");
  578. } catch (e) {
  579. }
  580. if (t) return t;
  581. if (document.implementation.createHTMLDocument) t = document.implementation.createHTMLDocument("ADocument"); else try {
  582. (t = document.cloneNode(!1)).appendChild(t.importNode(document.documentElement, !1)),
  583. t.documentElement.appendChild(t.createElement("head")), t.documentElement.appendChild(t.createElement("body"));
  584. } catch (e) {
  585. }
  586. if (t) {
  587. var r = document.createRange();
  588. r.selectNodeContents(document.body);
  589. var n = r.createContextualFragment(e);
  590. t.body.appendChild(n);
  591. for (var a, o = {
  592. TITLE: !0,
  593. META: !0,
  594. LINK: !0,
  595. STYLE: !0,
  596. BASE: !0
  597. }, i = t.body, s = i.childNodes, c = s.length - 1; c >= 0; c--) o[(a = s[c]).nodeName] && i.removeChild(a);
  598. return t;
  599. }
  600. } else console.error("没有找到要转成DOM的字符串");
  601. },
  602. loadMorePage: function () {
  603. if (curSite.pager) {
  604. let curPageEle = getElementByXpath(curSite.pager.nextLink);
  605. var url = this.getFullHref(curPageEle);
  606. //console.log(`${url} ${curPageEle} ${curSite.pageUrl}`);
  607. if(url === '') return;
  608. if(curSite.pageUrl === url) return;// 避免重复加载相同的页面
  609. curSite.pageUrl = url;
  610. // 读取下一页的数据
  611. curSite.pager.startFilter && curSite.pager.startFilter();
  612. GM_xmlhttpRequest({
  613. url: url,
  614. method: "GET",
  615. timeout: 5000,
  616. onload: function (response) {
  617. try {
  618. //console.log(`${response.responseText}`)
  619. var newBody = ShowPager.createDocumentByString(response.responseText);
  620. let pageElems = getAllElements(curSite.pager.pageElement, newBody, newBody);
  621. let toElement = getAllElements(curSite.pager.HT_insert[0])[0];
  622. if (pageElems.length >= 0) {
  623. // 如果有插入前函数就执行函数
  624. if (curSite.function && curSite.function.before) {
  625. if (curSite.function.parameter) { // 如果指定了参数
  626. pageElems = curSite.function.before(curSite.function.parameter);
  627. }else{
  628. pageElems = curSite.function.before(pageElems);
  629. }
  630. }
  631. // 插入位置
  632. let addTo;
  633. switch (curSite.pager.HT_insert[1]) {
  634. case 1:
  635. addTo = "beforebegin"
  636. break;
  637. case 2:
  638. addTo = "afterbegin"
  639. break;
  640. case 3:
  641. addTo = "beforeend"
  642. break;
  643. case 4:
  644. addTo = "afterend"
  645. break;
  646. }
  647. // 插入新页面元素
  648. pageElems.forEach(function (one) {
  649. toElement.insertAdjacentElement(addTo, one);
  650. });
  651. // 替换待替换元素
  652. try {
  653. let oriE = getAllElements(curSite.pager.replaceE);
  654. let repE = getAllElements(curSite.pager.replaceE, newBody, newBody);
  655. if (oriE.length === repE.length) {
  656. for (var i = 0; i < oriE.length; i++) {
  657. oriE[i].outerHTML = repE[i].outerHTML;
  658. }
  659. }
  660. } catch (e) {
  661. console.log(e);
  662. }
  663. // 如果有插入后函数就执行函数
  664. if (curSite.function && curSite.function.after) {
  665. if (curSite.function.parameter) { // 如果指定了参数
  666. curSite.function.after(curSite.function.parameter);
  667. }else{
  668. curSite.function.after();
  669. }
  670. }
  671. }
  672. } catch (e) {
  673. console.log(e);
  674. }
  675. }
  676. });
  677. }
  678. },
  679. };
  680.  
  681.  
  682. function getElementByXpath(e, t, r) {
  683. r = r || document, t = t || r;
  684. try {
  685. return r.evaluate(e, t, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  686. } catch (t) {
  687. return void console.error("无效的xpath");
  688. }
  689. }
  690.  
  691.  
  692. function getAllElements(e, t, r, n, o) {
  693. let getAllElementsByXpath = function(e, t, r) {
  694. return r = r || document, t = t || r, r.evaluate(e, t, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
  695. }
  696.  
  697. var i, s = [];
  698. if (!e) return s;
  699. 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) {
  700. return (t || document).querySelectorAll(e);
  701. }(e.slice(4), t) : getAllElementsByXpath(e, t, r); else {
  702. if (!(i = e(r, n, o))) return s;
  703. if (i.nodeType) return s[0] = i, s;
  704. }
  705. return function makeArray(e) {
  706. var t, r, n, o = [];
  707. if (e.pop) {
  708. for (t = 0, r = e.length; t < r; t++) (n = e[t]) && (n.nodeType ? o.push(n) : o = o.concat(makeArray(n)));
  709. return a()(o);
  710. }
  711. if (e.item) {
  712. for (t = e.length; t;) o[--t] = e[t];
  713. return o;
  714. }
  715. if (e.iterateNext) {
  716. for (t = e.snapshotLength; t;) o[--t] = e.snapshotItem(t);
  717. return o;
  718. }
  719. }(i);
  720. }
  721. })();