xiaooooooo 发表于 2024-1-19 23:49:48

关于elmGetter库的使用问题,同类的元素只能获取到一部分

请教各位大佬,我在使用elmGetter库的each方法的时候,代码当中对于css selector的路径经过了反复确认,同时也用xpath的方法验证过可以选中我要的元素。但是在代码运行过程中,只能获取到一部分元素,比如列表的长度有20个,我只能获取到6个左右。不知是什么原因,请指教。
!(data/attachment/forum/202401/19/234823gi0pgv3wftfwv8wi.png)
我想要获取的元素如图所示,是每个a标签的href属性。
可用示例链接进行尝试。
[商家列表](https://shopsearch.taobao.com/search?q=%E6%B7%98%E5%AE%9D%E5%A5%B3%E4%BA%BA&js=1&initiative_id=staobaoz_20240118&ie=utf8&isb=0&shop_type=&ratesum=&loc=%E4%B8%8A%E6%B5%B7)

王一之 发表于 2024-1-20 10:55:32

我的代码如下,好像并没有问题

```js
    elmGetter.selector($);
    elmGetter.each('ul#list-container li .list-info a.shop-name', company_name => {
      console.log("company_name", company_name.innerText);
    });
```

xiaooooooo 发表于 2024-1-20 14:43:54

王一之 发表于 2024-1-20 10:55
我的代码如下,好像并没有问题

```js


感谢大佬 我试了一下您的代码 可以获得完整数据。然后我又回头试了我的代码也是可以的 问题是出在这个页面是“懒加载”的 需要鼠标滚到最底下才能获得完整数据

王一之 发表于 2024-1-20 16:03:32

xiaooooooo 发表于 2024-1-20 14:43
感谢大佬 我试了一下您的代码 可以获得完整数据。然后我又回头试了我的代码也是可以的 问题是出在这个页 ...

模拟下滚动?

cxxjackie 发表于 2024-1-20 22:24:13

xiaooooooo 发表于 2024-1-20 14:43
感谢大佬 我试了一下您的代码 可以获得完整数据。然后我又回头试了我的代码也是可以的 问题是出在这个页 ...

这就不属于库的问题了,懒加载你可以尝试触发一下他的scroll事件。

xiaooooooo 发表于 2024-1-21 23:03:08

王一之 发表于 2024-1-20 16:03
模拟下滚动?

// 获取页面高度
const pageHeight = document.documentElement.scrollHeight;
// 设置滚动距离
window.scrollTo(0, pageHeight);

噫 我把这段代码放进去没有效果 不知为啥{:4_89:}

李恒道 发表于 2024-1-22 13:36:23

xiaooooooo 发表于 2024-1-21 23:03
// 获取页面高度
const pageHeight = document.documentElement.scrollHeight;
// 设置滚动距离


她是渐进式的加载
应该是通过观察API监听的
要逐步滚动到尾部的

也可以考虑找注入点
触发的时候属性改变了,直接打断点堆栈回溯找到了
剩下的就是慢慢跟了

```js
    function c(b, c, f) {
      var j, l, d, f = i.merge(f), c = a(f, c);
      j = k.getDomEventObservablesHolder(b, 1);
      if (!(d = j.handle)) {
            d = j.handle = function(a) {
                var b = a.type
                  , c = d.currentTarget;
                if (!(k.triggeredEvent === b || typeof KISSY === "undefined"))
                  if (b = k.getDomEventObservable(c, b)) {
                        a.currentTarget = c;
                        a = new h(a);
                        return b.notify(a)
                  }
            }
            ;
            d.currentTarget = b
      }
      if (!(l = j.observables))
            l = j.observables = {};
      j = l;
      if (!j) {
            j = l = new k({
                type: c,
                currentTarget: b
            });
            j.setup()
      }
      j.on(f);
      b = null
    }
```

xiaooooooo 发表于 2024-1-22 22:33:43

李恒道 发表于 2024-1-22 13:36
她是渐进式的加载
应该是通过观察API监听的
要逐步滚动到尾部的


!(data/attachment/forum/202401/22/222625tykmc2y2rmgmp216.png)

如果是要使用跟踪堆栈的方法,我就干脆直接跳过这个scroll动作,直接通过接口拿到数据更快了。
[店铺列表接口](https://shopsearch.taobao.com/search?data-key=s&data-value=40&ajax=true&_ksTS=1705932538440_615&callback=jsonp616&ie=utf8&initiative_id=staobaoz_20240121&js=1&q=%E6%B7%98%E5%AE%9D%E5%A5%B3%E4%BA%BA&suggest=history_1&_input_charset=utf-8&wq=&suggest_query=&source=suggest&sort=sale-desc&isb=0&shop_type=&ratesum=&loc=%E4%B8%8A%E6%B5%B7&s=20)

但是话说回来,我如果有逆向接口参数的水平,也就不会采用油猴脚本这个曲线救国的方式来获取数据了😢

我还想到的一个方法是用我自己写的js脚本替换掉官方的js脚本,在我的js脚本中把这个变量导出然后输出到控制台(在上面的例子当中为e),但是这个方法通用性太差,很多网站都有校验js脚本完整性的机制,一旦发现js被篡改了就会另起一份。

李恒道 发表于 2024-1-23 04:48:11

xiaooooooo 发表于 2024-1-22 22:33
!(data/attachment/forum/202401/22/222625tykmc2y2rmgmp216.png)

如果是要使用跟踪堆栈 ...

油猴算是在有限范围内做动作
其实如果论逆向能力来说反而比CDP之类的更最求在最少资源下打最极限的操作

直接提接口也行~
页: [1]
查看完整版本: 关于elmGetter库的使用问题,同类的元素只能获取到一部分