Quy tắc nâng cao

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

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

Nếu bạn thấy Pagetual hữu ích và có thể, hãy ủng hộ để giúp tài trợ cho việc phát triển. Nếu không, không sao cả – hãy tận hưởng!💞

PayPal

Ko-fi

愛發電
Join 💬Discord
Follow 🕊️twitter
Send 📧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}"
    ]
  }
]

Xem thêm ví dụ về quy tắcopen in new window

name

Tên của trang web mục tiêu

"name": "Site name"

author

Tác giả của quy tắc này

"author": "Hoothin"

example

URL ví dụ của quy tắc này

"example": "https://abc.com"

url

Biểu thức chính quy (RegExp) cho URL của trang web mục tiêu

"url": "^https://abc\\.com/\\d+"

pinUrl

Đôi khi liên kết tiếp theo hoặc phần tử trang không tồn tại, hãy đặt giá trị này là true để bạn có thể ghim quy tắc chỉ bằng URL thay vì tìm các phần tử bằng các quy tắc thông minh

"pinUrl": true

enable

0 có nghĩa là dừng hành động khi tất cả đã khớp

"enable": 0

include

Bộ chọn (Selector) hoặc xpath của phần tử phải bao gồm

"include": "div.content"

exclude

Bộ chọn (Selector) hoặc xpath của phần tử không được bao gồm

"exclude": "div.content"

wait

Thời gian chờ trang sẵn sàng khi bạn chắc chắn URL khớp với trang web, bạn cũng có thể sử dụng mã JavaScript trả về giá trị boolean để kiểm tra xem trang đã sẵn sàng chưa

"wait": 500
"wait": "let img=doc.querySelector('ul.list img');return img!=null"

waitElement

Mảng ["tồn tại", "không tồn tại"] chứa "bộ chọn hoặc xpath của phần tử phải tồn tại (đối với một số phần tử lazyload)" & "bộ chọn hoặc xpath của phần tử không được tồn tại (đối với một số placeholder đang tải cần cuộn vào chế độ xem để tải)"

"waitElement": [
    ".summary",
    "#popular.fade:not(.in)"
]

action

0 có nghĩa là tải URL và chèn bằng HTML tĩnh, 1 có nghĩa là tải bằng iframe để mã JavaScript động trên trang có thể có hiệu lực, 2 có nghĩa là buộc chèn iframe vào cuối

"action": 1

Bộ chọn (Selector) hoặc xpath của liên kết trang tiếp theo, tắt khi đặt thành 0, bạn có thể đặt nó thành một mảng để chứa nhiều liên kết tiếp theo.

"nextLink": ".page-next>a"
"nextLink": [
    ".page1-next>a",
    ".page2-next>a",
    ".page3-next>a"
]

nextLinkByUrl

Nếu không có phần tử tiếp theo, bạn có thể sử dụng cái này để tạo một href từ URL hiện tại, [0] có nghĩa là chuỗi RegExp, [1] có nghĩa là chuỗi thay thế, [2] có nghĩa là bộ chọn hoặc xpath của phần tử phải bao gồm, [3] có nghĩa là bộ chọn hoặc xpath của phần tử không được bao gồm, bạn có thể sử dụng {} để đánh giá mã đơn giản

"nextLinkByUrl": [
    "(&page=(\\d+))?$",
    "&page={$2+1}"
]
"nextLinkByUrl": [
    "(&page=(\\d+))?$",
    "&page={$2+1}",
    ".disable>button"
]

nextLinkByJs (doc)

Sử dụng cái này để đánh giá mã JavaScript và trả về URL mục tiêu của trang tiếp theo với doc (tài liệu của mỗi trang đã tải)

"nextLinkByJs": "let n=doc.querySelector('a.curr+a');if(n)return n.href.replace(/^javascript:.*\\((\\d+)'\\);/,'$1_.html');"

stopSign

Dừng tải trang tiếp theo khi khớp với dấu hiệu này

"stopSign": ["#pagenum", ".disable",
    [
        "#pagenum",
        "(\\d+)"
    ],
    [
        "#pagenum",
        "\\/(\\d+)"
    ]
]

pageElement

Bộ chọn (Selector) hoặc xpath của nội dung chính cần chèn, bạn có thể đặt nó thành một mảng để chứa nhiều phần tử trang.

"pageElement": ".Context>.Article"

pageElementByJs (over)

Sử dụng cái này để đánh giá mã JavaScript và tạo các phần tử bạn muốn chèn, cần có over(eles) để gọi lại với mảng các phần tử để chèn

"pageElementByJs": "let src=match[1]+match[3];img.onload=()=>{over([img])};img.onerror=e=>{over()};img.src=src;"

replaceElement

Bộ chọn (Selector) hoặc xpath của phần tử bạn muốn thay thế bằng cái mới, có thể là một mảng

"replaceElement": "#page"
"replaceElement": ["#page1", "#page2"]

lazyImgSrc

Thuộc tính của hình ảnh mà mục tiêu là src thật, có thể được đặt bằng ["lazysrc", "removeProp1,removeProp2"] để xóa các thuộc tính của hình ảnh

"lazyImgSrc": "data-cfsrc"
"lazyImgSrc": ["data-lazy-src", "removeProp1,removeProp2"]

css

Thêm css để bạn có thể hiển thị một số phần tử bị ẩn, bắt đầu với "inIframe:" thì css này sẽ chỉ có hiệu lực trong trang iframe tiếp theo

"css": ".card-lazy{display:none}"

insert

Vị trí bạn muốn chèn, bạn có thể đặt nó thành một mảng để chứa nhiều vị trí.

"insert": "ul#feed-main"

insertPos

1 có nghĩa là chèn trước, 2 có nghĩa là chỉ thêm vào cuối của mục tiêu

"insertPos": 2

iframeInit (win, iframe)

Mã JavaScript để chạy nhanh nhất có thể trước khi bất kỳ mã nào trong iframe đang chạy.

"iframeInit": "win.self=win.top;"

init (doc, win, iframe, click, enter, input)

Mã JavaScript để chỉ chạy một lần với trang chính hiện tại hoặc mỗi iframe với doc:(tài liệu của trang chính hoặc iframe)

"init": "if(doc)doc.querySelector('[data-title=sh]').click();"

pagePre (response)

Mã JavaScript để chạy sau khi nhận phản hồi từ URL của liên kết tiếp theo, bạn có thể sửa đổi nội dung phản hồi và trả về nó

"pagePre": "return decodeURI(response).replace(/[\\\\]/g,'')"

pageInit (doc, eles)

Mã JavaScript để chạy với mỗi trang được chèn với doc:(tài liệu của mỗi trang đã tải) và eles:(các phần tử được tìm thấy bằng quy tắc), chạy trước khi chèn, bạn có thể kích hoạt sự kiện như onView()

"pageInit": "let ops=doc.querySelectorAll('op');[].forEach.call(ops,op=>{img.src=op.value;imgCon.appendChild(img)})"

pageAction (doc, eles)

Mã JavaScript để chạy với mỗi trang được chèn với doc:(tài liệu của mỗi trang đã tải) và eles:(các phần tử được tìm thấy bằng quy tắc), chạy sau khi chèn, bạn có thể thêm các chức năng như click()

"pageAction": "let j=document.querySelector('.lazy');eles.forEach(i=>{i.src=i.dataset.srcset;})"

filter

Lọc các phần tử được chèn từ trang tiếp theo.

"filter": {
    "count": 20,
    "words": "spams\\d",
    "link": "^https://spams\\.xxx",
    "selector": "div#spam"
}

loadMore

Bộ chọn (Selector) của nút "tải thêm"

"loadMore": ".loadMore"

sleep

Thời gian ngủ (ms) khi tải trang tiếp theo nếu trang web bị giới hạn bởi khoảng thời gian

"sleep": 1000

rate

Multi-windowHeight mà bạn có thể đặt thành 2 hoặc 3 trong khi một số trang web tải trang tiếp theo chậm

"rate": 3

autoLoadNum

Số lượng trang để tự động chuyển sau khi mở trang

"autoLoadNum": 5

listenHashChange

Đặt giá trị này là true để pagetual sẽ khởi động lại khi hash thay đổi

"listenHashChange": true

refreshByClick

Nếu trang web tải lại nội dung mà không thay đổi URL khi nhấp vào nút gửi. Đặt giá trị này bằng bộ chọn của nút mục tiêu, pagetual sẽ đặt lại sau khi nhấp vào nó.

"refreshByClick": "#sreach"

pageNum

Chỉ số trang bằng $p trong URL hiện tại, bạn có thể sử dụng {} để đánh giá chuỗi kết quả từ số trang, như {$p*25+1}

"pageNum": "&start={15*($p-1)}"

pageBar (pageBar)

Mã JavaScript để thay đổi pageBar, 0 có nghĩa là ẩn

"pageBar": "pageBar.classList.add('j_thread_list');"

pageBarText

Đặt thành 1 để tiêu đề tài liệu của trang tiếp theo sẽ được hiển thị trên thanh trang

"pageBarText": 1

autoClick

Bộ chọn css hoặc xpath của phần tử mà bạn muốn tự động nhấp

"autoClick": "#btn-sky"

history

Đặt thành 0 thì việc ghi lịch sử sẽ bị tắt. Đặt thành 1 thì việc ghi lịch sử sẽ được bật. Đặt thành 2 thì việc ghi lịch sử sẽ hoạt động ngay lập tức sau khi nối. Bất kể giá trị nào là tùy chọn chung.

"history": 1

lockScroll

Đặt thành true nếu bạn không muốn trang tự động cuộn khi điều hướng đến trang tiếp theo

"lockScroll": true

wheel

Đặt thành true để hành động trang tiếp theo chỉ có hiệu lực khi cuộn chuột

"wheel": true

fitWidth

Đặt thành false nếu bạn thấy pageElement có chiều rộng nhỏ sai

"fitWidth": false

delay

Mã JavaScript để trì hoãn hành động tiếp theo cho đến khi trả về true, sử dụng thuộc tính này để có được các phần tử trang hoàn chỉnh với lazy load.

"delay": "return document.querySelector('#feed_pagenation>li.cur').innerText>=curpage"

manualMode

Đặt thành true để bật chế độ thủ công, sau đó phân trang sẽ dừng, mũi tên phải (hoặc sự kiện 'pagetual.next') sẽ được liên kết để nhấp vào liên kết tiếp theo.

"manualMode": true

openInNewTab

Đặt thành true để tất cả các liên kết mở trong các tab mới, false để chúng mở trong cùng một tab.

"openInNewTab": true

pageElementCss

Kiểu css mà bạn muốn đặt cho mỗi phần tử trang.

"pageElementCss": "color: red"

initRun

Chạy ngay lập tức khi khởi tạo.

"initRun": true

sideController

Hiển thị hoặc ẩn thanh công cụ của sideController.

"sideController": true

listenUrlChange

Làm mới script sau khi URL thay đổi.

"listenUrlChange": false

clickMode

Dừng chuyển trang và nhấp vào liên kết tiếp theo sau khi cuộn xuống cuối trang.

"clickMode": true

preloadImages(doc)

Phân tích trang và trả về một mảng các URL hình ảnh cần được tải trước.

"preloadImages": "return ['1.jpg']"

child script

Nếu trang web có một số giới hạn đối với việc đánh giá mã. Bạn có thể tạo một child script với hàm nằm trong đối tượng window. Bạn nên đặt tên chúng bắt đầu bằng pagetual sử dụng camelCase. Ví dụ: window.pagetualWait, window.pagetualNextLinkByJs, window.pagetualPageInit, window.pagetualPageAction, window.pagetualInit, window.pagetualPageBarText.