xiaooooooo 发表于 2023-6-20 13:59:47

cxxjackie 发表于 2023-6-17 23:14
反复横跳的主要原因是while(true)死循环了,油猴本身就会在加载新页面时重新执行脚本,不需要写循环去反复 ...

更新一版 我后来调试好啦
用了大佬之前传授的调试代码在控制台打印父级

(function() {
    'use strict';


    elmGetter.selector($);
    elmGetter.selector('css');
    elmGetter.each('div.atomic_table_con', document.body, company_name => {
    console.log(company_name.cloneNode(true));
    var dataList = [];
    var collection_1 = $(company_name).find('div.static_con_outer').find('tbody tr')
    var collection_2 = $(company_name).find('div.scroll_con_outer').find('tbody tr')
    for (var i=0; i<collection_1.length; i++){
            var xuhao = $(collection_1).find('td').eq(0).find('div').text();
            var daima = $(collection_1).find('td').eq(2).find('div').text();
            var mingcheng = $(collection_1).find('td').eq(3).find('div a').text();
            var xianjia = $(collection_2).find('td').eq(0).find('div').text();
            var zhangdiefu = $(collection_2).find('td').eq(1).find('div').text();
            var zongshizhi = $(collection_2).find('td').eq(2).find('div a').text();
            var liutongshizhi = $(collection_2).find('td').eq(3).find('div a').text();
            var suoshuhangye = $(collection_2).find('td').eq(4).find('div span a').text();
            dataList.push({
                'xuhao': xuhao,
                'daima': daima,
                'mingcheng': mingcheng,
                'xianjia': xianjia,
                'zhangdiefu': zhangdiefu,
                'zongshizhi': zongshizhi,
                'liutongshizhi': liutongshizhi,
                'suoshuhangye': suoshuhangye
            })


    }
      console.log(dataList);
});

cxxjackie 发表于 2023-6-20 21:07:20

xiaooooooo 发表于 2023-6-20 13:59
更新一版 我后来调试好啦
用了大佬之前传授的调试代码在控制台打印父级



也可以把两个数组的定义放到回调函数之外,然后在第二个回调中通过下标获取第一个数组中的对象,再用Object.assign合并。

xiaooooooo 发表于 2023-6-20 23:02:22

cxxjackie 发表于 2023-6-20 21:07
也可以把两个数组的定义放到回调函数之外,然后在第二个回调中通过下标获取第一个数组中的对象,再用Obje ...

不行的 两个数组不能分步获取 我试过这个数组合并的操作,结果是左右数组对不上
可能是由于元素插入没有按照顺序来 数组其实是乱序的

xiaooooooo 发表于 2023-6-20 23:03:21

cxxjackie 发表于 2023-6-20 21:07
也可以把两个数组的定义放到回调函数之外,然后在第二个回调中通过下标获取第一个数组中的对象,再用Obje ...

哦你说了是下标获取 这招我还不会 拿不到下标{:4_115:}

cxxjackie 发表于 2023-6-20 23:35:44

xiaooooooo 发表于 2023-6-20 23:03
哦你说了是下标获取 这招我还不会 拿不到下标

逐项合并,不要整个数组合并,因为2个数组的下标是一一对应的,以第二个数组当前的长度为参考即可:
const dataList = [];
const dataList2 = [];
elmGetter.each('...', el => {
    dataList.push(...);
});
elmGetter.each('...', el => {
    dataList2.push(...);
    const index = dataList2.length - 1;
    Object.assign(dataList, dataList2);
    console.log(dataList);
});

xiaooooooo 发表于 2023-6-28 22:52:01

cxxjackie 发表于 2023-6-20 23:35
逐项合并,不要整个数组合并,因为2个数组的下标是一一对应的,以第二个数组当前的长度为参考即可:
...

谢谢大佬 这招我试验了一下可行
网上我查了一下 这个是把两个对象的属性拼接在一起了 有点像python的zip函数
Object.assign(dataList, dataList2);

xiaooooooo 发表于 2023-6-28 23:02:48

cxxjackie 发表于 2023-6-20 23:35
逐项合并,不要整个数组合并,因为2个数组的下标是一一对应的,以第二个数组当前的长度为参考即可:
...

大佬 我可不可以请教一个别人脚本的问题?就是我在网上找到一个叫东方永页机的脚本,链接如下:
https://greasyfork.org/zh-CN/scripts/438684-pagetual
我想要学习他把页面预加载然后拼接在下方的方法,可否请你指点我一下?

不需要做到他那样的万能识别,只需要对当前页面上的某一个跳转按钮进行预加载就行 比方说网页上常用的【详情】按钮

cxxjackie 发表于 2023-6-29 22:26:22

xiaooooooo 发表于 2023-6-28 23:02
大佬 我可不可以请教一个别人脚本的问题?就是我在网上找到一个叫东方永页机的脚本,链接如下:
https:// ...

用ajax请求下一页的数据,分析并截取需要的部分,然后拼接到当前页面,主要涉及DOM操作。偷懒一点可以用iframe,截取指定位置的内容再拼接,这个要注意脚本死循环的问题,还有部分网站不支持这么搞。这些做法的开销都比较大,相当于后台打开了多个完整页面来截取内容,理想的做法是请求json数据,这个要看网站有没有相关API,得自己抓包分析。还有假如网站本身有加载下一页的算法,可以尝试对其进行注入和改造,需要一定的逆向技术。

xiaooooooo 发表于 2023-7-11 01:04:03

本帖最后由 xiaooooooo 于 2023-7-11 01:41 编辑

cxxjackie 发表于 2023-6-29 22:26
用ajax请求下一页的数据,分析并截取需要的部分,然后拼接到当前页面,主要涉及DOM操作。偷懒一点可以用i ...
谢大佬指点 我用iframe调通了 :)

// @match      https://wenshu.court.gov.cn/*
// @require      http://cdn.bootcss.com/jquery/1.11.2/jquery.js
// @require      https://scriptcat.org/lib/513/2.0.0/ElementGetter.js
// @grant      GM_xmlhttpRequest

// ==/UserScript==


(function() {
    'use strict';


    elmGetter.selector($);
    elmGetter.each('#_view_1545184311000 div.LM_list', company_name => {
      console.log(company_name);
      console.log('page is fully loaded');
      console.log('xx');
      var dataList = [];
      for (var i=0; i<company_name.length; i++){
            var casename = $(company_name).find('a.caseName').text();
            var casecourt = $(company_name).find('span.slfyName').text();
            var casenumber = $(company_name).find('span.ah').text();
            var judgedate = $(company_name).find('span.cprq').text();
            var casecontent = $(company_name).find('p').text();
            var originalurl = $(company_name).find('a.caseName').attr('href');
            var caseurl = originalurl.replace('..','https://wenshu.court.gov.cn/website/wenshu');

            // 如果不存在,则创建一个 iframe
            var iframe = document.createElement('iframe');
            //iframe.sandbox = 'allow-same-origin allow-scripts allow-popups allow-forms';
            iframe.id = 'Autopage_iframe';
            iframe.src = caseurl;

            document.documentElement.appendChild(document.createElement('style')).textContent = 'iframe#Autopage_iframe {position: absolute !important; top: -9999px !important; left: -9999px !important; width: 100% !important; height: 100% !important; border: none !important; z-index: -999 !important;}';

            company_name.appendChild(iframe);


            dataList.push({
                'casename': casename,
                'casecourt': casecourt,
                'casenumber': casenumber,
                'judgedate': judgedate,
                'casecontent':casecontent,
                'caseurl':caseurl
            })


      }
      console.log(dataList);

   
    });

    // Your code here...
})();




cxxjackie 发表于 2023-7-12 22:21:32

xiaooooooo 发表于 2023-7-11 01:04
谢大佬指点 我用iframe调通了 :)

// @match      https://wenshu.court.gov.cn/*


你这个好像不是翻页,而是预览内容,翻页应该在页面中有现成算法可以调用的,就是比较难。
页: 1 2 [3] 4
查看完整版本: 求问大家我想实现网页自动翻页的功能该如何操作?