如何获取获取服务器脚本中的list数组?
本帖最后由 gues1688 于 2024-10-30 15:57 编辑网站,https://favor.fund.eastmoney.com/
有如下脚本(片段):
```
<script type="text/template" id="templ_fundlist_kfs">
<tbody>
<% for(var j=0,len=list.length;j<len;j++){ %>
<tr class="<%=j%2==1?'even':''%> fund-row" data-settop="<%=list.setTop%>"
data-fundtype="<%=list.FUNDTYPE%>" data-fundcode="<%=list.FCODE%>"
data-fundname="<%=list.SHORTNAME%>">
......
</script>
```
我想获取服务器脚本中的list数组,有什么办法吗?
谢谢! gues1688 发表于 2024-10-31 12:54
大佬的这段回复,信息量超大,我得认真学习、反复琢磨。
初步看来,似乎分两种情况,登陆和不登陆,处理 ...
```js
// ==UserScript==
// @name New Userscript
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @descriptiontry to take over the world!
// @author You
// @match https://favor.fund.eastmoney.com/
// @run-at document-end
// ==/UserScript==
const wrap = ejs.render;
ejs.render = function (a, b, c) {
console.log(a, b, c);
return wrap.apply(this, );
}
```
这样就可以劫持到数据了,判断一下入参,拿你想拿的 看起来是通过这个接口获取的数据,调用这个接口就好了
```bash
curl 'https://api.fund.eastmoney.com/favor/GetFundsInfo?' \
-H 'Accept: application/json, text/javascript, */*; q=0.01' \
-H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
-H 'Connection: keep-alive' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
-H 'Origin: https://favor.fund.eastmoney.com' \
-H 'Referer: https://favor.fund.eastmoney.com/' \
--data-raw 'fcodes='
``` 王一之 发表于 2024-10-30 16:06
看起来是通过这个接口获取的数据,调用这个接口就好了
```bash
谢谢!
不是这个接口,这个接口,fcodes= 本身就需要引用这个list gues1688 发表于 2024-10-30 16:54
谢谢!
不是这个接口,这个接口,fcodes= 本身就需要引用这个list
你想获取的数据是哪些呢?
网站里面我没有看到你的脚本片段 王一之 发表于 2024-10-30 17:08
你想获取的数据是哪些呢?
网站里面我没有看到你的脚本片段
可能要先自选一些基金吧,比如收藏下面这些基金
006733
013923
019072
012363
007531
400015
015178
013331
015046
002190
010685
005491
然后,在控制台,输入:
document.querySelectorAll('#templ_fundlist_kfs'),可看到脚本片段,比较长,我节选并格式化了部分片段。
想要获取脚本中的 list 数组 gues1688 发表于 2024-10-30 17:19
可能要先自选一些基金吧,比如收藏下面这些基金
006733
013923
如果自选的基金,不超过10个,自选列表,似乎保存在 cookie 中,超过10个的话,不知道如何获取。
如果在这个网站平台有注册的话,有个接口可以获取自选列表,
https://fundfavorapi.eastmoney.com/favor/fcode/get2?passportid=......
但获取的自选列表跟 list 顺序
也就是跟网站显示的顺序是不一样的。
gues1688 发表于 2024-10-30 17:26
如果自选的基金,不超过10个,自选列表,似乎保存在 cookie 中,超过10个的话,不知道如何获取。
如果在 ...
是要获取自选基金?
实在不行可以这样去获取
document.querySelectorAll('.em-myfavor-table ')
其他数据我看好像是存cookie里面的,可能先通过api获取一次列表,再通过cookie匹配id提取出来并按id排序这样? 王一之 发表于 2024-10-30 21:25
是要获取自选基金?
实在不行可以这样去获取
嗯,是要获取自选开放式基金列表,另有用途。
通过网页html获取的代码,我知道,大致如下:
let arr = [];
document.querySelectorAll('#kfsTable a.code').forEach(x => arr.push(x.innerText))
console.log(JSON.stringify(arr, null, 4));
主要目的,如1楼所述,是想知道【如何获取获取网页脚本中的list数组?】 gues1688 发表于 2024-10-30 22:45
嗯,是要获取自选开放式基金列表,另有用途。
通过网页html获取的代码,我知道,大致如下:
let arr = [] ...
说实话,知道获取那个没什么一样,知道这个东西是怎么得来的就行了
我简单看了一下,这个网页也是通过调用`https://api.fund.eastmoney.com/favor/GetFundsInfo?`这个API获取到数据,然后根据cookie里的数据处理得到的。具体的逻辑哥哥还是要搜索一下关键字`url: apiUrl.GetFundsInfo,`,然后去调试一下。
!(data/attachment/forum/202410/30/232253s4y9bwr3eo3j3a8e.png)
var t=I()里面核心的代码就是下面这个,从cookie里面获取到Eastmoney_Fund内容。
```js
utils.getCookie("Eastmoney_Fund");
```
处理完成之后赋值给u.Data,然后这时候的KFS就只有自选的几个了
!(data/attachment/forum/202410/30/232632offz5c41g1hndi58.png)
后面再跟进`z`里面,可以看到渲染逻辑了
!(data/attachment/forum/202410/30/232838rc0s0ssc0xe0vufz.png)
至于想拿到list,就考虑劫持一下`ejs.render`这个方法,从参数里面拿到`list`了,不过说实话,没必要,已经知道这个逻辑了,直接劫持请求,自己处理一下可能更好点
页:
[1]
2