|
1 | 1 | // ==UserScript== |
2 | 2 | // @name 自动无缝翻页 |
3 | | -// @version 1.1.5 |
| 3 | +// @version 1.1.6 |
4 | 4 | // @author X.I.U |
5 | | -// @description 自动无缝翻页,目前支持:423Down、Apphot(原烈火汉化)、小众软件、PubMed、三国杀论坛 |
| 5 | +// @description 自动无缝翻页,目前支持:423Down、Apphot、小众软件、PubMed、异次元软件、不死鸟、三国杀论坛 |
6 | 6 | // @match *://www.423down.com/* |
7 | 7 | // @exclude *://www.423down.com/*.html |
8 | 8 | // @match *://apphot.cc/* |
|
12 | 12 | // @match *://www.appinn.com/?s=* |
13 | 13 | // @match *://pubmed.ncbi.nlm.nih.gov/?term=* |
14 | 14 | // @match *://club.sanguosha.com/* |
| 15 | +// @match *://www.iplaysoft.com/* |
| 16 | +// @match *://iao.su/* |
15 | 17 | // @icon https://i.loli.net/2021/03/07/rdijeYm83pznxWq.png |
16 | 18 | // @grant GM_xmlhttpRequest |
17 | 19 | // @grant GM_registerMenuCommand |
|
30 | 32 |
|
31 | 33 | // 自动翻页规则 |
32 | 34 | // type:1 = 脚本实现自动无缝翻页,2 = 网站自带了自动无缝翻页功能,只需要点击下一页按钮即可,这时 nextText 为按钮文本,避免一瞬间加载太多次下一页 |
33 | | - // HT_insert:1 = 插入元素前面;2 = 插入元素中的最后一个子元素后面 |
| 35 | + // HT_insert:1 = 插入该元素本身的前面;2 = 插入该元素当中,第一个子元素前面;3 = 插入该元素当中,最后一个子元素后面;4 = 插入该元素本身的后面; |
34 | 36 | // scrollDelta:数值越大,滚动条触发点越靠上(越早开始翻页) |
| 37 | + // beforeFunction = 插入前执行函数;afterFunction = 插入后执行函数 |
35 | 38 | let DBSite = { |
36 | 39 | _423down_postslist: { |
37 | 40 | SiteTypeID: 1, |
38 | 41 | pager: { |
39 | 42 | type: 1, |
40 | 43 | nextLink: '//div[@class="paging"]//a[contains(text(),"下一页")][@href]', |
41 | 44 | pageElement: 'css;div.content-wrap ul.excerpt > li', |
42 | | - HT_insert: ['css;div.content-wrap ul.excerpt', 2], |
| 45 | + HT_insert: ['css;div.content-wrap ul.excerpt', 3], |
43 | 46 | replaceE: 'css;div.paging', |
44 | 47 | scrollDelta: 1500 |
45 | 48 | } |
|
90 | 93 | type: 1, |
91 | 94 | nextLink: '//a[@class="nxt"][@href]', |
92 | 95 | pageElement: 'css;div#postlist > div[id^="post_"]', |
93 | | - HT_insert: ['css;div#postlist', 2], |
| 96 | + HT_insert: ['css;div#postlist', 3], |
94 | 97 | replaceE: 'css;div.pg', |
95 | 98 | scrollDelta: 800 |
96 | 99 | } |
|
101 | 104 | type: 1, |
102 | 105 | nextLink: '//a[@class="nxt"][@href]', |
103 | 106 | pageElement: 'css;div#threadlist > ul', |
104 | | - HT_insert: ['css;div#threadlist', 2], |
| 107 | + HT_insert: ['css;div#threadlist', 3], |
105 | 108 | replaceE: 'css;div.pg', |
106 | 109 | scrollDelta: 800 |
107 | 110 | } |
108 | | - } |
| 111 | + }, |
| 112 | + iplaysoft_postslist: { |
| 113 | + SiteTypeID: 8, |
| 114 | + pager: { |
| 115 | + type: 1, |
| 116 | + nextLink: '//div[@class="pagenavi"]//a[@title="下一页"][@href]', |
| 117 | + pageElement: 'css;#postlist > div.entry', |
| 118 | + HT_insert: ['css;#postlist > .pagenavi-button', 1], |
| 119 | + replaceE: 'css;.pagenavi-button, .pagenavi', |
| 120 | + scrollDelta: 1200, |
| 121 | + beforeFunction: iplaysoft_postslist_beforeFunction |
| 122 | + } |
| 123 | + }, |
| 124 | + iplaysoft_postcomments: { |
| 125 | + SiteTypeID: 9, |
| 126 | + pager: { |
| 127 | + type: 2, |
| 128 | + nextLink: '#loadHistoryComments', |
| 129 | + nextText: '展开后面', |
| 130 | + scrollDelta: 1200 |
| 131 | + } |
| 132 | + }, |
| 133 | + iao_su_postslist: { |
| 134 | + SiteTypeID: 10, |
| 135 | + pager: { |
| 136 | + type: 1, |
| 137 | + nextLink: '//li[@class="btn btn-primary next"]//a[@href]', |
| 138 | + pageElement: 'css;#index > article, #archive > article', |
| 139 | + HT_insert: ['css;ol.page-navigator', 1], |
| 140 | + replaceE: 'css;ol.page-navigator', |
| 141 | + scrollDelta: 1000, |
| 142 | + beforeFunction: iao_su_postslist_beforeFunction |
| 143 | + } |
| 144 | + }, |
109 | 145 | }; |
110 | 146 |
|
111 | 147 |
|
|
132 | 168 | curSite = DBSite.sanguosha_search; |
133 | 169 | } |
134 | 170 | break; |
| 171 | + case "www.iplaysoft.com": |
| 172 | + if(location.pathname.indexOf(".html") > -1 || location.pathname.indexOf("/p/") > -1){ // 文章内 |
| 173 | + curSite = DBSite.iplaysoft_postcomments; |
| 174 | + }else{ // 其他页面 |
| 175 | + curSite = DBSite.iplaysoft_postslist; |
| 176 | + } |
| 177 | + break; |
| 178 | + case "iao.su": |
| 179 | + curSite = DBSite.iao_su_postslist; |
| 180 | + break; |
135 | 181 | } |
136 | 182 | curSite.pageUrl = ""; // 下一页URL |
137 | 183 | pageLoading(); // 自动无缝翻页 |
|
143 | 189 | windowScroll(function (direction, e) { |
144 | 190 | if (direction === "down") { // 下滑才准备翻页 |
145 | 191 | let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; |
146 | | - //console.log(document.documentElement.scrollHeight) |
147 | 192 | let scrollDelta = curSite.pager.scrollDelta; |
148 | 193 | if (document.documentElement.scrollHeight <= document.documentElement.clientHeight + scrollTop + scrollDelta) { |
149 | 194 | if (curSite.pager.type === 1) { |
150 | 195 | ShowPager.loadMorePage(); |
151 | 196 | }else{ |
152 | 197 | let autopbn = document.querySelector(curSite.pager.nextLink); |
153 | | - if (autopbn && autopbn.innerText == curSite.pager.nextText){ // 如果正在加载,就不再点击 |
154 | | - autopbn.click(); |
| 198 | + if (autopbn){ // 如果正在加载,就不再点击 |
| 199 | + if (!curSite.pager.nextText){ // 如果没有指定 nextText 就直接点击 |
| 200 | + autopbn.click(); |
| 201 | + }else if (autopbn.innerText.indexOf(curSite.pager.nextText) > -1){ // 如果指定了 nextText 就需要判断后再点击(避免已经在加载了,还重复点击) |
| 202 | + autopbn.click(); |
| 203 | + } |
155 | 204 | } |
156 | 205 | } |
157 | 206 | } |
|
169 | 218 | } |
170 | 219 |
|
171 | 220 |
|
| 221 | + // iplaysoft 的插入前函数 |
| 222 | + function iplaysoft_postslist_beforeFunction(pageElems) { |
| 223 | + pageElems.forEach(function (one) { |
| 224 | + let now = one.querySelector("img.lazyload") |
| 225 | + if (now && !now.getAttribute('src')) { |
| 226 | + now.setAttribute("src",now.getAttribute('data-src')) |
| 227 | + now.setAttribute("srcset",now.getAttribute('data-src')) |
| 228 | + now.setAttribute("class","lazyloaded") |
| 229 | + } |
| 230 | + }); |
| 231 | + return pageElems |
| 232 | + } |
| 233 | + |
| 234 | + |
| 235 | + // iao.su 的插入前函数 |
| 236 | + function iao_su_postslist_beforeFunction(pageElems) { |
| 237 | + pageElems.forEach(function (one) { |
| 238 | + let now = one.getElementsByClassName("post-card")[0] |
| 239 | + if (now) { |
| 240 | + now.getElementsByClassName("blog-background")[0].style.backgroundImage = 'url("' + RegExp("(?<=loadBannerDirect\\(').*(?=', '',)").exec(now.getElementsByTagName("script")[0].innerText)[0]; + '")'; |
| 241 | + } |
| 242 | + }); |
| 243 | + return pageElems |
| 244 | + } |
| 245 | + |
| 246 | + |
172 | 247 | // 滚动条事件 |
173 | 248 | function windowScroll(fn1) { |
174 | 249 | var beforeScrollTop = document.documentElement.scrollTop, |
|
226 | 301 | if (curSite.pager) { |
227 | 302 | let curPageEle = getElementByXpath(curSite.pager.nextLink); |
228 | 303 | var url = this.getFullHref(curPageEle); |
229 | | - //console.log(`${url} ${curPageEle} ${curSite.pageUrl}`); |
| 304 | + console.log(`${url} ${curPageEle} ${curSite.pageUrl}`); |
230 | 305 | if(url === '') return; |
231 | | - if(curSite.pageUrl === url) return;// 不会重复加载相同的页面 |
| 306 | + if(curSite.pageUrl === url) return;// 避免重复加载相同的页面 |
232 | 307 | curSite.pageUrl = url; |
233 | 308 | // 读取下一页的数据 |
234 | 309 | curSite.pager.startFilter && curSite.pager.startFilter(); |
|
243 | 318 | let pageElems = getAllElements(curSite.pager.pageElement, newBody, newBody); |
244 | 319 | let toElement = getAllElements(curSite.pager.HT_insert[0])[0]; |
245 | 320 | if (pageElems.length >= 0) { |
246 | | - let addTo = "beforeend"; |
247 | | - if (curSite.pager.HT_insert[1] == 1) addTo = "beforebegin"; |
| 321 | + // 如果有插入前函数就执行函数 |
| 322 | + if (curSite.pager.beforeFunction)pageElems = curSite.pager.beforeFunction(pageElems); |
| 323 | + // 插入位置 |
| 324 | + let addTo; |
| 325 | + switch (curSite.pager.HT_insert[1]) { |
| 326 | + case 1: |
| 327 | + addTo = "beforebegin" |
| 328 | + break; |
| 329 | + case 2: |
| 330 | + addTo = "afterbegin" |
| 331 | + break; |
| 332 | + case 3: |
| 333 | + addTo = "beforeend" |
| 334 | + break; |
| 335 | + case 4: |
| 336 | + addTo = "afterend" |
| 337 | + break; |
| 338 | + } |
248 | 339 | // 插入新页面元素 |
249 | 340 | pageElems.forEach(function (one) { |
250 | 341 | toElement.insertAdjacentElement(addTo, one); |
|
261 | 352 | } catch (e) { |
262 | 353 | console.log(e); |
263 | 354 | } |
| 355 | + // 如果有插入后函数就执行函数 |
| 356 | + if (curSite.pager.afterFunction)curSite.pager.afterFunction(); |
264 | 357 | } |
265 | 358 | } catch (e) { |
266 | 359 | console.log(e); |
|
0 commit comments