Web虎牙自動發(fā)彈幕

代碼如下

const script = document.createElement("script")
script.innerHTML = `
  function fireKeyEvent(el, evtType, keyCode) {
    var doc = el.ownerDocument,
      win = doc.defaultView || doc.parentWindow,
      evtObj;
    if (doc.createEvent) {
      if (win.KeyEvent) {
        evtObj = doc.createEvent('KeyEvents');
        evtObj.initKeyEvent(evtType, true, true, win, false, false, false, false, keyCode, 0);
      }
      else {
        evtObj = doc.createEvent('UIEvents');
        Object.defineProperty(evtObj, 'keyCode', {
          get: function () { return this.keyCodeVal; }
        });
        Object.defineProperty(evtObj, 'which', {
          get: function () { return this.keyCodeVal; }
        });
        evtObj.initUIEvent(evtType, true, true, win, 1);
        evtObj.keyCodeVal = keyCode;
        if (evtObj.keyCode !== keyCode) {
          console.log("keyCode " + evtObj.keyCode + " 和 (" + evtObj.which + ") 不匹配");
        }
      }
      el.dispatchEvent(evtObj);
    }
    else if (doc.createEventObject) {
      evtObj = doc.createEventObject();
      evtObj.keyCode = keyCode;
      el.fireEvent('on' + evtType, evtObj);
    }
  }
   
  let t = 0
  let timer = null
  let content = null
  let Min = 10000
  let Max = 12000
  let time = Min
  window.onkeydown = e => {
    if (e.keyCode === 18) {
      if (t++ % 2 === 0) {
        console.log('彈幕開始')
        new Promise((resolve, reject) => {
            if (window.confirm('自定義彈幕請點擊確定,自動彈幕模式請點擊取消')) {
              content = window.prompt('請輸入自動發(fā)送的彈幕內(nèi)容')
            }
            resolve(content)
        } ).then(res => {
          const hh = () => {
            timer = setTimeout(() => {
              const target = document.querySelector("#pub_msg_input")
              let nodes = []
              if (!res) nodes = document.querySelectorAll(".msg-normal .msg")
              fireKeyEvent(target, 'keydown', 13)
              target.value = res || nodes.length&&nodes[(Math.round(Math.random() * (nodes.length - 1)))].innerText || '大家好'
              document.querySelector('#msg_send_bt').click()
              time = (Min + Math.round(Math.random() * (Max - Min)))
              console.log(time)
              clearInterval(timer)
              hh()
            }, time)
          }
          hh()
        })
      } else {
        console.log('彈幕已停止')
        alert('彈幕已停止')
        clearInterval(timer)
      }
    }
  }
`
document.querySelector('body').append(script)

研究的時候發(fā)現(xiàn)虎牙每兩條彈幕發(fā)送時間必須在10秒以外,10秒以內(nèi)的話,就會被后端關(guān)閉WebSocket的連接。。所以上面這段代碼并沒有太大的意義。。不過運行實際效果還是蠻有趣的。。

前提

首先是裝有油猴插件的瀏覽器,點擊油猴圖標,點擊"添加新腳本",然后把上面代碼粘貼到"your code here" 處。。

"設(shè)置"面板中,"用戶匹配"點擊"添加",輸入

*://www.huya.com/*

即可。

不想安裝油猴插件的,可以直接打開控制臺,把代碼粘貼進去,回車即可。這種方式的話,刷新一下頁面需要重新粘貼一遍代碼。

用法

在虎牙視頻播放界面,按 ALT 鍵。

按一下,選擇發(fā)送彈幕類型,點擊"確定"是手動輸入彈幕內(nèi)容,然后每隔10-12秒自動重復(fù)發(fā)送,點擊"取消"是自動獲取別人的彈幕進行發(fā)送。

再按一下,取消發(fā)送彈幕

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容