dm_xx
2021-01-20 23:41
采纳率: 90.9%
浏览 9
已采纳

简单的模拟网页按钮问题?

<div class="mp-choice-order vm"><span>A</span></div>
<div class="com-mark-pq-single-content js-com-mark-pq-single-content active">积极情绪</div>

<div class="mp-choice-order vm"><span>A</span></div>
<div class="com-mark-pq-single-content js-com-mark-pq-single-content active">感谢/满意</div>

模拟点击这2个按钮,然后按CapsLock

模拟点击这2个按钮,然后点击

<div class="mark-button-left">
        <div id="js_submit_btn" class="button-mark button-red">提交</div>
    </div>

帮忙给出这2中模拟按键

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

15条回答 默认 最新

  • 天际的海浪 2021-01-21 21:59
    已采纳

    第二种 模拟点击这2个按钮,然后模拟点击提交

     

    function dispatch(obj) {
    	var e = document.createEvent('MouseEvents');
    	e.initEvent('click', true, true);
    	obj.dispatchEvent(e);
    }
    
    function getEl(sel,text) {
    	var arr = document.querySelectorAll(sel);
    	for (var i = 0; i < arr.length; i++) {
    		if (arr[i].innerText==text)
    			return arr[i];
    	}
    }
    
    
    dispatch(getEl('.com-mark-pq-single-content','积极情绪'));
    dispatch(getEl('.com-mark-pq-single-content','感谢/满意'));
    
    dispatch(document.getElementById("js_submit_btn"));
    
    
    打赏 评论
  • dm_xx 2021-01-20 23:44

    打赏 评论
  • 天际的海浪 2021-01-21 00:06
    function dispatch(obj) {
    	var e = document.createEvent('MouseEvents');
    	e.initEvent('click', true, true);
    	obj.dispatchEvent(e);
    }
    
    function getEl(sel,text) {
    	var arr = document.querySelectorAll(sel);
    	for (var i = 0; i < arr.length; i++) {
    		if (arr[i].innerText==text)
    			return arr[i];
    	}
    }
    
    dispatch(getEl('.com-mark-pq-single-content','积极情绪'));
    setTimeout(function(){
    	dispatch(getEl('.com-mark-pq-single-content','感谢/满意'));
    }, 2000);
    setTimeout(function(){
    	dispatch(document.getElementById("js_submit_btn"));
    }, 4000);
    
    打赏 评论
  • dm_xx 2021-01-21 09:15
    dispatch(document.getElementById("js_submit_btn"));

     能把这个换成模拟按键CapsLock或者按键X,因为我问的2种,麻烦了

    打赏 评论
  • dm_xx 2021-01-21 09:36

    还有这个2秒、4秒能取消掉吗,就按着顺序操作可以吗

    打赏 评论
  • dm_xx 2021-01-21 09:36

    不太懂电脑麻烦了

    打赏 评论
  • 天际的海浪 2021-01-21 14:54


    能说下为什么要模拟按键CapsLock或者按键X吗?
    因为js并不能真正的模拟键盘的按键,只能模拟触发按键的事件。

    不用延时也可以,只是可能模拟点击的太快,网页反应不过来。
     

    打赏 评论
  • dm_xx 2021-01-21 16:29

    因为提交这个按钮有时候是灰色的,没法提交,用CapsLock或者按键X在灰色的时候也可以提交

    打赏 评论
  • dm_xx 2021-01-21 16:47

    打赏 评论
  • dm_xx 2021-01-21 16:47

    这个提交有时候一直卡主是怎么回事

    打赏 评论
  • 天际的海浪 2021-01-21 19:46
    function fireKeyEvent(el, evtType, keyCode) {
      var evtObj;
      if (document.createEvent) {
          if (window.KeyEvent) {//firefox 浏览器下模拟事件
              evtObj = document.createEvent('KeyEvents');
              evtObj.initKeyEvent(evtType, true, true, window, true, false, false, false, keyCode, 0);
          } else {//chrome 浏览器下模拟事件
              evtObj = document.createEvent('UIEvents');
              evtObj.initUIEvent(evtType, true, true, window, 1);
              delete evtObj.keyCode;
              if (typeof evtObj.keyCode === "undefined") {//为了模拟keycode
                  Object.defineProperty(evtObj, "keyCode", { value: keyCode });  
              } else {
                  evtObj.key = String.fromCharCode(keyCode);
              }
     
              if (typeof evtObj.ctrlKey === 'undefined') {//为了模拟ctrl键
                  Object.defineProperty(evtObj, "ctrlKey", { value: false });
              } else {
                  evtObj.ctrlKey = false;
              }
          }
          el.dispatchEvent(evtObj);
     
      } else if (document.createEventObject) {//IE 浏览器下模拟事件
          evtObj = document.createEventObject();
          evtObj.keyCode = keyCode
          el.fireEvent('on' + evtType, evtObj);
      }
    }
    
    function dispatch(obj) {
    	var e = document.createEvent('MouseEvents');
    	e.initEvent('click', true, true);
    	obj.dispatchEvent(e);
    }
    
    function getEl(sel,text) {
    	var arr = document.querySelectorAll(sel);
    	for (var i = 0; i < arr.length; i++) {
    		if (arr[i].innerText==text)
    			return arr[i];
    	}
    }
    
    
    dispatch(getEl('.com-mark-pq-single-content','积极情绪'));
    dispatch(getEl('.com-mark-pq-single-content','感谢/满意'));
    
    dispatch(document.getElementById("js_submit_btn"));
    
    fireKeyEvent(document.getElementById("js_submit_btn"),'keydown',88); //88 是X键的编码
    fireKeyEvent(document.getElementById("js_submit_btn"),'keypress',88);
    fireKeyEvent(document.getElementById("js_submit_btn"),'keyup',88);
    
    
    打赏 评论
  • dm_xx 2021-01-21 21:07

    能帮忙把这2中分开下吗?代码小白,好了给您采纳

    打赏 评论
  • dm_xx 2021-01-21 21:08

    太长了看不懂怎么分开了

    打赏 评论
  • 天际的海浪 2021-01-21 21:55

    第一种 模拟点击这2个按钮,然后按X键
     

    function fireKeyEvent(el, evtType, keyCode) {
      var evtObj;
      if (document.createEvent) {
          if (window.KeyEvent) {//firefox 浏览器下模拟事件
              evtObj = document.createEvent('KeyEvents');
              evtObj.initKeyEvent(evtType, true, true, window, true, false, false, false, keyCode, 0);
          } else {//chrome 浏览器下模拟事件
              evtObj = document.createEvent('UIEvents');
              evtObj.initUIEvent(evtType, true, true, window, 1);
              delete evtObj.keyCode;
              if (typeof evtObj.keyCode === "undefined") {//为了模拟keycode
                  Object.defineProperty(evtObj, "keyCode", { value: keyCode });  
              } else {
                  evtObj.key = String.fromCharCode(keyCode);
              }
     
              if (typeof evtObj.ctrlKey === 'undefined') {//为了模拟ctrl键
                  Object.defineProperty(evtObj, "ctrlKey", { value: false });
              } else {
                  evtObj.ctrlKey = false;
              }
          }
          el.dispatchEvent(evtObj);
     
      } else if (document.createEventObject) {//IE 浏览器下模拟事件
          evtObj = document.createEventObject();
          evtObj.keyCode = keyCode
          el.fireEvent('on' + evtType, evtObj);
      }
    }
    
    function dispatch(obj) {
    	var e = document.createEvent('MouseEvents');
    	e.initEvent('click', true, true);
    	obj.dispatchEvent(e);
    }
    
    function getEl(sel,text) {
    	var arr = document.querySelectorAll(sel);
    	for (var i = 0; i < arr.length; i++) {
    		if (arr[i].innerText==text)
    			return arr[i];
    	}
    }
    
    
    dispatch(getEl('.com-mark-pq-single-content','积极情绪'));
    dispatch(getEl('.com-mark-pq-single-content','感谢/满意'));
    
    fireKeyEvent(document.getElementById("js_submit_btn"),'keydown',88); //88 是X键的编码
    fireKeyEvent(document.getElementById("js_submit_btn"),'keypress',88);
    fireKeyEvent(document.getElementById("js_submit_btn"),'keyup',88);
    
    
    
    打赏 评论
  • 天际的海浪 2021-01-21 22:11

    要模拟CapsLock键可以把上面的88改成20
     

    打赏 评论

相关推荐 更多相似问题