V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jtwor
V2EX  ›  问与答

React 谷歌浏览器自动化脚本求助,大佬们过来康康

  •  1
     
  •   jtwor · 2022-11-10 13:47:25 +08:00 · 515 次点击
    这是一个创建于 778 天前的主题,其中的信息可能已经有所发展或是发生改变。

    情况:
    目前遇到一个是 react 做的页面,目标很简单就是对该页面的控件进行赋值,整个控件组最终是 form 提交的,由于需求限制只能使用 chrome console 运行 js 脚本对控件进行赋值,也不可以直接模拟接口提交需要界面交互。

    脚本例如:
    document.getElementById("xxx").value=123; 这种 text 控件是可以赋值的,没有任何问题

    问题:
    该页面的下拉框都是 input 控件 type 为 search 而且为 readonly ,用上面简单的赋值没有任何作用,所以只能模拟人为事件的思路进行赋值,但小弟无法用 DOM 操作进行任何模拟点击的操作(即下拉框点击 click 也无效)。

    然后经过一轮摸索找到个操作 react 中 DOM 的方法,但这个方法好像只能模拟赋值是保持冒泡事件,但最终还是没有赋值

    const triggerInputChange = (selector,value)=>{
            const node = document.querySelector(selector);
    
            if (inputTypes.indexOf(node.__proto__.constructor) > -1) {
                const setValue = Object.getOwnPropertyDescriptor(node.__proto__, 'value').set;
                let event = new Event('input',{
                    bubbles: true
                });
    
                if(node.__proto__.constructor === window.HTMLSelectElement){
                    event = new Event('change',{
                        bubbles: true
                    });
                }
                setValue.call(node, value);
                node.dispatchEvent(event);
            }
        }
    
    jtwor
        1
    jtwor  
    OP
       2022-11-10 14:10:20 +08:00
    有些尴尬发不了图,被检查说带短链了,测试

    imgur.com/a/ENwiuzx
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3462 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:33 · PVG 18:33 · LAX 02:33 · JFK 05:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.