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/*
你这个好像不是翻页,而是预览内容,翻页应该在页面中有现成算法可以调用的,就是比较难。