微博批量点赞脚本

2017-06-22(Thu) by chenjia.me

原理

利用js直接点击点赞按钮,简单快捷

第一版本

新浪微博没有jQuery,那么只能用原生的JS,简单的实现方式如下:

var list=document.getElementsByClassName('S_txt2');
var j=0
for(var i=0;i<list.length;i++){
    if(list[i].tagName=="A"){
        if(list[i].title=="赞"){
            //var t=setTimeout(out(list[i]), 100*j);
            //var r=self.setInterval(out(list[i]), 100*j);
            setInterval(list[i].onclick=(function(i){
                return function(){
                    console.log(list[i])
                }
            })(i),1000*j)
            j++
            //list[i].click();
        }
        else if(list[i].title=="取消赞"){
            //console.log("取消赞")
        }
    }
}

function out(a){

    a.click();
}

但是这种方式,会触发新浪微博的限制,所以我们要考虑使用队列来进行中断。JS是单线程没有sleep()功能的函数,所以我们使用一种新的方式来实现。

第二版本

使用队列来延迟:

class IntervalQueue{
    constructor(ary){
        this.list = ary;
    }

    queue(item){
        this.list.push(item)
    }

    dequeue(cb){
        cb(this.list.shift())
    }
}
const oldlist = Array.prototype.slice.call(document.getElementsByClassName('S_txt2')).filter(a =>a.tagName ==="A");
const list = oldlist.filter(a =>(a.title ==="赞"||a.title ==="取消赞")&&a.title!=undefined);
const iq = new IntervalQueue(list);

setInterval(function () {
    iq.dequeue(function (item) {
        if(item==undefined)
            return
        if(item.title === "赞"){
            item.click();
            //console.log("zan")
        }else {
            console.log("cancel")
        }
    })
},10000)

最后的10000是毫秒,根据时间限制可以进行相应的调整。


Comments