Pagetual

Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule.

< Feedback on Pagetual

Review: Good - script works

§
Posted: 17. 09. 2022

请问如何对使用pjax的网站编写规则,一般规则对这类网站很容易出现:切换帖子/主题后,上下页不一致的问题。 之前使用的autopager的解决方式是提供一个设置函数fun.isurlC()让脚本来监测网址的变化。
另一个问题是怎么让翻页bar(页码条)也随着自动翻页的动作改变,比如到最后一页后,bar的位置上会显示的是最后一页的bar,有点强迫症hh。
最后十分感谢作者的工作,脚本非常好用。

hoothinAuthor
§
Posted: 17. 09. 2022

谢谢,你的喜马拉雅下载器也很好用。

pjax的站给个例子看看,目前只监听了pushState,如果是通过pushState变更网址,会自动重置,不需要手动监听。

hoothinAuthor
§
Posted: 17. 09. 2022

暂且更了一版,给replaceState也加了个监听,你试试看。
关于页码条的问题,你指的是页面自带的吗?如果是的话,可以编辑pageElement,把页码条包括在内。

§
Posted: 17. 09. 2022
Edited: 17. 09. 2022

页码条Super_preloaderPlus_one能用replaceE替换
不过不是很完美有时会导致翻页失效或替换失败
自动无缝翻页的replaceE就能完美办到
因为翻下一页的基准就是替换页码条来重新取得下一页的连接

如果用pageElement会包含很多页码条
有人就喜欢翻页只增加主体内容不含增加页码条
页码条用替换的或根本不用换

§
Posted: 17. 09. 2022
Edited: 17. 09. 2022

谢谢,你的喜马拉雅下载器也很好用。

pjax的站给个例子看看,目前只监听了pushState,如果是通过pushState变更网址,会自动重置,不需要手动监听。

哈哈,你认错人了,我刚刚接触脚本这方面的知识,谢谢你的回答。
我使用了你提供的最新版,发现目前最新版(1.9.31.20) 有bug: 在自定义规则的页面会无限刷新。 除此以外,还是会出现上下页不一致的问题,我在代码增加了debug信息,发现脚本其实已经侦测到了urlchanged的信息,但urlchanged前的页面元素不知道是什么原因没有被清除。
具体网址因为是学校的论坛,需要账号才能登录,网址和账号已经电邮到你的邮箱。
页码条的问题跟@tony0809说的一样:“页码条用替换的或根本不用换”,也就是希望能够在不额外增加页码条的同时,使唯一的页码条能跟随翻页进度变化(或替换),pageElement包括页码条后会让每页都出现一个页码条,页与页之间的距离会宽很多。

hoothinAuthor
§
Posted: 17. 09. 2022

好的,我待会debug一下。估计是插入点不在清理范围内,我想想解决方案。
关于页码条,你的描述我理解了。但为什么不直接用永页机自带的页码条呢?真实页码数可以用pageBarNum设定。
直接替换页内的页码条的话,有静态url的还好,如果页码条上绑定了事件,换出来将会丢失事件。
是认错人了,我看后台你的ip上绑了很多账号,估计都是你们学校的。

hoothinAuthor
§
Posted: 18. 09. 2022
Edited: 18. 09. 2022

关于北邮论坛,这个还不算是pjax,我看了下,它没有用到相关方法,只是拦截了a标签后更改了hash。所以我新增了一个属性listenHashChange,用来监听hash变更。规则如下

    {
        "name": "北邮人论坛-北邮校园",
        "url": "^https://bbs\\.byr\\.cn",
        "listenHashChange": true,
        "pageElement": "section#main.corner > section#body>.b-content",
        "action": 1
    }

关于元素替换,新增了一个replaceElement,支持选择器、xpath或数组,例如replaceElement: "#page" 或者 replaceElement:["#id1","#id2"]

§
Posted: 18. 09. 2022
Edited: 18. 09. 2022

哦哦,我应该记错了论坛,感谢replaceElement是可用的,它能够替换掉页面的页码条。但我测试了一个同一页有两个页码条的网站,它们分别在顶部和底部,class相同都为".paging",脚本只替换了顶部的页码条,之后我阅读代码发现只替换了选择器选择到的第一个元素,我想如果替换选择器选择到的所有元素会更方便些,这样不需要写一些冗余的selector。 replaceElement中的处理代码替换成了如下的代码后,脚本能替换掉所有选择到的页码条。

replaceElementSel.forEach(sel => {
    let pageEles= getAllElements(sel, document);
    let replaceEles= getAllElements(sel, doc);
    if (pageEles.length != 0 && replaceEles.length != 0 && pageEles.length === replaceEles.length) {
        for (let i = 0; i < pageEles.length; i++) {
        pageEles[i].parentNode.replaceChild(replaceEles[i], pageEles[i]);
        }
    }
});

上下页不一致的问题目前还存在,出问题的截图电邮过来了,感谢。

hoothinAuthor
§
Posted: 18. 09. 2022
Edited: 18. 09. 2022

我确实想过批量替换,但是适用范围太小,如果定位到的是两个容器的子元素,而数量不一,替换就没法进行。也有可能下一页某个元素被隐藏了,而实际我希望其他剩余的元素不受影响继续替换,此时就无法达成目的。

因此最后我选择了精确匹配+数组的方式。

如果要替换的元素过多,则可以考虑更改为父元素的选择器。

§
Posted: 18. 09. 2022
Edited: 18. 09. 2022

我理解你的设计思路,但适用范围其实不小的,对于天涯等论坛类网站来说,它们一般在帖子内会有上下两个页码条,它们的selector也通常一致。 相反来说“如果定位到的是两个容器的子元素,而数量不一致”的情况倒是很少出现。 是否可以使用批量匹配+数组的方式,当需要精确匹配时再在selector中使用nth-of-type等伪类选择器;实际上现在做的便是对selector:nth-of-type(1)的元素进行了替换。因为使用批量匹配来实现精确匹配很方便,但反过来却很麻烦。
不过这个倒影响不大,具体还是根据你的思路来,最后十分感谢你的工作和极速回复^-^.

hoothinAuthor
§
Posted: 18. 09. 2022

最终还是改成批量替换了,因为我考虑了下,如果是精确匹配,定位到的元素数量总是1,与现在没有任何区别,不会有什么大影响。如果非精确匹配,那有问题就随它去吧😀

§
Posted: 18. 09. 2022
Edited: 18. 09. 2022

是的随它去😄, 目前在北邮论坛上还有一个小问题是,在帖子内翻页后需要多次点击(大概等于翻页的次数)浏览器的回退键,才能够退出帖子到上一层,设置history=0后似乎也没有作用。

hoothinAuthor
§
Posted: 18. 09. 2022

这个问题我在chrome下似乎没有复现,你现下用的是什么环境?排除其他扩展的影响了吗?

Post reply

Sign in to post a reply.