進階自訂
| 如果您覺得 Pagetual 有用且經濟許可,歡迎打賞資助它的開發。如果不能,也沒關係 — 祝您使用愉快!💞 | ||||
|---|---|---|---|---|
PayPal | Ko-fi | 愛發電 | ![]() | |
| 加入 💬Discord | ||||
| 追蹤 🕊️twitter | ||||
| 發送 📧E-Mail | ||||
| Made with ❤️ by Hoothin | ||||
[
{
"name":"yande",
"url":"^https://yande-demo\\.re/",
"pageElement":"ul#post-list-posts>li",
"nextLink":"a.next_page",
"css":".javascript-hide {display: inline-block !important;}"
},
{
"name": "so.3dm",
"url": "^https://so\\.3dmgame-demo\\.com",
"pageElement": "div.content > div.search_wrap > div.search_lis",
"action": 1
},
{
"name":"xxgame",
"url":"^http://www\\.xxgame-demo\\.net/chinese",
"pageElement":"div.layui-row>div.layui-col-md4:not(div:nth-child(5),div:nth-child(6),div:nth-child(7))",
"nextLinkByUrl":[
"(http://www\\.xxgame-demo\\.net/chinese/?)(?:\\?page=|$)(\\d*)",
"$1?page={$2+1}"
]
}
]
name
目標網站名稱
"name": "Site name"
author
此規則的作者
"author": "Hoothin"
example
此規則的範例網址
"example": "https://abc.com"
url
目標網站網址的正規表示法
"url": "^https://abc\\.com/\\d+"
pinUrl
有時「下一頁」連結或頁面元素並不存在,將此項設為 true,就可以僅透過網址來固定規則,而不必使用智慧規則尋找元素
"pinUrl": true
enable
0 表示所有匹配都停止動作
"enable": 0
include
必須包含的元素選擇器或 xpath
"include": "div.content"
exclude
必須不包含的元素選擇器或 xpath
"exclude": "div.content"
wait
當您確定網址與網站匹配時,等待頁面準備就緒的時間,您也可以使用回傳布林值的 JavaScript 程式碼來檢查頁面是否準備就緒
"wait": 500
"wait": "let img=doc.querySelector('ul.list img');return img!=null"
waitElement
包含「必須存在的元素選擇器或 xpath (針對一些延遲載入的元素)」和「必須不存在的元素選擇器或 xpath (針對一些需要滾動到視野範圍內才能載入的載入佔位符)」的陣列["exist", "not exist"]
"waitElement": [
".summary",
"#popular.fade:not(.in)"
]
action
0 表示載入網址並以靜態 HTML 插入,1 表示透過 iframe 載入,以便頁面上的動態 JavaScript 程式碼可能產生作用,2 表示強制將 iframe 插入到底部
"action": 1
nextLink
下一頁連結的選擇器或 xpath,設為 0 時停用,您可以將其設為陣列以包含多個下一頁連結。
"nextLink": ".page-next>a"
"nextLink": [
".page1-next>a",
".page2-next>a",
".page3-next>a"
]
nextLinkByUrl
如果沒有下一頁元素,您可以使用此項從目前的網址產生一個 href,[0] 表示正規表示法字串,[1] 表示取代字串,[2] 表示必須包含的元素選擇器或 xpath,[3] 表示必須不包含的元素選擇器或 xpath,您可以使用 {} 來評估簡單的程式碼
"nextLinkByUrl": [
"(&page=(\\d+))?$",
"&page={$2+1}"
]
"nextLinkByUrl": [
"(&page=(\\d+))?$",
"&page={$2+1}",
".disable>button"
]
nextLinkByJs (doc)
使用此項來評估 JavaScript 程式碼並回傳下一頁的目標網址,並帶有 doc (每個載入頁面的 document)
"nextLinkByJs": "let n=doc.querySelector('a.curr+a');if(n)return n.href.replace(/^javascript:.*\\((\\d+)'\\);/,'$1_.html');"
stopSign
當匹配此標誌時停止載入下一頁
"stopSign": ["#pagenum", ".disable",
[
"#pagenum",
"(\\d+)"
],
[
"#pagenum",
"\\/(\\d+)"
]
]
pageElement
需要插入的主要內容的選擇器或 xpath,您可以將其設為陣列以包含多個頁面元素。
"pageElement": ".Context>.Article"
pageElementByJs (over)
使用此項來評估 JavaScript 程式碼並建立您想插入的任何元素,需要一個 over(eles) 回呼函數,並帶有要插入的元素陣列
"pageElementByJs": "let src=match[1]+match[3];img.onload=()=>{over([img])};img.onerror=e=>{over()};img.src=src;"
replaceElement
您想用新元素取代的元素選擇器或 xpath,可以是陣列
"replaceElement": "#page"
"replaceElement": ["#page1", "#page2"]
lazyImgSrc
目標真實 src 的圖片屬性,可以透過 ["lazysrc", "removeProp1,removeProp2"] 來設定以移除圖片屬性
"lazyImgSrc": "data-cfsrc"
"lazyImgSrc": ["data-lazy-src", "removeProp1,removeProp2"]
css
新增 css 以顯示一些隱藏元素,以 "inIframe:" 開頭,則此 css 僅在下一個 iframe 頁面中生效
"css": ".card-lazy{display:none}"
insert
您想插入的位置,您可以將其設為陣列以包含多個位置。
"insert": "ul#feed-main"
insertPos
1 表示在目標之前插入,2 表示只附加到目標底部
"insertPos": 2
iframeInit (win, iframe)
在 iframe 中的任何程式碼執行之前,盡可能快地執行的 JavaScript 程式碼。
"iframeInit": "win.self=win.top;"
init (doc, win, iframe, click, enter, input)
僅在目前主頁面或每個 iframe 載入時執行一次的 JavaScript 程式碼,並帶有 doc: (主頁面或 iframe 的 document)
"init": "if(doc)doc.querySelector('[data-title=sh]').click();"
pagePre (response)
從下一頁連結的 URL 取得 response 後執行的 JavaScript 程式碼,您可以修改 response 內容並回傳
"pagePre": "return decodeURI(response).replace(/[\\\\]/g,'')"
pageInit (doc, eles)
在插入每個頁面之前執行的 JavaScript 程式碼,並帶有 doc: (每個載入頁面的 document) 和 eles: (透過規則找到的元素),您可以在插入前觸發 onView() 等事件
"pageInit": "let ops=doc.querySelectorAll('op');[].forEach.call(ops,op=>{img.src=op.value;imgCon.appendChild(img)})"
pageAction (doc, eles)
在插入每個頁面之後執行的 JavaScript 程式碼,並帶有 doc: (每個載入頁面的 document) 和 eles: (透過規則找到的元素),您可以新增 click() 等功能
"pageAction": "let j=document.querySelector('.lazy');eles.forEach(i=>{i.src=i.dataset.srcset;})"
filter
篩選從下一頁插入的元素。
"filter": {
"count": 20,
"words": "spams\\d",
"link": "^https://spams\\.xxx",
"selector": "div#spam"
}
loadMore
「載入更多」按鈕的選擇器
"loadMore": ".loadMore"
sleep
如果網站有限制時間間隔,載入下一頁時的休眠時間 (毫秒)
"sleep": 1000
rate
當某些網站載入下一頁較慢時,您可以將此項設為 2 或 3 的多個視窗高度
"rate": 3
autoLoadNum
開啟頁面後自動翻頁的頁數
"autoLoadNum": 5
listenHashChange
將此項設為 true,當雜湊值變更時 Pagetual 將重新啟動
"listenHashChange": true
refreshByClick
如果網站點擊提交按鈕時內容會重新載入但網址不變。將此項設為目標按鈕的選擇器,點擊後 Pagetual 將重設。
"refreshByClick": "#sreach"
pageNum
用 $p 指向目前網址的頁碼,您可以使用 {} 來評估頁碼的結果字串,例如 {$p*25+1}
"pageNum": "&start={15*($p-1)}"
pageBar (pageBar)
變更頁面導覽列的 JavaScript 程式碼,0 表示隱藏
"pageBar": "pageBar.classList.add('j_thread_list');"
pageBarText
設為 1,則下一頁的 document 標題將顯示在頁面導覽列上
"pageBarText": 1
autoClick
您想自動點擊的元素 CSS 選擇器或 xpath
"autoClick": "#btn-sky"
history
設為 0 時,停用歷史記錄寫入。設為 1 時,啟用歷史記錄寫入。設為 2 時,歷史記錄寫入將在拼接後立即執行。無論通用選項是什麼值。
"history": 1
lockScroll
如果您不想在導覽到下一頁時頁面自動滾動,將此項設為 true
"lockScroll": true
wheel
將此項設為 true,則下一頁動作只會在滾動滑鼠滾輪時生效
"wheel": true
fitWidth
如果您發現 pageElement 的寬度不正確,將此項設為 false
"fitWidth": false
delay
延遲下一個動作的 JavaScript 程式碼,直到回傳 true 為止,使用此屬性可以取得完整的延遲載入頁面元素。
"delay": "return document.querySelector('#feed_pagenation>li.cur').innerText>=curpage"
manualMode
設為 true 可啟用手動模式,此時分頁將停止,右箭頭 (或 'pagetual.next' 事件) 將綁定為點擊下一頁連結。
"manualMode": true
openInNewTab
設為 true 可讓所有連結在新分頁中開啟,設為 false 可讓它們在自身頁面中開啟。
"openInNewTab": true
pageElementCss
您想為每個頁面元素設定的樣式 css。
"pageElementCss": "color: red"
initRun
初始化後立即執行。
"initRun": true
sideController
顯示或隱藏側邊控制器的工具列。
"sideController": true
listenUrlChange
網址變更後重新整理腳本。
"listenUrlChange": false
clickMode
滾動到底部後停止翻頁並點擊下一頁連結。
"clickMode": true
preloadImages(doc)
分析頁面並回傳需要預載入的圖片網址陣列。
"preloadImages": "return ['1.jpg']"
child script
如果網站對程式碼評估有限制。您可以在 window 物件下建立一個帶有函數的子腳本。您應該將它們命名為以 pagetual 開頭並使用駝峰式命名法。例如 window.pagetualWait、window.pagetualNextLinkByJs、window.pagetualPageInit、window.pagetualPageAction、window.pagetualInit、window.pagetualPageBarText。
Discord
Github
Twitter