先放上代码:
在浏览器开发者工具里面的控制台(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,所以这段代码只能在自己主页运行。