高级自定义

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

discord Discordopen in new window github Githubopen in new window wechat 关注我的微信公众号 twitter Twitteropen in new window

若您发现永页机有用且有余力,请杯咖啡将令我不胜感激。如果没有,也不用担心 - 开源万岁!💞

PayPal

Ko-fi

爱发电
donatereward
💬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 就可以仅通过 url 固定规则,而非通过规则查找到元素才确认用此规则

"pinUrl": true

enable

0 表示所有条件都匹配时停止翻页

"enable": 0

include

此规则必须包含的元素的 Selector 或 xpath

"include": "div.content"

exclude

此规则必须不包含的元素的 Selector 或 xpath

"exclude": "div.content"

wait

当你确定 url 匹配网站时,等待页面就绪的时间。你也可以使用返回布尔值的 JavaScript 代码来检查页面是否已就绪

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

waitElement

这个数组["exist", "not exist"]包含 "必须存在的元素的 Selector 或 xpath (用于某些懒加载元素)" & "必须不存在的元素的 Selector 或 xpath (用于一些需要滚动到视图中才能加载的占位符)"

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

action

0 表示加载 url 并使用静态 html 插入,1 表示通过 iframe 加载,以便使得页面上的动态 JavaScript 代码尽可能生效,2 表示强制将 iframe 插入到底部

"action": 1

下一页链接的 Selector 或 xpath,设置为 0 时禁用,你可以将其设置为一个数组以包含多个下一页链接。

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

nextLinkByUrl

如果没有下一个元素,你可以使用它从当前 url 生成一个 href,[0]表示正则表达式字符串,[1]表示替换字符串,[2]表示必须包含的元素的 Selector 或 xpath,[3]表示必须不包含的元素的 Selector 或 xpath,你可以使用{}来执行简单的代码

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

nextLinkByJs (doc)

使用它来执行 JavaScript 代码并返回下一页的目标 url,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

需要插入的主内容的 Selector 或 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

你想用新元素替换的元素的 Selector 或 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 获取响应后运行的 JavaScript 代码,你可以修改响应内容并返回它

"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

“加载更多”按钮的 Selector

"loadMore": ".loadMore"

sleep

如果网站受时间间隔限制,加载下一页时的休眠时间(毫秒)

"sleep": 1000

rate

页面高度的倍数,如果有些网站加载下一页很慢,可以将其设置为 2 或 3

"rate": 3

autoLoadNum

页面打开后自动加载的页数

"autoLoadNum": 5

listenHashChange

将其设置为 true,则当哈希值更改时 Pagetual 将重新启动

"listenHashChange": true

refreshByClick

如果点击提交按钮时网站在不更改 url 的情况下重新加载内容。将其设置为目标按钮的 Selector,点击后 Pagetual 将重置。

"refreshByClick": "#sreach"

pageNum

用 $p 指向当前 url 中的页码,你可以使用{}来计算页码结果字符串,例如 {$p*25+1}

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

pageBar (pageBar)

用于更改 pageBar 的 JavaScript 代码,0 表示隐藏

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

pageBarText

将其设置为 1,则下一页的文档标题将显示在 pagebar 上

"pageBarText": 1

autoClick

你想要自动点击的元素的 css selector 或 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

url 更改后刷新脚本。

"listenUrlChange": false

clickMode

滚动到底部后停止翻页并点击下一页链接。

"clickMode": true

preloadImages(doc)

分析页面并返回需要预加载的图片 URL 数组。

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

child script

如果网站对代码执行有限制。你可以在 window 对象下创建一个带有函数的子脚本。你应该将它们命名为以 pagetual 开头的驼峰命名法。例如 window.pagetualWaitwindow.pagetualNextLinkByJswindow.pagetualPageInitwindow.pagetualPageActionwindow.pagetualInitwindow.pagetualPageBarText