xiaooooooo 发表于 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这招我觉得还不错

cxxjackie 发表于 2023-7-12 23:30:36

xiaooooooo 发表于 2023-7-12 22:31
的确是预览。不过我技术还没到位先凑合着用

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


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

xiaooooooo 发表于 2023-7-13 00:25:49

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

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

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

cxxjackie 发表于 2023-7-13 23:38:05

xiaooooooo 发表于 2023-7-13 00:25
大佬有没有这种油猴脚本的例子可以让我学习一下?

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

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

xiaooooooo 发表于 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里面无穷的翻找……

xiaooooooo 发表于 2023-7-19 23:27:28

yang10560 发表于 2023-6-16 22:03


大佬 我可不可以追问一下
这招是不是只对a标签有效?有的页面翻页是点一下li标签或者其他什么td标签之类的 似乎.click()就不行了?
页: 1 2 3 [4]
查看完整版本: 求问大家我想实现网页自动翻页的功能该如何操作?