上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: cxxjackie - 

异步获取元素的脚本库 ElementGetter

  [复制链接]
  • TA的每日心情
    开心
    2024-9-29 15:06
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    9

    主题

    81

    回帖

    88

    积分

    初级工程师

    积分
    88
    发表于 2024-2-22 08:59:35 | 显示全部楼层
    cxxjackie 发表于 2024-2-21 23:14
    是否跨域?没有的话将iframe.contentDocument作为parent参数传入。

    iframe没有名称,怎么样才能传入,而且这个页面不是一开始就加载的,只有MOUSE点击某个功能会出现一个新的TAB页面,TAb页面里面有多个iframe, 且没有名称,但是通过document.queryselectorAll('iframe')能获取, 但是没有名称。
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2024-2-22 22:13:35 | 显示全部楼层
    szzxc 发表于 2024-2-22 08:59
    iframe没有名称,怎么样才能传入,而且这个页面不是一开始就加载的,只有MOUSE点击某个功能会出现一个新 ...

    可以通过get方法来获取iframe元素,元素不一定要有名称来定位,建议学习一下其他选择器的写法:https://bbs.tampermonkey.net.cn/thread-1821-1-1.html
    实在找不到适合定位的特征,也可以利用src不同来写选择器:
    1. [src^="https://www.example.com/"]
    复制代码

    另外,如我前面126楼所说,获取到iframe元素不代表iframe已加载完毕,可能还需要监听load事件,match进iframe内部来执行脚本要简单得多。
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    2

    积分

    助理工程师

    积分
    2
    发表于 2024-8-7 23:18:14 | 显示全部楼层
    本帖最后由 pawjazz 于 2024-8-8 18:52 编辑

    感谢!感谢!感谢!感谢!感谢!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    3

    主题

    15

    回帖

    24

    积分

    助理工程师

    积分
    24
    发表于 2024-9-5 23:27:14 | 显示全部楼层

    本帖最后由 gues1688 于 2024-9-5 23:30 编辑

    本帖最后由 gues1688 于 2024-9-5 23:28 编辑

    老大,下面这面代码肯定不对,要怎么改写,选择器 'div[style*="font-size:"]' 显然不止返回一个元素:

    (function() {
        elmGetter.get('div[style*="font-size:"]').then(divs => {
            console.log(divs);
        });
    })();

    谢谢老大!

    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    3

    主题

    15

    回帖

    24

    积分

    助理工程师

    积分
    24
    发表于 2024-9-6 15:12:39 | 显示全部楼层
    gues1688 发表于 2024-9-5 23:27
    [md]> 本帖最后由 gues1688 于 2024-9-5 23:28 编辑

    老大,下面这面代码肯定不对,要怎么改写,选择器 'd ...

    反复调试观察,明白了,代码没错。
    原以为,会等待所有选择器的元素都出现,才会返回,结果却是只要出现了1个就返回,不会继续监视其它元素。

    想要监视 选择器筛选的所有元素,需要用的是 elmGetter.each()。

    谢谢老大提供的精彩实用库!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2024-9-6 22:31:11 | 显示全部楼层
    gues1688 发表于 2024-9-6 15:12
    反复调试观察,明白了,代码没错。
    原以为,会等待所有选择器的元素都出现,才会返回,结果却是只要出现 ...

    get对标的是querySelector,设计本意如此,each对标的才是querySelectorAll。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    3

    主题

    15

    回帖

    24

    积分

    助理工程师

    积分
    24
    发表于 2024-9-6 23:04:21 | 显示全部楼层

    cxxjackie 发表于 2024-9-6 22:31

    get对标的是querySelector,设计本意如此,each对标的才是querySelectorAll。

    您的解答,浅显易懂,我明白了。
    谢谢您!

    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    1

    积分

    助理工程师

    积分
    1
    发表于 2024-9-13 18:53:16 | 显示全部楼层
    请问SSE要如何断开获取Dta
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2024-9-13 22:12:36 | 显示全部楼层
    有脚的本子 发表于 2024-9-13 18:53
    请问SSE要如何断开获取Dta

    这个似乎与库的功能无关,观察页面输出是否存在节点插入,是的话可以用each方法获取,不是的话需要自己写MutationObserver观察文本变化(characterData),或者对相关接口做劫持(如EventSource的message事件)。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表