進階自訂

https://hoothin.github.io/UserScripts/Pagetual/pagetualRules.json

discord Discordopen in new window github Githubopen in new window twitter Twitteropen in new window

如果您覺得 Pagetual 有用且經濟許可,歡迎打賞資助它的開發。如果不能,也沒關係 — 祝您使用愉快!💞

PayPal

Ko-fi

愛發電
donate
加入 💬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}"
    ]
  }
]

更多規則範例open in new window

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

下一頁連結的選擇器或 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.pagetualWaitwindow.pagetualNextLinkByJswindow.pagetualPageInitwindow.pagetualPageActionwindow.pagetualInitwindow.pagetualPageBarText