上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
1234
返回列表 发新帖
楼主: xiaooooooo - 

求问大家我想实现网页自动翻页的功能该如何操作?

[复制链接]
  • TA的每日心情
    开心
    2023-7-13 09:56
  • 签到天数: 2 天

    [LV.1]初来乍到

    9

    主题

    93

    回帖

    120

    积分

    中级工程师

    积分
    120

    油中2周年油中3周年

    发表于 2023-7-12 22:31:48 | 显示全部楼层
    cxxjackie 发表于 2023-7-12 22:21
    你这个好像不是翻页,而是预览内容,翻页应该在页面中有现成算法可以调用的,就是比较难。 ...

    的确是预览。不过我技术还没到位先凑合着用

    你指的算法是这种通过ajax访问的方法吗?

    function getPageE_(url, type = '', method = 'GET', data = '', type2) {
            let mimeType,accept;
            switch (type) {
                case 'json':
                    accept = 'application/json'; mimeType = 'application/json; charset=' + (document.characterSet||document.charset||document.inputEncoding); break;
                case 'text':
                    accept = 'text/plain'; mimeType = 'text/plain; charset=' + (document.characterSet||document.charset||document.inputEncoding); break;
                default:
                    accept = 'text/html,application/xhtml+xml,application/xml'; mimeType = 'text/html; charset=' + (document.characterSet||document.charset||document.inputEncoding);
            }

            GM_xmlhttpRequest({
                url: url,
                method: method,
                data: data,
                responseType: type,
                overrideMimeType: mimeType,
                headers: {
                    'Referer': (curSite.noReferer === true) ? null:location.href,
                    'Content-Type': (method === 'POST') ? 'application/x-www-form-urlencoded':'',
                    'User-Agent': navigator.userAgent,
                    'Accept': accept
                },
                timeout: 10000,
                onload: function (response) {
                    try {
                        //console.log('最终 URL:' + response.finalUrl, '返回内容:' + response.responseText)
                        switch (type) {
                            case 'json':
                                curSite.pager.insertE(response.response, type2);
                                break;
                            case 'text':
                                curSite.pager.insertE(response.responseText, type2)
                                break;
                            default:
                                curSite.pager.insertE(createDocumentByString(response.responseText), type2)
                        }
                    } catch (e) {
                        console.log(e);
                    }
                },
                onerror: function (response) {
                    setTimeout(function(){curSite.pageUrl = '';}, 3000)
                    console.log('URL:' + url, response)
                    GM_notification({text: '❌ 获取下一页失败,可 3 秒后再次滚动网页重试(或尝试刷新网页)...', timeout: 5000});
                },
                ontimeout: function (response) {
                    setTimeout(function(){curSite.pageUrl = '';}, 3000)
                    console.log('URL:' + url, response)
                    GM_notification({text: '❌ 获取下一页超时,可 3 秒后再次滚动网页重试(或尝试刷新网页)...', timeout: 5000});
                }
            });
        }

    用这个方法我解决不了有的网站cookie加密 以及服务器返回的response加密的问题 所以iframe这招我觉得还不错
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-7-12 23:30:36 | 显示全部楼层
    xiaooooooo 发表于 2023-7-12 22:31
    的确是预览。不过我技术还没到位先凑合着用

    你指的算法是这种通过ajax访问的方法吗?

    不是,是指页面的翻页也是通过函数实现的,通过逆向技术拿到函数引用,就可以在脚本中直接调用函数来翻页,然后原有的翻页会清除上一页内容,就可以改造相关函数,使其保留内容。这种做法不具备通用性,但应该是性能最好的方案(除非原网站就是一坨)。iframe的做法除了性能不行,有些网站也会限制自己不允许被iframe嵌套,还有就是只适用于get请求,因为iframe是通过url来获取内容的,post请求的url不会改变,所以只能获取到第一页的数据。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-7-13 09:56
  • 签到天数: 2 天

    [LV.1]初来乍到

    9

    主题

    93

    回帖

    120

    积分

    中级工程师

    积分
    120

    油中2周年油中3周年

    发表于 2023-7-13 00:25:49 | 显示全部楼层
    cxxjackie 发表于 2023-7-12 23:30
    不是,是指页面的翻页也是通过函数实现的,通过逆向技术拿到函数引用,就可以在脚本中直接调用函数来翻页 ...

    大佬有没有这种油猴脚本的例子可以让我学习一下?

    我会一点点js逆向,但我只会下断点把加密的函数整个扣出来,然后把密文传进去解密,好像和你说的不是同一个东西
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-7-13 23:38:05 | 显示全部楼层
    xiaooooooo 发表于 2023-7-13 00:25
    大佬有没有这种油猴脚本的例子可以让我学习一下?

    我会一点点js逆向,但我只会下断点把加密的函数整个扣 ...

    https://bbs.tampermonkey.net.cn/thread-1080-1-1.html
    以前写的一篇文章,可以参考下,页面可能已经变了,但思路是差不多的。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-7-13 09:56
  • 签到天数: 2 天

    [LV.1]初来乍到

    9

    主题

    93

    回帖

    120

    积分

    中级工程师

    积分
    120

    油中2周年油中3周年

    发表于 2023-7-14 16:47:42 | 显示全部楼层
    cxxjackie 发表于 2023-7-13 23:38
    https://bbs.tampermonkey.net.cn/thread-1080-1-1.html
    以前写的一篇文章,可以参考下,页面可能已经变 ...

    已拜读。我看到你跟栈找到copy调用的方法,然后直接修改参数值来实现效果。
    iframe的缺点你说的没错,但是性能目前不是我重视的方面,逆向找到这个方法并直接调用对我来说更痛苦一些(扶额)
    混淆倒是还好,就怕像瑞数,akamai,px那种无限debugger,还有在webpack里面无穷的翻找……
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-7-13 09:56
  • 签到天数: 2 天

    [LV.1]初来乍到

    9

    主题

    93

    回帖

    120

    积分

    中级工程师

    积分
    120

    油中2周年油中3周年

    发表于 2023-7-19 23:27:28 | 显示全部楼层

    大佬 我可不可以追问一下
    这招是不是只对a标签有效?有的页面翻页是点一下li标签或者其他什么td标签之类的 似乎.click()就不行了?
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表