先放上代码:

在浏览器开发者工具里面的控制台(console)里面粘贴这段代码,然后回车就可以了,前提是qq空间的页面要一直开着,在个人中心可以运行。

var clicklog = function() {
        [].map.call(document.getElementsByClassName("qz_like_btn_v3"), function(item) {
          if(item.dataset.clicklog === "like") {
             item.click();
          }
        })
}
setInterval(function() {
    document.body.scrollTop += 1000;
    if(!document.getElementsByClassName("img-loading")) {
        clicklog();
    } else {
        document.body.scrollTop -= 1000;
        clicklog();
        document.body.scrollTop += 1000;
    }
}, 200)

解释一下这段代码:

因为DOM的NodeList虽然可以通过[0]的形式来获取对应节点,但是依然是类数组,所以用call方法使其可以使用map方法来遍历。
我观察了QQ空间的点赞按钮,点赞后data-clicklog会改变为cancellike,所以根据这个判断自己是否有点过赞,然后用click()方法模拟点赞。

但是QQ空间是分块加载的,所以必须下拉一段距离才会刷新接下来的内容,所以我用setInterval动态改变scrollTop的值,每次0.2s向下拉1000px。

这个我是通过是否出现loading图来判断的,如果出现loading的时候(这个时候scrollTop来一直在增加,但是一直处于loading状态加载不出来),必须把页面向上面滚动一下才能继续加载,所以我让scrollTop减少1000px。这块我要是说的不明白,你们可以把document.body.scrollTop -= 1000;去掉再运行试试看。

我今天发现QQ空间个人中心里面的是跨域iframe,所以不能获取到DOM,所以这段代码只能在自己主页运行。


尹光耀
2.2k 声望103 粉丝