B站点赞姬

不白嫖,为观看时间超过10s的视频自动点赞

// ==UserScript==
// @name         B站点赞姬
// @namespace    http://tampermonkey.net/
// @version      1.11
// @description  不白嫖,为观看时间超过10s的视频自动点赞
// @author       kakasearch
// @match        https://www.bilibili.com/*
// @icon         data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB3aWR0aD0iODAwcHQiIGhlaWdodD0iODAwcHQiIHZpZXdCb3g9IjAgMCA4MDAgODAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQo8ZyBpZD0iI2ZmN2YwMmZmIj4NCjxwYXRoIGZpbGw9IiNmZjdmMDIiIG9wYWNpdHk9IjEuMDAiIGQ9IiBNIDUzNi42OCAxNTYuMDYgQyA1MzYuODQgMTQ2Ljk3IDU0Mi4yNyAxMzguMTIgNTUwLjkyIDEzNC44NiBDIDU1Mi44NSAxNDMuODYgNTU0LjcyIDE1Mi44NyA1NTYuNjAgMTYxLjg3IEMgNTU3LjA2IDE2NS4yOSA1NTkuNTcgMTY3LjgxIDU2MS4zNiAxNzAuNTkgQyA1NzMuNjcgMTY5LjYzIDU4Ni41NCAxNzEuMzUgNTk3LjM0IDE3Ny42NSBDIDYwOC41MyAxODQuMDUgNjE2Ljk0IDE5NC44MSA2MjEuMjIgMjA2LjkwIEMgNjI2LjEyIDIxNy4wOCA2MzcuMjAgMjIzLjUyIDYzOS41NiAyMzUuMDUgQyA2MzcuNjIgMjQ3LjIzIDYzNS40OCAyNTkuOTggNjI4LjUyIDI3MC40NSBDIDYyMi40NCAyNzkuNjMgNjEyLjA3IDI4NC45NyA2MDEuNTMgMjg3LjIxIEMgNTkwLjgxIDI4OS4zOCA1NzkuMzIgMjg5LjkwIDU2OS43MiAyOTUuNjkgQyA1NjUuODYgMjk3Ljk3IDU2Mi4wOCAzMDIuMjYgNTYzLjQ2IDMwNy4wOCBDIDU3MS44NiAzNDMuNDcgNTc0LjU5IDM4MS42NiA1NjcuMjkgNDE4LjQ3IEMgNTYyLjI2IDQ0My4zNSA1NTIuODUgNDY3Ljc4IDUzNy4yMCA0ODcuOTYgQyA1MzMuMzcgNDkzLjE2IDUyOC4wNSA0OTcuMTYgNTI0LjgyIDUwMi44MiBDIDUxOS42MyA1MTEuNTEgNTE4LjE0IDUyMi4wMyA1MTkuNTIgNTMxLjk2IEMgNTIwLjAwIDU0OC4zMCA1MjUuNzcgNTYzLjgyIDUzMC45OSA1NzkuMTIgQyA1MzkuOTUgNjA0LjA5IDU1MC41NSA2MjguNDMgNTYxLjU2IDY1Mi41NiBDIDU2NS45MyA2NTMuNzUgNTcwLjg1IDY1My42MCA1NzQuNjcgNjU2LjMyIEMgNTc5LjA3IDY1OS4xOSA1ODMuNjcgNjYyLjc0IDU4NS4yMyA2NjguMDAgQyA1ODYuNzAgNjcyLjk3IDU4My43OSA2NzcuOTQgNTgwLjIxIDY4MS4yMCBDIDU3Ny40OSA2ODQuMDAgNTczLjU2IDY4NC44MyA1NzAuMDAgNjg2LjAyIEMgNTYwLjY5IDY4OC44MCA1NTAuMjQgNjg5Ljk1IDU0MS4xMSA2ODUuOTIgQyA1MzMuOTIgNjgyLjgzIDUyOC41OSA2NzYuNDAgNTI1Ljk1IDY2OS4xMyBDIDUxNC4zMiA2NjcuOTIgNTAzLjcwIDY2MS4zMyA0OTYuODUgNjUxLjk1IEMgNDg1Ljc5IDYzNy4xMiA0ODEuMjUgNjE4LjcyIDQ3Ny41NyA2MDAuOTAgQyA0NzUuMjkgNTkwLjU0IDQ3NC42NSA1NzkuMzggNDY4LjgxIDU3MC4xOSBDIDQ2Ni4xMCA1NjUuNzcgNDYxLjc0IDU2Mi4yNiA0NTYuNTEgNTYxLjQ2IEMgNDU1Ljk0IDU3Ny42MSA0NDkuNzAgNTkyLjk1IDQ0Mi4wMiA2MDYuOTUgQyA0MzcuMjYgNjE1Ljg2IDQzMC4zOCA2MjMuODcgNDI4LjA4IDYzMy45MyBDIDQyNi45NSA2MzguMzQgNDI3LjU2IDY0My43NSA0MzEuNDMgNjQ2LjY2IEMgNDM1Ljg3IDY1MC4xNiA0NDEuODAgNjQ5LjcxIDQ0Ny4xMSA2NTAuMjcgQyA0NTYuNDYgNjUxLjE0IDQ2NS44NyA2NTEuNjUgNDc1LjIwIDY1Mi43NiBDIDQ4Mi44NSA2NTQuOTMgNDkxLjI1IDY1OC4yNiA0OTUuMzggNjY1LjUzIEMgNDk4Ljg0IDY3MS45MyA0OTUuOTUgNjc5LjUzIDQ5MS44MSA2ODQuODUgQyA0NjUuMTggNjg1LjAyIDQzOC41NSA2ODUuODkgNDExLjk2IDY4Ny40MCBDIDM5NS45NiA2ODguMjggMzc5LjkzIDY4OS43NSAzNjMuOTAgNjg4Ljc2IEMgMzU0LjM5IDY4OC4xMyAzNDQuNjMgNjg2LjU4IDMzNi4yNSA2ODEuODEgQyAzMzAuNTggNjc4LjY2IDMyNS45MCA2NzQuMTIgMzIxLjMzIDY2OS41OSBDIDMxNC42OCA2NjMuMDUgMzA1LjA0IDY2MC43MyAyOTUuOTYgNjYwLjU3IEMgMjgyLjE0IDY2MC4zNyAyNjguNDcgNjYzLjk3IDI1NS45MSA2NjkuNTcgQyAyNDQuMzggNjc1LjIwIDIzMi4yMCA2NzkuMzUgMjE5Ljk4IDY4My4xOSBDIDE5NS4yNiA2OTAuNzMgMTY5Ljg1IDY5Ni41OCAxNDQuMDEgNjk4LjMzIEMgMTI4Ljg4IDY5OS4xNSAxMTMuMjAgNjk4Ljg2IDk4Ljg3IDY5My40MCBDIDg4LjkwIDY4OS42NCA3OS44MSA2ODIuMDEgNzYuNTkgNjcxLjU4IEMgNzQuMjAgNjYzLjg3IDc2LjcyIDY1NS41NiA4MS4xOSA2NDkuMTMgQyA4Ny43MCA2MzkuNzIgOTYuOTMgNjMyLjYyIDEwNi4zOSA2MjYuMzcgQyAxMjIuMjggNjE1Ljk1IDEzOS45MCA2MDguNjQgMTU3LjQxIDYwMS40MyBDIDE2NS40MSA1OTguMzEgMTczLjQzIDU5NS4wNSAxODEuODUgNTkzLjIzIEMgMTg0LjE5IDU5Mi42MiAxODYuNjMgNTkyLjYyIDE4OC45OCA1OTMuMjQgQyAxODkuMDEgNTk2Ljg4IDE4Ni42MSA1OTkuNzkgMTg0LjM5IDYwMi40MiBDIDE3OS41NiA2MDcuOTMgMTczLjk0IDYxMi42OCAxNjguMzEgNjE3LjM0IEMgMTY2LjI3IDYxOC45OCAxNjQuMjcgNjIwLjczIDE2MS44OCA2MjEuODQgQyAxNTEuMTEgNjI2LjgwIDE0MC40MiA2MzIuMDEgMTMwLjQ1IDYzOC40NiBDIDEyNi41NCA2NDEuMTAgMTIyLjUxIDY0My43OSAxMTkuNTkgNjQ3LjU2IEMgMTE4LjM5IDY0OS4xMyAxMTcuMjggNjUxLjUwIDExOC42OSA2NTMuMzEgQyAxMjAuODQgNjU2LjIxIDEyNC43MSA2NTYuOTMgMTI4LjA4IDY1Ny4zMCBDIDEzNS4xNSA2NTcuODMgMTQyLjIzIDY1Ni44MyAxNDkuMTkgNjU1LjY4IEMgMTY3LjM3IDY1Mi40MyAxODUuMTYgNjQ3LjM3IDIwMi45NyA2NDIuNTYgQyAyMTUuODQgNjM5LjA3IDIyNy4zOCA2MzAuMTMgMjMyLjc3IDYxNy43OCBDIDIzNC4zOCA2MTQuMTggMjM1LjYxIDYxMC40MSAyMzYuMzUgNjA2LjU0IEMgMjM4Ljk3IDU4NS4wOSAyNDMuMjUgNTYzLjg1IDI0OC4zOSA1NDIuODYgQyAyNTcuODMgNTA1LjA0IDI3MS4zMCA0NjcuOTQgMjkxLjI3IDQzNC4zNCBDIDMwNy43NiA0MDYuNTMgMzI5LjAyIDM4MS4zMyAzNTQuOTQgMzYxLjg3IEMgMzY5LjU0IDM1MC43OCAzODUuNjQgMzQxLjg2IDQwMi4xNSAzMzMuOTQgQyA0MDcuNDUgMzMxLjE1IDQxMy4zNiAzMjguOTggNDE3LjQ3IDMyNC40NCBDIDQyOC40MSAzMTIuODggNDQzLjc1IDMwNi4zNiA0NTMuNzggMjkzLjgxIEMgNDU4LjI3IDI4OC4zNiA0NjEuNTkgMjgxLjk1IDQ2My4zOSAyNzUuMTIgQyA0NjcuMTQgMjU5LjcyIDQ3NC4xOCAyNDUuNDAgNDgxLjQ0IDIzMS40MSBDIDQ4OC4yMiAyMTguNDQgNDk1Ljg1IDIwNS45MiA1MDMuNTAgMTkzLjQ2IEMgNTA0LjQ2IDE4MS40OCA1MDYuNTcgMTY5LjIzIDUxMi43MSAxNTguNzAgQyA1MTYuMjkgMTUyLjMyIDUyMS4xMiAxNDYuNTkgNTI3LjE1IDE0Mi40MSBDIDUzMC4zMyAxNDYuOTUgNTMzLjU1IDE1MS40NyA1MzYuNjggMTU2LjA2IFoiIC8+DQo8L2c+DQo8ZyBpZD0iIzJjMmMyY2ZmIj4NCjxwYXRoIGZpbGw9IiMyYzJjMmMiIG9wYWNpdHk9IjEuMDAiIGQ9IiBNIDEyMi40NiAzNTQuNDUgQyAxMjUuMDUgMzUyLjQ1IDEyNy40MiAzNDkuNDUgMTMwLjk5IDM0OS40NiBDIDEzNS4yNyAzNDkuNDMgMTQwLjgzIDM0OC4zNyAxNDMuNzMgMzUyLjQxIEMgMTQ2LjI2IDM1NS4zNiAxNDUuNDggMzYwLjEwIDE0Mi40MyAzNjIuMzggQyAxMDYuNTUgMzkyLjM3IDcwLjU5IDQyMi4yNyAzNC42OCA0NTIuMjIgQyA3MC40OCA0ODIuMTAgMTA2LjM0IDUxMS45MiAxNDIuMTQgNTQxLjgwIEMgMTQ0LjYwIDU0My42NiAxNDYuMDQgNTQ2Ljk4IDE0NC44OCA1NDkuOTkgQyAxNDMuMjMgNTU0LjI0IDEzOC4yMiA1NTYuNDQgMTMzLjg3IDU1NS43NyBDIDEyOS45MCA1NTUuMjkgMTI3LjEzIDU1Mi4xNCAxMjQuMTcgNTQ5Ljc4IEMgODYuNTMgNTE4LjQzIDQ4LjkyIDQ4Ny4wMiAxMS4yNSA0NTUuNzAgQyA5LjIzIDQ1My4wMSA5LjE5IDQ0OC4yMyAxMi4yOCA0NDYuMjcgQyA0OS4wMyA0MTUuNjkgODUuNzMgMzg1LjA1IDEyMi40NiAzNTQuNDUgWiIgLz4NCjxwYXRoIGZpbGw9IiMyYzJjMmMiIG9wYWNpdHk9IjEuMDAiIGQ9IiBNIDY1Ni40MSAzNTQuMzMgQyA2NTkuMDggMzQ5LjE0IDY2Ni41MCAzNDcuNTggNjcxLjI2IDM1MC43NyBDIDY3My44MSAzNTIuNDggNjc2LjA0IDM1NC42MyA2NzguNDMgMzU2LjU2IEMgNzE1LjU1IDM4Ny40NiA3NTIuNjIgNDE4LjQ0IDc4OS43NiA0NDkuMzAgQyA3OTEuOTEgNDUyLjAwIDc5MS44NSA0NTYuNzMgNzg4Ljc0IDQ1OC43MiBDIDc1MC42OSA0OTAuMzYgNzEyLjcyIDUyMi4xMCA2NzQuNjggNTUzLjc1IEMgNjcxLjQzIDU1Ni40OSA2NjYuODIgNTU1LjUyIDY2Mi45MiA1NTUuNTQgQyA2NTguNjUgNTU1LjU1IDY1NC45NyA1NTEuMTggNjU1Ljg2IDU0Ni45NyBDIDY1Ni4xNiA1NDQuOTQgNjU3LjYzIDU0My40MSA2NTkuMTEgNTQyLjEzIEMgNjk0Ljg1IDUxMi4zNSA3MzAuNTggNDgyLjU2IDc2Ni4zMiA0NTIuNzggQyA3MzAuNTEgNDIyLjkwIDY5NC42NSAzOTMuMDggNjU4Ljg1IDM2My4xOSBDIDY1Ni4xNiAzNjEuMjEgNjU0LjgwIDM1Ny40MSA2NTYuNDEgMzU0LjMzIFoiIC8+DQo8L2c+DQo8L3N2Zz4NCg==
// @grant        GM_setValue
// @grant        GM_getValue
// @run-at        document-end
// ==/UserScript==

(function() {
    'use strict';
    function fireKeyEvent(el, evtType, keyCode){
        //参考自 https://blog.csdn.net/lovelyelfpop/article/details/52471878
        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);
        }
    }
    function main(){
        console.log("准备点赞")
        let tmp = setInterval(function(){
            let video= document.querySelector("video")
            if(video){
                clearInterval(tmp)
                let bv = /BV[a-zA-Z0-9]+/.exec(window.location.href)[0]
                if(bv && GM_getValue(bv)){
                    console.log(bv,GM_getValue(bv))
                    console.log("之前点过赞")
                }else{
                    GM_setValue(bv,new Date().toLocaleString())
                    setTimeout(function(){
                        fireKeyEvent(window.document.body,"keydown",81)
                        fireKeyEvent(window.document.body,"keyup",81) //点击1次Q键,删除此行变为长按q,即三连
                        console.log("已点赞")},10000)
                }
            }
        },3000)

        }
    let obser = setInterval(
        function(){
            let video= document.querySelector("video")
            if(video){
                clearInterval(obser)
                main()
                let observer = new MutationObserver(main)
                observer.observe(video, { attributes: true,childList: true });//检测video变化,防止中途切p失效
            }

        },200
    )
    })();