Tự động tìm các trang web được phân trang tiếp theo và chèn vào trang hiện tại để cuộn vô hạn. Hỗ trợ hàng ngàn trang web mà không cần bất kỳ quy tắc nào.
这个需要自己编辑规则,需要懂一点css或者xpath知识。 如果不想要写规则的话,你也可以直接选择命令里面的强制拼接-拼接整页。
规则其实写起来很简单,例如具体到这个网站就是
{ "name":"17K小说网", "url":"^https://www\\.17k\\.com", "pageElement":".area>.read,.area>.comment" }
其他网站也是一样的,打开控制台查看元素的class和id自己改改就行了
有个小问题,class 里面的空格该怎么处理?有个叫"readAreaBox content"的 class,直接填进去出错了。
{
"name":"17K小说网",
"url":"^https://www\\.17k\\.com",
"pageElement":".area>.read>.readArea>.readAreaBox content, .area>.read>.NextPrevBtn, .area>.comment"
}
.readAreaBox.content
不过你这样改的话会把原先的页面结构破坏掉,还是在我上面的基础上加上css来隐藏不需要的内容吧 例如
{ "name":"17K小说网", "url":"^https://www\\.17k\\.com", "pageElement":".area>.read,.area>.comment", "css":".read_tit,.rightSide{display:none}.readAreaBox{width:auto}" }
当然,如果想要加上标题的话也可以这样写规则
{ "name":"17K小说网", "url":"^https://www\\.17k\\.com", "pageElement":".area>.read,.area>.comment", "css":".read_tit,.rightSide{display:none}.readAreaBox{width:auto}", "pageBarText":1 }
大佬就是大佬!调整以后页面漂亮多了,简直比广告过滤还强。油猴脚本用的是 css 语言?
还请问下 github 里范例
{
"name":"xxgame",
"action":0,
"url":"^http://www\\.xxgame\\.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\\.net/chinese/?)(?:\\?page=|$)(\\d*)","$1?page={($2.0||1)+1}"]
}
"action":0 和 "nextLinkByUrl" 是什么意思?我看脚本有点儿复杂,不太明白。
还发现一个 bug,老版本中我记得双击 spacer 会隐藏太极的,好像现在失效了。无论设置 pause 还是 hide,都是暂停翻页效果,不知怎么回事?
action:0代表直接用gm函数获取页面内容,适合大多数静态网页。nextLinkByUrl表示通过页面url而非分析页面来获取下一页,这里后面的参数是正则的匹配项与替换项。
这些我在Github上都有写。
双击隐藏属于可配置项,配置页面第一个多选框就是,勾上就行啦
额,我这边的电脑勾上第一个选项后,双击隐藏依旧没有生效。请再测试下?
此外,实践的时候碰到个技术问题,17K的网页有时用静态网页获取的方式翻页不了。比如:https://www.17k.com/chapter/3381946/45364882.html
从35章往下翻,在第36章会卡住,原因是36章的“下一章”链接指向:javascript:Book.nextChapter(),好像不是静态链接。大佬,这种情况想要翻页怎么办?
使用的规则:
{
"name":"17K小说网",
"url":"^https://www\\.17k\\.com",
"pageElement":".area>.read,.area>.comment",
"css":".read_tit,.rightSide{display:none}.readAreaBox{width:auto}",
"pageBarText":1
}
也是一样的,只不过你需要强行指定下一页,否则这个非静态链接优先级是比评论处的最新评论的优先级低,抓取就会出错。 例如这样
{ "name":"17K小说网", "url":"^https://www\\.17k\\.com", "pageElement":".area>.read,.area>.comment", "css":".read_tit,.rightSide{display:none}.readAreaBox{width:auto}", "pageBarText":1, "nextLink":".nextChapter" }
大佬,复制使用上面的新规则以后,出现了新的问题,有3种情况:
1、假如我从第35章(静态链接)开始往下翻,结果出来是35章、36章、36章、卡住;
(第35章的链接:)https://www.17k.com/chapter/3381946/45364882.html
2、假如我从第36章(非静态链接)开始往下翻,结果出来是36章、37章、38章、39章、40章、卡住,其中,40章又是一个非静态链接,它的“下一章”链接同样是 javascript:Book.nextChapter() 这种情式;
(第36章的链接:)https://www.17k.com/chapter/3381946/45364887.html
3、切换成强制拼接模式,从第35章开始往下翻,结果出来是35章、36章、36章、37章、38章、39章、40章、38章、39章、40章、39章、卡住。
如上所述,因为17k是交替使用静态和动态链接,这时候想要一口气翻到底的话,还能解决吗?
更新下脚本就行了,最新版已经兼容这种情况了。
更高级的用法是使用nextLinkByJs,使用js代码拼接下一页的链接。这个规则我就不写啦。主要思路就是根据它url的规则,https://www.17k.com/chapter/小说ID/章节ID.html,正则提取动态按钮里面的数字拼接到最后,然后返回
很强。这个规则是只针对17k生效吗?还是对类似的网站都会起作用?
更新脚本后重新跑了下,确实可以翻页了,美中不足的是,有些 spacer 的章节标题跟真正的标题差了一章,大佬可以检查一下么?
仍旧从第35章开始:https://www.17k.com/chapter/3381946/45364882.html
大概是37章的标题有问题。
感谢!抓到一只bug,已经修复啦
有关 vip 章节的问题,该问题比较复杂,可能描述得不清楚。请跟随下列动作以重现:
1、点击下面链接打开并解锁17k的 vip 章节,关闭:
https://h5.17k.com/chapter/3381946/45475842.html?hmsr=smss
2、打开电脑网页端的第98章:
https://www.17k.com/chapter/3381946/45475842.html
3、使用滚轮从网页顶部滑动到底部,等待永页机脚本加载,完成后继续滑动至底部,依次进行,大概在104章的时候,加载的页面只有一小段儿(非 vip 内容),并显示“17K小说网 VIP章节, 余下还有xx个段落 ...”
大佬,我想要完整地加载完所有小说内容,这个能解决吗?
我的规则:
{
"name":"17K小说网",
"url":"^https://www\\.17k\\.com",
"pageElement":".Context>.Article",
"css":".infoPath{display:none}",
"pageBarText":1
}
添加“wait”属性就行,规则如下
{ "name":"17K小说网2", "url":"^https://www\\.17k\\.com", "pageElement":"div.content", "pageBarText":1, "action":1, "nextLink":".nextChapter", "wait":"return doc.querySelector('.copy')==null" }
你看我帮你这么多,帮我扩散一下光辉物语的汉化项目呗,朋友
https://greasyfork.org/scripts/442610
ok,以后看到身边有会日语的或是玩这个游戏的人,我会帮忙推广的。
再请教下,两个17k规则能同时运用吗?同时填上两个规则后,之前的免费章节永页机脚本好像失效了。如:第三十五章 初初见你
[
{
"name":"17K小说网_免费章节",
"url":"^https://www\\.17k\\.com",
"pageElement":".area>.read,.area>.comment",
"css":".read_tit,.rightSide{display:none}.readAreaBox{width:auto}",
"pageBarText":1,
"nextLink":".nextChapter"
},
{
"name":"17K小说网_付费章节",
"url":"^https://www\\.17k\\.com",
"pageElement":".Context>.Article",
"pageBarText":1,
"action":1,
"nextLink":".nextChapter",
"wait":"return doc.querySelector('.copy')==null"
}
]
加了个项include,用来匹配规则。需要先更新下脚本再用
[ { "name":"17K小说网_免费章节", "url":"^https://www\\.17k\\.com", "pageElement":".area>.read,.area>.comment", "css":".read_tit,.rightSide{display:none}.readAreaBox{width:auto}", "pageBarText":1, "nextLink":".nextChapter" }, { "name":"17K小说网_付费章节", "url":"^https://www\\.17k\\.com", "pageElement":"div.content", "pageBarText":1, "action":1, "nextLink":".nextChapter", "wait":"return doc.querySelector('.copy')==null", "include":"div.content" } ]
wow,你这几千行的代码,又没有注释,说改就改,一下子就定位到了目标,难以想象。
再问一下大佬,github 里自定义规则的那个框叫什么?xpath 还是 selector?若想要在里面添加多行注释该怎么办?
框里那个就是个JSON而已哈,没有注释功能的,你可以在下面添加属性来做笔记,比如"info1":"这是一个css选择器,其中x代表类名。。。"
这样子。
期待你来为永页机添砖加瓦,可以加上"author":"达圣"属性来提交到github库,这样别人就能用上你贡献的规则啦。
嗯,永页机现行脚本很全面了,平时用的站点差不多都已覆盖,以后有用得着的地方我会报告或者提交个人规则吧。(Google 好像有点儿问题)
经测试,spacer 的章节标题不匹配的现象仍然存在,这次是在 vip 章:风起龙城 第九十八章,注意第一百章的标题。
我的规则:
[
{
"name":"17K小说网_免费章节",
"url":"^https://www\\.17k\\.com",
"pageElement":".area>.read,.area>.comment",
"css":".infoPath,.read_tit,.rightSide,.tuijian{display:none}.readAreaBox{width:auto}",
"pageBarText":1,
"nextLink":".nextChapter",
"annotation":" nextLink 针对17k小说网的非静态目标链接 javascript:Book.nextChapter() "
},
{
"name":"17K小说网_付费章节",
"url":"^https://www\\.17k\\.com",
"pageElement":".Context>.Article",
"pageBarText":1,
"action":1,
"nextLink":".nextChapter",
"wait":"return doc.querySelector('.copy')==null",
"annotation":" wait 属性可以解决付费章节缓冲问题,保证章节全文内容被输出"
}
]
修复啦,又掐死一只bug
感谢大佬,永页机针对17k网站的效果应该挺好了。
再帮忙看看这个:校园花心高手 第294章,有些章节比如295章不能翻页,不知道什么原因?
我的规则:
[
{
"name":"厚海网",
"url":"^http://www\\.houhaiwang\\.com",
"pageElement":".col-a1 > .row-b7"
}
]
需要手动指定下一页
{ "name":"厚海网", "url":"^http://www\\.houhaiwang\\.com", "pageElement":".col-a1 > .row-b7", "nextLink":".col-d3>span>a" }
大佬,请问下,如果没有手动指定 "nextLink",脚本自动找到的元素是什么?为什么有些章节可以?有些就不行呢?
"nextLink":".col-d3>span>a"
因为智能规则基于性能考虑,判断时限制字数长度了,目前是15字符为限,上面那个295章字数正好是16,超出了,所以需要手动指定。
发现 晋江文学城 还没有适配规则,给它补了一个。
{
"name":"晋江文学城",
"url":"^http://www\\.jjwxc\\.net",
"pageElement":"table#oneboolt>tbody>tr>td>.noveltext",
"pageBarText":1,
"commnet_nextLink":"table#oneboolt>tbody>tr>td.noveltitle>span>a | 同时有两个a?怎么写?"
}
如果智能引擎能找到的话,nextLink 省略就行了
由于第14页内容章节被锁,脚本翻页到这里的时候,自动规则没法抓取到第15页的链接,后面内容就不能翻页了。大佬有没有什么好法子跳过去?
康乐天下 第13页(正常章节)
康乐天下 第14页(屏蔽章节)
好办,直接添加 ",#lockpage" 把被锁章节的css选择器也包括进来就行啦
{ "name":"晋江文学城", "url":"^http://www\\.jjwxc\\.net", "pageElement":"table#oneboolt>tbody>tr>td>.noveltext,#lockpage", "pageBarText":1 }
方法大好。但是,测试发现被锁章节是个非静态网页,它会在 10 秒后自动跳转至目录页,导致翻页脚本额外多出一页,并且在 10 秒后无法翻页。
从下面链接开始翻页,只翻一页,并耐心等 10 秒左右,观察后续变化。这种怎办?
康乐天下 第13页
另外,第一个太极图标在这里无法显示,大佬后面修改下。
早上好啊,太极图标在设置里把输入框里的内容清空就可以还原啦。至于你图上的情况,看起来应该是开启了强制拼接导致的,取消强制拼接就行啦。
大佬早,真心给你赞个,果然是开了强制拼接模式,可能是之前调试的时候打开忘关了。所以两个模式的机制是不一样的?我奇怪的是,脚本的大多数规则好像对两者都有效,且效果几乎一样,以致于我都没意识到我还开着强制模式。
再一个问题,由于我习惯看小说看评论,所以我个人的 晋江文学城 规则是这样的:
{
"name":"晋江文学城",
"url":"^http://www\\.jjwxc\\.net",
"pageElement":"table#oneboolt, div.tc, table>tbody>tr>td#comment_list, #lockpage",
"pageBarText":1,
"wait":"return doc.querySelector('.copy')==null"
}
实际呈现的效果是,翻页后的评论框一直是转圈圈状态,但在强制拼接模式下,评论是可见的。不知道为什么?
这样就行啦,其中wait意思是,一直等待直到检测到评论框中的img变成div,或者是章节被锁,才进行提取
{ "name":"晋江文学城", "url":"^http://www\\.jjwxc\\.net", "pageElement":"body>table,div.tc,#lockpage", "pageBarText":1, "action":1, "wait":"return doc.querySelector('#comment_list>div,#lockpage')" }
当然多数情况下,你可以直接添加"wait":"1000" 。代表等待加载,延时1000毫秒再提取
简单,直接改成wait:1000就行啦
{ "name":"晋江文学城", "url":"^http://www\\.jjwxc\\.net", "pageElement":"body>table,div.tc,#lockpage", "pageBarText":1, "action":1, "wait":"1000" }
啊,抱歉抱歉,之前只看到前面那条评论了,wait 的第二种用法被我忽视了,我再试试。
再来一个问题,厚海网 我把它右侧那栏同类热门给 display 掉,然后想调整正文栏的宽度,使用这种规则,但是不成功。
{
"name":"厚海网",
"url":"^http://www\\.houhaiwang\\.com",
"pageElement":".col-a1>.row-b7",
"css":".col-a2{display:none}.col-a1{width:auto}",
"pageBarText":1,
"nextLink":".col-d3>span>a"
}
需要这样写"css":".col-a2{display:none}.cover .ui-35 .col-a1{width:auto}"
或者加上important,不然优先级不够
嗯,优先级问题搞定了。
还想再请教下 晋江 的问题,在使用延时 1000 毫秒的规则抓内容的螩,有些章节评论还没加载出来,就过了一秒,评论自然没有了。当然,可以调 wait 的时间,但这样显得有点呆。所以想问下,有没有一个判断机制,首先是用 "wait":"return doc.querySelector('#comment_list>div,#lockpage')"
这个条件触发,超时 10 秒后如无内容就通过 "wait":"1000"
来触发。这样是不是好点?
基于如下规则:
{
"name":"晋江文学城",
"url":"^http://www\\.jjwxc\\.net",
"pageElement":"body>table,div.tc,#lockpage",
"pageBarText":1,
"action":1,
"wait":"return doc.querySelector('#comment_list>div,#lockpage')"
}
上面只是为了方便你以后复用到其他网站才这样写的。因为觉得如果加入代码部分对多数用户来说就太复杂了。如果想要完美,可以反向判断。例如
{ "name":"晋江文学城", "url":"^http://www\\.jjwxc\\.net", "pageElement":"body>table,div.tc,#lockpage", "pageBarText":1, "action":1, "wait":"return !doc.querySelector('#comment_list>img')" }
看样子是网络出错了。我看了下,这个站的正文是静态的,所以一般不可能有这样一个瞬间,正好只加载了一行正文,应该是下一页只加载了一半连接就中断了。
也许是触发了这个站的反cc所以连接被强行断开了?
如果是这样的话,可以添加一个sleep属性,限制翻页速度,例如
{ "name":"晋江文学城", "url":"^http://www\\.jjwxc\\.net", "pageElement":"body>table,div.tc,#lockpage", "pageBarText":1, "action":1, "wait":"return !doc.querySelector('#comment_list>img')", "sleep":1000 }
不过我这边尝试用晋江文学城的《康乐天下》翻了50页也没有触发限制,也不能确定就是这个原因。
上面问题翻篇吧。我尝试在 哈西文学网 跑脚本,有新问题。
首先,使用 css 语法,规则如下:
{
"name":"哈西文学网",
"url":"^https://www\\.haxi88\\.com",
"type":1,
"pageElement":"div#BookCon",
"pageBarText":1,
"action":1
}
它可以读取标题和正文内容。我把前面规则换成 xpath 语句:
{
"name":"哈西文学网",
"url":"^https://www\\.haxi88\\.com",
"type":0,
"nextLink":"//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]|//a[contains(text(),'下一章')]",
"pageElement":"div[@id='BookCon']",
"pageBarText":1
}
action=0
的时候翻页速度快一些。"nextLink":"//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]|//a[contains(text(),'下一章')]"
这一段在 css 的等价描述是怎样的?提前感谢大佬答疑了,拜谢。
这个规则的主体框架写错了。xpath 需要这样写//div[@id='BookCon']
,必须要指定根目录才行。
至于 xpath 的 contains 是无法用 css selector 模拟的,所以我才会添加 xpath 和 css 两种抓取方式
action:1的时候会模拟页面,使得一些必须执行js代码才能显示的动态赋值元素(你可以理解为上面的评论那一种)被抓取到,所以速度不如action:0
还有个疑问,正确用法是 "sleep":1000
还是 "sleep":"1000"
?
因为有默认智能翻页存在呀,无规则下也是能驱动的。
至于晋江文学城的问题,我猜测你本地已经有多个重复的规则了,所以新规则被旧规则抢占了。你检查一下你的自定义规则框试试?
"sleep":1000 与 "sleep":"1000" 都是可以的,我做过兼容,效果也一样
跟你那边的结果不一样。只保留晋江规则、只运行永页机脚本,只开油猴扩展,我这儿仍然有断章问题,它是概率事件,有时候也能翻到50章,有时候就能看到会有章节只翻了几行卡住。
再问个问题,完全没思路。纵横中文网手机端 能编写规则吗?永页机的自动规则没有普及到这里,自己写的话 nextLink 又无从下手,犯难。
这个规则需要配合最新版脚本使用
{ "name":"纵横中文网手机版", "url":"^https://m\\.zongheng\\.com/h5/chapter", "type":0, "pageElement":"//div[@class='title']|//div[@class='text']", "nextLink":"//div[contains(text(),'下一页')]|//div[contains(text(),'下一章')]", "wait":500, "css":".text>div,#fukerr_bot,#fukerr{display:none!important}", "pageBarText":1 }
感谢大佬,完美运行。这样看起来 xpath 对下一章的寻找好像更在行啊。
这里我还有个疑问:为什么一定要添上 "wait":500
这一项?之前我也没想过需要 wait 属性,看规则好像去掉它未尝不可,但实际上删掉它永页机就翻不动了。
因为永页机需要遍历规则,有些页面逻辑是页面加载完毕500ms执行的,有些页面逻辑是页面加载完毕5000ms执行的,永页机不可能一直等下去。如果没有wait,检测不到主体框架就会跳过当前规则了。
所以这一类页面加载完毕后框架还不存在的情况就需要wait了。
换句话说,这个网站要抓取和拼接的元素是动态的?点击下一章瞬间,div.text 还不存在?等待 500 毫秒后,页面才加载出来的它?这样理解对吗?
但是现在的网速这么快,加载时间极短,甚至察觉不到它是需要有一个动态加载过程的,怎么分辨它是静态网页或是需要有一定时间才加载完的动态网页呢?(换句话说就是我什么时候知道要加 wait 属性呢?)
最简单的方法是ctrl+U,打开页面源代码,查看里面是否有框架。如果没有就是动态载入的。
当然你也可以先尝试翻页,抓不到再添加wait
好了,我的问题到这儿也告一段落,应该也足够一般使用了。
谢谢大佬这几天对菜鸟的耐心教学,真是个很好很好的好人,无以为报,有用得上的地方尽管叫我。
ps:大佬,你没想过把你的永页机规则写一个更详细直白的 tutorial 吗?这么强大的脚本值得被更多人使用,我想以后总有一天他们会需要用到这份规则的规则的。
我精力有限,而且有点不擅长写文档,虽然我确实有这个意向,也确实写了一个文档。
但一些我闭门造车构造的流程未必能整理得像商业作品一样。写出来也不一定通俗易懂。所以我没继续把精力放在文档上,而是希望用户能在我写的范例中找到类似的,然后直接copy。
想向大佬提个请求。这个脚本能不能设置一个接口,让用户可以直接选择网页的拼接起点和终点?
比如说,像这个17K的网址:https://www.17k.com/chapter/3381946/45309702.html
现行脚本功能是它会自动智能拼接小说正文内容,但如果我想保留小说标题和正文后的评论的话,有没有办法呢?(不想改油猴脚本的代码)