Quy tắc nâng cao
Discord
Github
Twitter Outsource
| 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}"
]
}
]
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
nextLink
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.