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

如何定位多层嵌套下的<div>?

[复制链接]
  • TA的每日心情
    开心
    2023-2-16 08:57
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    1

    主题

    9

    回帖

    12

    积分

    助理工程师

    积分
    12
    发表于 2023-2-3 11:43:19 | 显示全部楼层 | 阅读模式
    悬赏12油猫币已解决

    本帖最后由 霜雪明 于 2023-2-16 11:37 编辑

    本帖最后由 霜雪明 于 2023-2-16 11:36 编辑

    本帖最后由 霜雪明 于 2023-2-9 17:25 编辑

    本帖最后由 霜雪明 于 2023-2-8 15:18 编辑

    本帖最后由 霜雪明 于 2023-2-3 17:35 编辑

    本帖最后由 霜雪明 于 2023-2-3 17:32 编辑

    fa1.png
    这是雨量查询页面。

    点击【查询】按钮,会刷新出一个雨量表:
    fa2.png

    【查询】按钮对应的element是:

    <button type="button" id="ext-gen27" class=" x-btn-text icon-zoom">查询</button>

    我想在按下按钮,刷新雨量表后,对部分内容进行替换(比如把“龙胜大沙河水库”替换成“油猴水库”)


    最终代码:

    // ==UserScript==
    // @name         Auto Replace Station Name
    // @namespace    http://tampermonkey.net/
    // @version      1.0
    // @description  try to take over the world!
    // @author       You
    // @match        http://10.149.0.32/Forms/RealRain/SelectRainH.aspx
    // @require      https://scriptcat.org/lib/513/1.2.1/ElementGetter.js
    // @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
    // @grant        none
    // ==/UserScript==
    
    /* global ElementGetter */
    
    (async function() {
    
        var words = {
        ///////////////////////////////////////////////////////
    
            '开平百合马降龙' : '百合马降龙',
            '开平百合镇府' : '百合镇',
            '开平苍城花身蚕水库' : '花身蚕水库',
            '开平苍城农业核心区' : '苍城农业基地',
            '开平苍城镇府' : '苍城镇',
            '开平赤坎新联村' : '赤坎新联村',
            '开平赤坎镇府' : '赤坎镇',
            '开平赤水狮山水库' : '狮山水库',
            '开平赤水石井口水库' : '赤水石井口水库',
            '开平赤水镇府' : '赤水镇',
            '开平翠山湖' : '翠山湖',
            '开平大沙石堆水库' : '大沙石堆水库',
            '开平大沙西湾村' : '大沙西湾村',
            '开平大沙镇圩' : '大沙镇',
            '开平金鸡石迳村' : '金鸡石迳村',
            '开平金鸡镇中学' : '金鸡镇',
            '开平龙胜大沙河水库' : '龙胜大沙河水库',
            '开平龙胜立新水库' : '立新水库',
            '开平龙胜胜桥村' : '龙胜胜桥村',
            '开平龙胜镇府' : '龙胜镇',
            '开平龙胜镇海林场' : '镇海林场',
            '开平马冈虎山村' : '马冈虎山村',
            '开平马冈镇府' : '马冈镇',
            '开平三埠东华街' : '三埠街道',
            '开平三埠燕山村' : '三埠燕山村',
            '开平沙塘镇府' : '沙塘镇',
            '开平水口冈中村' : '水口开新村',
            '开平水口镇府' : '水口镇',
            '开平塘口镇府' : '塘口镇',
            '开平塘口自力村' : '塘口自力村',
            '开平蚬冈锦江里' : '蚬冈锦江里',
            '开平蚬冈镇圩' : '蚬冈镇',
            '开平月山镇圩' : '月山镇',
            '开平长沙金山中学' : '金山中学',
            '开平长沙开元塔' : '开元塔',
    
        ///////////////////////////////////////////////////////
        '':''};
        //function callback(mutationList, observer) {
        //    if(document.querySelector('.checkinsert')===null){
        //        let share=document.querySelector('.share');
        //        share.parentElement.insertBefore(triple,share);
        //    }
        //}
    
        var regexs = [], replacements = [],
            tagsWhitelist = ['PRE', 'BLOCKQUOTE', 'CODE', 'INPUT', 'BUTTON', 'TEXTAREA'],
            rIsRegexp = /^\/(.+)\/([gim]+)?$/,
            word, text, texts, i, userRegexp;
    
        // prepareRegex by JoeSimmons
        // used to take a string and ready it for use in new RegExp()
        function prepareRegex(string) {
            return string.replace(/([\[\]\^\&\$\.\(\)\?\/\\\+\{\}\|])/g, '\\$1');
        }
    
        //function to decide whether a parent tag will have its text replaced or not
        //function isTagOk(tag) {
        //    return tagsWhitelist.indexOf(tag) === -1;
        //}
    
        //delete words['']; // so the user can add each entry ending with a comma,
                          // I put an extra empty key/value pair in the object.
                          // so we need to remove it before continuing
    
        // convert the 'words' JSON object to an Array
        for (word in words) {
            if ( typeof word === 'string' && words.hasOwnProperty(word) ) {
                userRegexp = word.match(rIsRegexp);
    
                // add the search/needle/query
                if (userRegexp) {
                    regexs.push(
                        new RegExp(userRegexp[1], 'g')
                    );
                } else {
                    regexs.push(
                        new RegExp(prepareRegex(word).replace(/\\?\*/g, function (fullMatch) {
                            return fullMatch === '\\*' ? '*' : '[^ ]*';
                        }), 'g')
                    );
                }
                // add the replacement
                replacements.push( words[word] );
            }
        }
    
    //————以上摘录自JoeSimmons编写的代码
    //————以下是在油猴中文网网友的耐心帮助下完成
    
        var elmGetter = new ElementGetter();
    
        //一系列自动点击
        var temp = await elmGetter.get('#ext-gen147',document,200);
        temp.click();
        temp = await elmGetter.get('#ext-gen177',document,200);
        temp.click();
        temp = await elmGetter.get('#ext-gen205',document,200);
        temp.click();
        temp = await elmGetter.get('#chkImgRemark',document,200);
        temp.click();
    
        //定位【查询】按钮位置
        var Bttn = await elmGetter.get('#ext-gen27',document,200);
    
        //待点击后,等待1000ms,在网页刷新后进行文本替换
        Bttn.addEventListener('click', async function(){
            setTimeout(async function(){
                var elmGetter = new ElementGetter();
                elmGetter.each('#ext-gen248 .x-grid3-row', document, row => {
                //console.log(row.outerHTML);
                regexs.forEach(function (value, index) {
                    row.innerHTML = row.innerHTML.replace( value, replacements[index] );
                });
                });
            }, 1000 )
    
        })
    
    }());

    感谢 李恒道 cxxjackie 和 steven026的耐心帮助。

    最佳答案

    查看完整内容

    用mutationobserver 可以试试论坛的elementgetter库
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-2-3 11:43:20 | 显示全部楼层
    霜雪明 发表于 2023-2-3 17:35
    我尝试使用如下代码定位到表格区域

    用mutationobserver
    可以试试论坛的elementgetter库
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-2-3 11:50:06 | 显示全部楼层
    可以用document.queryselector找table标签
    然后根据table的dom位置逐步用for循环修改和往下遍历
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-16 08:57
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    1

    主题

    9

    回帖

    12

    积分

    助理工程师

    积分
    12
    发表于 2023-2-3 11:57:44 | 显示全部楼层
    李恒道 发表于 2023-2-3 11:50
    可以用document.queryselector找table标签
    然后根据table的dom位置逐步用for循环修改和往下遍历 ...

    谢谢,我尝试一下(半路出家,基础太差了
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-2-3 12:24:04 | 显示全部楼层
    霜雪明 发表于 2023-2-3 11:57
    谢谢,我尝试一下(半路出家,基础太差了)

    没事,都是半路出家的
    油猴这种不存在科班
    太小众了~
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-2-3 12:24:18 | 显示全部楼层
    霜雪明 发表于 2023-2-3 11:57
    谢谢,我尝试一下(半路出家,基础太差了)

    不会可以继续提问
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-16 08:57
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    1

    主题

    9

    回帖

    12

    积分

    助理工程师

    积分
    12
    发表于 2023-2-3 17:35:17 | 显示全部楼层
    李恒道 发表于 2023-2-3 12:24
    不会可以继续提问



    我尝试使用如下代码定位到表格区域

    1.     var form = document.getElementsByTagName("form")[0];
    2.     var formChild= form.children;
    3.     var Panel = formChild[0];
    复制代码


    结果只能Panel指向绿框,跳过了红框。
    我猜是因为刷新时,红框里的内容没有立刻刷新出来
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-16 08:57
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    1

    主题

    9

    回帖

    12

    积分

    助理工程师

    积分
    12
    发表于 2023-2-3 20:32:13 | 显示全部楼层
    李恒道 发表于 2023-2-3 18:21
    用mutationobserver
    可以试试论坛的elementgetter库

    哦,好东西
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-16 08:57
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    1

    主题

    9

    回帖

    12

    积分

    助理工程师

    积分
    12
    发表于 2023-2-7 17:27:22 | 显示全部楼层
    本帖最后由 霜雪明 于 2023-2-7 17:31 编辑
    李恒道 发表于 2023-2-3 18:21
    用mutationobserver
    可以试试论坛的elementgetter库

    李老师你好,我参照帖子
    https://bbs.tampermonkey.net.cn/forum.php?mod=viewthread&tid=2726
    尝试调用elementgetter库:

    1. ……
    2. // @require      https://scriptcat.org/lib/513/1.2.1/ElementGetter.js
    3. // @grant        none
    4. // ==/UserScript==

    5. (function() {
    6.     'use strict';
    7.     const $ = new ElementGetter();
    8. ……
    复制代码


    最后“const”这一行报错:eslint: no-undef - 'ElementGetter' is not defined.

    我这网络状况应该是正常的,@require指向的网页能正常打开。


    ————————
    哦,好像是grant none的问题,晚上继续尝试
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-2-7 17:31:18 | 显示全部楼层
    霜雪明 发表于 2023-2-7 17:27
    李老师你好,我参照帖子
    https://bbs.tampermonkey.net.cn/forum.php?mod=viewthread&tid=2726
    尝试调用el ...

    是运行报错还是编辑器报错?
    如果是编辑器报错可以无视
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    发表回复

    本版积分规则

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