终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页
十分感謝分享。
我添加了一個stopSign,來判定停止條件,有4種用法
例子:
    {
        "name": "無限動漫手機版 - 漫畫閱讀",
        "example": "https://8.twobili.com/comic/insurance_1475.html?ch=1",
        "url": "^https?://8\\.twobili\\.com/comic/\\w+\\.html\\?ch=\\d+(-\\d+)?$",
        "nextLinkByUrl": [
            "(ch=\\d+)(-(\\d+))?$",
            "$1-{($3.0||1)+1}"
        ],
        "stopSign": [
            [
                "#pagenum",
                "(\\d+)"
            ],
            [
                "#pagenum",
                "\\/(\\d+)"
            ]
        ],
        "pageElement": "#TheImg",
        "replaceElement": "#pagenum,#pageindex",
        "pageBar": 0,
        "css": ".pinch-zoom-container{height: auto; display: contents;}",
        "rate": 3
    }
如果可以的話,歡迎你把規則直接pr到主倉庫。
高手出手就是不一樣,直接適用多種情況,厲害厲害。
主倉庫是指https://github.com/hoothin/UserScripts/issues這邊嗎?
還有一個奇怪的問題,想不通為什麼這個規則在手機kiwi瀏覽器無效。
    {
        "name": "嗨皮漫畫 - 更新頁",
        "example": "https://m.happymh.com/latest",
        "url": "^https://m\\.happymh\\.com/latest$",
        "loadMore": ".more-div-btn"
    }
手機目前唯獨就這個站loadMore無效,其他的都正常,偏偏這個站又是手機上最常用的。
測試在電腦chrome主控台運行以下代碼是有效的
document.querySelector('.more-div-btn').click()
可是在手機kiwi上的開發人員工具主控台運行就沒有效果
運行移除有效document.querySelector('.more-div-btn').remove()
就很奇怪為什麼點擊的代碼沒有效果
感謝反饋錯誤,已經兼容了。
沒料到這個站會單獨監聽觸摸。
是的,主倉庫是https://github.com/hoothin/UserScripts。fork一下之後修改pagetualRule.json,然後pull request,就可以合并到主分支了。
stopSign在xHamster這個站遇到了問題
下一頁元素沒有href屬性是透過腳本自動運行的,點擊下一頁元素到最後一頁,繼續點會從第1頁重新開始無限循環。
stopSign填寫反覆確認應該是沒有錯誤,但還是沒有判斷到已達最後一頁。
有用代碼在主控台測試過,獲取的元素數字正確。
document.querySelector('.photo-amounts-info').innerText.match(/^(\d+)/)[1];
document.querySelector('.photo-amounts-info').innerText.match(/(\d+)$/)[1];
當前頁數在前最大頁數在後
    {
        "name": "xHamster gallery",
        "example": "https://zh.xhamster.com/photos/gallery/15952229/513274272",
        "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/photos/gallery/",
        "nextLink": ".fotorama__arr--next",
        "stopSign": [
            [
                ".photo-amounts-info",
                "^(\\d+)"
            ],
            [
                ".photo-amounts-info",
                "(\\d+)$"
            ]
        ],
        "pageElement": ".fotorama__active>img",
        "replaceElement": ".gallery-thumbs,.photo-amounts-info",
        "pageBar": 0,
        "initRun": 1,
        "autoLoadNum": "0",
        "css": "#photo_slider *{overflow: initial !important;position: initial !important;}.fotorama__stage{height:auto!important;}.fotorama__loaded--img:not(.fotorama__active){display:none!important}.fotorama__img {max-width: 98% !important;display: block !important;margin: 0 auto !important;}"
    }
另一個同樣會無限循環的例子,stopSign可以正常判斷已達最後一頁。
下一頁元素有href屬性
.itemCount當前頁數在後最大頁數在前
    {
        "name": "PornHub photo",
        "example": "https://cn.pornhub.com/photo/825175581",
        "url": "^https?://([a-z]{2}\\.)?pornhub\\.com/photo/\\d+",
        "init": "document.querySelector('.centerImage>a:nth-child(3)').removeAttribute('href')",
        "nextLink": ".arrowRight",
        "stopSign": [
            [
                ".itemCount",
                "(\\d+)$"
            ],
            [
                ".itemCount",
                "^(\\d+)"
            ]
        ],
        "pageElement": ".centerImage img",
        "replaceElement": ".arrowLeft,.arrowRight,.thumbSliderButtons,.thumbSliderContent,.itemCount",
        "pageBar": 0,
        "initRun": 1,
        "autoLoadNum": "0",
        "css": ".arrowLeft,.arrowRight{display:none!important}#photoImageSection img{margin:0!important}"
    }
所以不會停止的問題,是規則錯誤還是腳本BUG,麻煩大大看一下。
感謝反饋,修復了
建議nextLinkByUrl增加第3種lastpage的判斷
測試在nextLinkByUrl添加以下代碼,可透過頁碼元素文字判斷是否已經是最後一頁。
let isLast = this.curSiteRule.nextLinkByUrl[4]; if (isLast) { let num = getElement(isLast, doc).textContent; let match = num.match(/(\d+)\/(\d+)/); if (match[1] == match[2]) { this.nextLinkHref = false; return null } }供測試的規則
{ "name": "無限動漫手機版 - 漫畫閱讀", "example": "https://8.twobili.com/comic/insurance_1475.html?ch=1", "url": "^https?://8\\.twobili\\.com/comic/\\w+\\.html\\?ch=\\d+(-\\d+)?$", "nextLinkByUrl": [ "(ch=\\d+)(-(\\d+))?$", "$1-{($3.0||1)+1}", "", "", "#pagenum" ], "pageElement": "#TheImg", "replaceElement": "#pagenum,#pageindex", "pageAction": "document.querySelector('.pagetual_pageBar').remove();setTimeout(()=>{let ul=document.querySelector('#TheTable li');let h=ul.offsetHeight;let p=document.querySelector('.pinch-zoom-container');p.style.height=h+'px'},1000)", "rate": 3 }, { "name": "無限動漫 - 漫畫閱讀2", "example": "https://www.comicabc.com/online/new-18722.html?ch=26-1", "url": "^https?://www\\.comicabc\\.com/online/new-\\d+\\.html\\?ch=\\d+(-\\d+)?$", "nextLinkByUrl": [ "(ch=\\d+)(-(\\d+))?$", "$1-{($3.0||1)+1}", "#next:not([style])", "", "#pagenum" ], "pageElement": "#TheImg", "replaceElement": "#pageindex,#pagenum", "css": "img[name='TheImg'] {max-width: 100% !important;display: block !important;margin: 0 auto !important;}#TheTable td:nth-child(1),#TheTable td:nth-child(3),.comment_block,#prevnext2,#prev,#next{display:none!important}", "pageAction": "document.querySelector('.pagetual_pageBar').remove();" }, { "name": "無限動漫 - 漫畫閱讀", "example": "https://www.comicabc.com/ReadComic/103/1/1_FU4_LD9_7.html", "url": "^https?://www\\.comicabc\\.com/ReadComic/\\d+/\\d+/\\w+\\.html", "nextLinkByUrl": [ "html(\\?p=(\\d+))?$", "html?p={($2.0||1)+1}", "#next:not([style])", "", "#pagenum" ], "pageElement": "#TheImg", "replaceElement": "#pageindex,#pagenum", "css": "img[name='TheImg'] {max-width: 100% !important;display: block !important;margin: 0 auto !important;}#TheTable td:nth-child(1),#TheTable td:nth-child(3),.comment_block,#prevnext2,#prev,#next{display:none!important}", "pageAction": "document.querySelector('.pagetual_pageBar').remove();" }還有一種可能maxpage和currentpage處在兩個不同的元素位置
let maxpage = getElement(maxpage, doc).textContent;
let current = getElement(current, doc).textContent;
if (current == maxpage) {
this.nextLinkHref = false;
return null
}
不過目前還沒遇到需要這種情況的判斷
最後附上自用的自定義完整規則
https://raw.githubusercontent.com/skofkyo/AutoPager/main/pagetualRules_EX.json
折騰了快一個月,一個代碼小白參考了一堆代碼,東拼西湊的總算快弄完規則了。