|
1 | 1 | // ==UserScript== |
2 | 2 | // @name 自动无缝翻页 |
3 | | -// @version 1.5.3 |
| 3 | +// @version 1.5.4 |
4 | 4 | // @author X.I.U |
5 | | -// @description 自动无缝翻页,目前支持:[所有使用「Discuz!、Flarum、DUX(WordPress)」的网站]、百度、谷歌、豆瓣、微博、千图网、3DM、游侠网、游民星空、Steam 创意工坊、423Down、不死鸟、小众软件、微当下载、异次元软件、老殁殁漂遥、异星软件空间、古风漫画网、砂之船动漫家、RARBG、PubMed、AfreecaTV、GreasyFork、AlphaCoders、Crackhub213、FitGirl Repacks... |
| 5 | +// @description 自动无缝翻页,目前支持:[所有使用「Discuz!、Flarum、DUX(WordPress)」的网站]、百度、谷歌、贴吧、豆瓣、微博、千图网、3DM、游侠网、游民星空、Steam 创意工坊、423Down、不死鸟、小众软件、微当下载、异次元软件、老殁殁漂遥、异星软件空间、古风漫画网、砂之船动漫家、RARBG、PubMed、AfreecaTV、GreasyFork、AlphaCoders、Crackhub213、FitGirl Repacks... |
6 | 6 | // @match *://*/* |
7 | 7 | // @connect www.gamersky.com |
8 | 8 | // @icon https://i.loli.net/2021/03/07/rdijeYm83pznxWq.png |
|
23 | 23 | 'use strict'; |
24 | 24 | var webType, curSite = {SiteTypeID: 0}; |
25 | 25 | // 目前支持的网站 |
26 | | - const websiteList = ['www.baidu.com', 'www.google.com', 'movie.douban.com', 'weibo.com', 'www.58pic.com', |
| 26 | + const websiteList = ['www.baidu.com', 'www.google.com', 'tieba.baidu.com', 'movie.douban.com', 'weibo.com', 'www.58pic.com', |
27 | 27 | 'www.3dmgame.com', 'www.ali213.net', 'gl.ali213.net', 'www.gamersky.com', 'steamcommunity.com', |
28 | 28 | 'www.423down.com', 'iao.su', 'www.appinn.com', 'www.weidown.com', 'www.iplaysoft.com', 'www.mpyit.com', 'www.yxssp.com', |
29 | 29 | 'www.gufengmh8.com', 'www.szcdmj.com', |
|
188 | 188 | scrollDelta: 1500 |
189 | 189 | } |
190 | 190 | }, |
| 191 | + baidu_tieba: { |
| 192 | + SiteTypeID: 0, |
| 193 | + pager: { |
| 194 | + type: 1, |
| 195 | + nextLink: '//a[@class="next pagination-item "][@href]', |
| 196 | + pageElement: 'css;#thread_list > li', |
| 197 | + HT_insert: ['css;#thread_list', 3], |
| 198 | + replaceE: 'css;#frs_list_pager', |
| 199 | + scrollDelta: 1500 |
| 200 | + }, |
| 201 | + function: { |
| 202 | + before: baidu_tieba_beforeFunction |
| 203 | + } |
| 204 | + }, |
191 | 205 | douban_subject_comments: { |
192 | 206 | SiteTypeID: 0, |
193 | 207 | pager: { |
|
564 | 578 | pager: { |
565 | 579 | type: 1, |
566 | 580 | nextLink: '//a[@id="next_page"][@href]', |
567 | | - pageElement: 'css;.thumb-container-big, .avatar-thumb, .thumb-element', |
568 | | - HT_insert: ['css;.thumb-container-big:nth-last-child(1), .avatar-thumb:nth-last-child(1), .thumb-element:nth-last-child(1)', 4], |
| 581 | + pageElement: 'css;.page_container > .center > div', |
| 582 | + HT_insert: ['css;.page_container > .center', 3], |
569 | 583 | replaceE: '//div[@class="hidden-xs hidden-sm"]/..', |
570 | 584 | scrollDelta: 1000 |
571 | 585 | } |
|
588 | 602 | // 用于脚本判断(针对部分特殊的网站) |
589 | 603 | const SiteType = { |
590 | 604 | GOOGLE: DBSite.google.SiteTypeID, |
| 605 | + BAIDU_TIEBA: DBSite.baidu_tieba.SiteTypeID, |
591 | 606 | GAMERSKY_GL: DBSite.gamersky_gl.SiteTypeID, |
592 | 607 | STEAMCOMMUNITY: DBSite.steamcommunity.SiteTypeID |
593 | 608 | }; |
|
602 | 617 | case 'www.google.com': // < 谷歌搜索 > |
603 | 618 | if (location.pathname === '/search') curSite = DBSite.google; |
604 | 619 | break; |
| 620 | + case 'tieba.baidu.com': // < 百度贴吧 > |
| 621 | + if (location.pathname === '/f') { |
| 622 | + // 修复帖子列表中预览图片,在切换下一个/上一个图片时,多出来的图片上下边距 |
| 623 | + document.lastElementChild.appendChild(document.createElement('style')).textContent = 'img.j_retract {margin-top: 0 !important;margin-bottom: 0 !important;}'; |
| 624 | + curSite = DBSite.baidu_tieba; |
| 625 | + } |
| 626 | + break; |
605 | 627 | case 'movie.douban.com': // < 豆瓣评论 > |
606 | 628 | if (location.pathname.indexOf('/subject') > -1 && location.pathname.indexOf('/comments') > -1) { // 短评列表 |
607 | 629 | curSite = DBSite.douban_subject_comments; |
|
616 | 638 | break; |
617 | 639 | case 'www.58pic.com': // < 千图网 > |
618 | 640 | if (location.pathname.indexOf('/tupian/') > -1) { |
| 641 | + // 隐藏末尾很大的 [下一页] 按钮 |
| 642 | + document.lastElementChild.appendChild(document.createElement('style')).textContent = '.qtw-card.place-box.is-two {display: none !important;}'; |
619 | 643 | curSite = DBSite._58pic; |
620 | 644 | } else if (location.pathname.indexOf('/c/') > -1) { |
621 | 645 | curSite = DBSite._58pic_c; |
|
628 | 652 | curSite = DBSite.ali213_www; |
629 | 653 | break; |
630 | 654 | case 'gl.ali213.net': // < 游侠网 - 攻略页 > |
| 655 | + // 隐藏部分碍事元素 |
| 656 | + document.lastElementChild.appendChild(document.createElement('style')).textContent = '.n_show_b {display: none !important;}'; |
631 | 657 | curSite = DBSite.ali213_gl; |
632 | | - document.lastElementChild.appendChild(document.createElement('style')).textContent = '.n_show_b {display: none !important;}' // 隐藏部分碍事元素 |
633 | 658 | break; |
634 | 659 | case 'www.gamersky.com': // < 游民星空 > |
635 | 660 | if (location.pathname.indexOf('/ent/') > -1) { |
|
710 | 735 | curSite = DBSite.alphacoders_art; |
711 | 736 | setTimeout(alphacoders_art_beforeFunction_0, 1000); |
712 | 737 | break; |
713 | | - case 'wall.alphacoders.com': |
| 738 | + /*case 'wall.alphacoders.com': // 已经原生支持自动无缝翻页了 |
714 | 739 | case 'avatars.alphacoders.com': |
715 | 740 | case 'mobile.alphacoders.com': |
716 | 741 | curSite = DBSite.alphacoders_wall; |
717 | | - break; |
| 742 | + break;*/ |
718 | 743 | case 'crackhub.site': // < 游戏下载网站 > |
719 | 744 | curSite = DBSite.fitgirl; |
720 | 745 | document.lastElementChild.appendChild(document.createElement('style')).textContent = 'html.wp-dark-mode-active .inside-article {background-color: var(--wp-dark-mode-bg);}' |
|
788 | 813 | function dux_beforeFunction(pageElems) { |
789 | 814 | pageElems.forEach(function (one) { |
790 | 815 | let now = one.querySelector('img.thumb[data-src]') |
791 | | - if (now) { |
792 | | - now.setAttribute('src', now.dataset.src) |
793 | | - } |
| 816 | + if (now) {now.src = now.dataset.src;} |
| 817 | + }); |
| 818 | + return pageElems |
| 819 | + } |
| 820 | + |
| 821 | + |
| 822 | + // 百度贴吧 的插入前函数(加载图片) |
| 823 | + function baidu_tieba_beforeFunction(pageElems) { |
| 824 | + pageElems.forEach(function (one) { |
| 825 | + one.querySelectorAll('img.threadlist_pic[data-original]').forEach(function (now) { |
| 826 | + now.src = now.dataset.original; |
| 827 | + now.style.display = 'inline'; |
| 828 | + }) |
794 | 829 | }); |
795 | 830 | return pageElems |
796 | 831 | } |
|
799 | 834 | // 58pic 的插入前函数(加载图片) |
800 | 835 | function _58pic_beforeFunction(pageElems) { |
801 | 836 | let is_one = document.querySelector('.qtw-card.place-box.is-one'); |
802 | | - if (is_one && is_one.style.display != 'none') { |
803 | | - is_one.setAttribute('style', 'display: none;') |
804 | | - } |
| 837 | + if (is_one && is_one.style.display != 'none') {is_one.style.display = 'none';} |
805 | 838 | pageElems.forEach(function (one) { |
806 | 839 | let now = one.querySelector('img.lazy') |
807 | 840 | if (now && now.getAttribute('src') != now.dataset.original) { |
808 | | - now.setAttribute('src', now.dataset.original) |
809 | | - now.setAttribute('style', 'display: block;') |
| 841 | + now.src = now.dataset.original; |
| 842 | + now.style.display = 'block'; |
810 | 843 | } |
811 | 844 | }); |
812 | 845 | return pageElems |
|
816 | 849 | // 游民星空攻略 的插入前函数(移除下一页底部的 "更多相关内容请关注:xxx" 文字) |
817 | 850 | function gamersky_gl_beforeFunction(pageElems) { |
818 | 851 | pageElems.forEach(function (one) { |
819 | | - if (one.tagName === 'P' && one.textContent.indexOf('更多相关内容请关注') > -1) { |
820 | | - one.style.display = 'none'; |
821 | | - } |
| 852 | + if (one.tagName === 'P' && one.textContent.indexOf('更多相关内容请关注') > -1) {one.style.display = 'none';} |
822 | 853 | }); |
823 | 854 | return pageElems |
824 | 855 | } |
|
842 | 873 | pageElems.forEach(function (one) { |
843 | 874 | let now = one.querySelector('img.lazyload') |
844 | 875 | if (now && !now.src) { |
845 | | - now.setAttribute('src', now.dataset.src) |
| 876 | + now.src = now.dataset.src; |
846 | 877 | now.setAttribute('srcset', now.dataset.src) |
847 | 878 | now.setAttribute('class', 'lazyloaded') |
848 | 879 | } |
|
854 | 885 | // alphacoders_art 的插入前函数(图片结构调整) |
855 | 886 | function alphacoders_art_beforeFunction(pageElems) { |
856 | 887 | pageElems.forEach(function (one) { |
857 | | - one.setAttribute('style','float: left'); |
| 888 | + one.style.float = 'left'; |
858 | 889 | }); |
859 | 890 | return pageElems |
860 | 891 | } |
|
863 | 894 | let pageElems1 = document.querySelectorAll('.container-masonry > div') |
864 | 895 | document.querySelector('.container-masonry').style.height = 'auto' |
865 | 896 | pageElems1.forEach(function (one) { |
866 | | - one.setAttribute('style','float: left'); |
| 897 | + one.style.float = 'left'; |
867 | 898 | }); |
868 | 899 | } |
869 | 900 |
|
|
939 | 970 | } else { |
940 | 971 | let now = one.querySelector('img[data-original]') |
941 | 972 | if (now) { |
942 | | - now.setAttribute('src', now.dataset.original) |
| 973 | + now.src = now.dataset.original; |
943 | 974 | now.style.display = 'inline'; |
944 | 975 | } |
945 | 976 | } |
|
1160 | 1191 | if (curSite.pager) { |
1161 | 1192 | let curPageEle = getElementByXpath(curSite.pager.nextLink); |
1162 | 1193 | var url = this.getFullHref(curPageEle); |
1163 | | - console.log(`${url} ${curPageEle} ${curSite.pageUrl}`); |
| 1194 | + //console.log(url, curPageEle, curSite.pageUrl); |
1164 | 1195 | if (url === '') return; |
1165 | 1196 | if (curSite.pageUrl === url) return;// 避免重复加载相同的页面 |
1166 | 1197 | curSite.pageUrl = url; |
| 1198 | + if (curSite.SiteTypeID === SiteType.BAIDU_TIEBA) { |
| 1199 | + url = url + '&pagelets=frs-list%2Fpagelet%2Fthread&pagelets_stamp=' + new Date().getTime(); |
| 1200 | + } |
1167 | 1201 | // 读取下一页的数据 |
1168 | | - curSite.pager.startFilter && curSite.pager.startFilter(); |
1169 | 1202 | GM_xmlhttpRequest({ |
1170 | 1203 | url: url, |
1171 | 1204 | method: 'GET', |
|
1176 | 1209 | var newBody = ShowPager.createDocumentByString(response.responseText); |
1177 | 1210 | let pageElems = getAllElements(curSite.pager.pageElement, newBody, newBody), |
1178 | 1211 | toElement = getAllElements(curSite.pager.HT_insert[0])[0]; |
1179 | | - console.log(curSite.pager.pageElement, pageElems) |
| 1212 | + //console.log(curSite.pager.pageElement, pageElems) |
1180 | 1213 |
|
1181 | 1214 | if (pageElems.length >= 0) { |
1182 | 1215 | // 如果有插入前函数就执行函数 |
|
1190 | 1223 |
|
1191 | 1224 | // 插入位置 |
1192 | 1225 | let addTo1 = addTo(curSite.pager.HT_insert[1]); |
| 1226 | + |
1193 | 1227 | // 插入新页面元素 |
1194 | 1228 | if (curSite.SiteTypeID === SiteType.STEAMCOMMUNITY) { |
1195 | 1229 | pageElems.forEach(function (one) { |
|
1199 | 1233 | toElement.insertAdjacentElement(addTo1, one); // 继续插入网页主体元素 |
1200 | 1234 | } |
1201 | 1235 | }); |
1202 | | - } else { |
| 1236 | + } else if (curSite.SiteTypeID != SiteType.BAIDU_TIEBA) { |
1203 | 1237 | pageElems.forEach(function (one) {toElement.insertAdjacentElement(addTo1, one);}); |
1204 | 1238 | } |
| 1239 | + |
1205 | 1240 | // 对于 <script> 需要用另一种方式插入网页,以便正常运行 |
1206 | | - if(curSite.SiteTypeID === SiteType.GOOGLE) { |
| 1241 | + if (curSite.SiteTypeID === SiteType.GOOGLE) { |
1207 | 1242 | const scriptElems = getAllElements('//script', newBody, newBody); |
1208 | 1243 | let scriptText = ''; |
1209 | 1244 | scriptElems.forEach(function (one) {scriptText += one.innerHTML;}); |
1210 | 1245 | toElement.appendChild(document.createElement('script')).innerHTML = scriptText; |
1211 | 1246 | } |
1212 | 1247 |
|
| 1248 | + // 对于百度贴吧这种动态加载内容的网站需要单独处理 |
| 1249 | + if (curSite.SiteTypeID === SiteType.BAIDU_TIEBA) { |
| 1250 | + const scriptElems = getAllElements('//script', newBody, newBody); |
| 1251 | + let scriptText = ''; |
| 1252 | + for (let i = 0; i < scriptElems.length; i++) { |
| 1253 | + if (scriptElems[i].textContent.indexOf('Bigpipe.register("frs-list/pagelet/thread_list"') > -1) { |
| 1254 | + scriptText = scriptElems[i].textContent.replace('Bigpipe.register("frs-list/pagelet/thread_list", ',''); |
| 1255 | + break |
| 1256 | + } |
| 1257 | + } |
| 1258 | + if (scriptText) { |
| 1259 | + scriptText = scriptText.slice(0, scriptText.indexOf(').')) // 获取主体内容 |
| 1260 | + let scriptJSON = JSON.parse(scriptText).content; // 字符串转 JSON |
| 1261 | + var temp_baidu_tieba = document.createElement('div'); temp_baidu_tieba.innerHTML = scriptJSON; // 字符串转 Element 元素 |
| 1262 | + pageElems = curSite.function.before(getAllElements(curSite.pager.pageElement, temp_baidu_tieba, temp_baidu_tieba)); // 插入前执行函数 |
| 1263 | + pageElems.forEach(function (one) {toElement.insertAdjacentElement(addTo1, one);}); // 插入元素 |
| 1264 | + } |
| 1265 | + //toElement.appendChild(document.createElement('script')).innerHTML = scriptText; |
| 1266 | + } |
| 1267 | + |
1213 | 1268 | // 替换待替换元素 |
1214 | 1269 | try { |
1215 | | - let oriE = getAllElements(curSite.pager.replaceE); |
1216 | | - let repE = getAllElements(curSite.pager.replaceE, newBody, newBody); |
| 1270 | + let oriE = getAllElements(curSite.pager.replaceE), repE; |
| 1271 | + if (curSite.SiteTypeID === SiteType.BAIDU_TIEBA) { |
| 1272 | + repE = getAllElements(curSite.pager.replaceE, temp_baidu_tieba, temp_baidu_tieba); |
| 1273 | + } else { |
| 1274 | + repE = getAllElements(curSite.pager.replaceE, newBody, newBody); |
| 1275 | + } |
1217 | 1276 | if (oriE.length === repE.length) { |
1218 | | - for (var i = 0; i < oriE.length; i++) { |
| 1277 | + for (let i = 0; i < oriE.length; i++) { |
1219 | 1278 | oriE[i].outerHTML = repE[i].outerHTML; |
1220 | 1279 | } |
1221 | 1280 | } |
|
0 commit comments