東方永頁機 Wiki
Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !
https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRules.json
[
{
"name":"beauty",
"url":"^https://www\\.jpmn8\\.com/",
"pageElement":"p>img"
},
{
"name":"Expreview",
"url":"^https://www\\.expreview\\.com/",
"loadMore":"span.load"
}
]
💞Buy me a coffee if it helps you | ||
---|---|---|
PayPal.Me | BuyMeACoffee |
Name of the target site
"name": "Site name"
Author of this rule
"author": "Hoothin"
Example url of this rule
"example": "https://abc.com"
RegExp for the url of target site
"url": "^https://abc\\.com/\\d+"
Sometimes the next link or page element will be inexistence, set this to true so you can pin the rule just with url instead of finding elements by intelligent rules
"pinUrl": true
0 means stop action when all matched
"enable": 0
Selector or xpath of the element which must include
"include": "div.content"
Selector or xpath of the element which must not include
"exclude": "div.content"
The time to wait for page ready when you are sure the url match the site, you can also use a javaScript code which return a boolean to check if the page is ready instead
"wait": 500
"wait": "let img=doc.querySelector('ul.list img');return img!=null"
The array["exist", "not exist"] contains "selector or xpath of element must exist (for some lazyload element)" & "selector or xpath of element must not exist (for some loading placeholder which need scroll into view to load)"
"waitElement": [
".summary",
"#popular.fade:not(.in)"
]
0 means load url and insert with static html, 1 means load by iframe so that dynamic javaScript code on page may effect, 2 means force insert iframe to bottom
"action": 1
Selector or xpath of next page link, disable when set to 0, you can let it to be a array to contains multiple next links.
"nextLink": ".page-next>a"
"nextLink": [
".page1-next>a",
".page2-next>a",
".page3-next>a"
]
If there is no next element, you can use this to generate a href from current url, [0] means RegExp string, [1] means replace string, [2] means selector or xpath of the element which must include, [3] means selector or xpath of the element which must not include, you can use {} to eval simple code
"nextLinkByUrl": [
"(&page=(\\d+))?$",
"&page={$2+1}"
]
"nextLinkByUrl": [
"(&page=(\\d+))?$",
"&page={$2+1}",
".disable>button"
]
Use this to eval javaScript code and return target url of next page with doc (document of every page loaded)
"nextLinkByJs": "let n=doc.querySelector('a.curr+a');if(n)return n.href.replace(/^javascript:.*\\((\\d+)'\\);/,'$1_.html');"
Selector or xpath of main content which need to insert, you can let it to be a array to contains multiple page elements.
"pageElement": ".Context>.Article"
Use this to eval javaScript code and create the elements whatever you want to insert, a over(eles) is needed to callback with elements array for insert
"pageElementByJs": "let src=match[1]+match[3];img.onload=()=>{over([img])};img.onerror=e=>{over()};img.src=src;"
Selector or xpath of element which you want to replace with new one, can be a array
"replaceElement": "#page"
"replaceElement": ["#page1", "#page2"]
The attr of image which target to real src, can be set by ["lazysrc", "removeProp1,removeProp2"] to remove props of image
"lazyImgSrc": "data-cfsrc"
"lazyImgSrc": ["data-lazy-src", "removeProp1,removeProp2"]
Add css so you can show some hidden element, start with "inIframe:" then this css will effect only in next iframe page
"css": ".card-lazy{display:none}"
Which position you want to insert, you can let it to be a array to contains multiple positions.
"insert": "ul#feed-main"
1 means insert before, 2 means just append to the bottom of target
"insertPos": 2
The javaScript code to run only once with current main page with doc:(document of main page)
"init": "if(doc)doc.querySelector('[data-title=sh]').click();"
The javaScript code to run after get response from URL of next link, you can modify the response content and return it
"pagePre": "return decodeURI(response).replace(/[\\\\]/g,'')"
The javaScript code to run with every page inserted with doc:(document of every page loaded) and eles:(elements found with rule), run before inserted, you can trigger event like onView()
"pageInit": "let ops=doc.querySelectorAll('op');[].forEach.call(ops,op=>{img.src=op.value;imgCon.appendChild(img)})"
The javaScript code to run with every page inserted with doc:(document of every page loaded) and eles:(elements found with rule), run after inserted, you can add functions like click()
"pageAction": "let j=document.querySelector('.lazy');eles.forEach(i=>{i.src=i.dataset.srcset;})"
Selector of "load more" button
"loadMore": ".loadMore"
Sleep time (ms) when load next page if site is limited by time interval
"sleep": 1000
The multi-windowHeight which you can set to 2 or 3 while some sites load next page slowly
"rate": 3
The amount of pages for auto turning after page opening
"autoLoadNum": 5
Set this to true so pagetual will restart when hash changed
"listenHashChange": true
If the site reload content without changing url when click a submit button. Set this with the selector of the target button, pagetual will listen the change and reset after you click the button.
"refreshByClick": "#sreach"
Point the page number with $p in current url, you can use{} to eval result string from page number, like {$p*25+1}
"pageNum": "&start={15*($p-1)}"
The javaScript code to change pageBar, 0 means hide
"pageBar": "pageBar.classList.add('j_thread_list');"
Set to 1 so the document title of next page will be shown on pagebar
"pageBarText": 1
The css selector or xpath of element which you want to click automatically
"autoClick": "#btn-sky"
Set to 0 then history writing will be disable. Set to 1 then history writing will be enable. Set to 2 then history writing will action immediately after splicing. No matter what value is the general option.
"history": 1
Set to true if you don't want the page to auto scroll when navigate to next page
"lockScroll": true
Set to true so the next page action will only effect when the mouse wheel roll
"wheel": true
Set to false if you find the pageElement get the wrong small width
"fitWidth": false
Custom cssText of style for pageElement
"pageElementStyle": "font-size: xx-large;"
The javaScript code to delay next action until return true, use this prop to get complete page elements with lazy load.
"delay": "return document.querySelector('#feed_pagenation>li.cur').innerText>=curpage"
Set to true to enable manual mode, then paging will stop, right arrow (or 'pagetual.next' event) will be bound to click next link.
"manualMode": true
If the site has some limit for code eval. You can make a child script with function under object window
. You should name them start with pagetual
use camelCase. Like window.pagetualWait
, window.pagetualNextLinkByJs
, window.pagetualPageInit
, window.pagetualPageAction
, window.pagetualInit
, window.pagetualPageBarText
.