新浪微博批量取消关注引发的思考

原创
2016/06/09 09:59
阅读数 859

端午节终于可以休息了,奈何一大早就被吵醒(合租房),再一想昨天晚上睡的蛮早的(11点),也没什么睡意了。打开手机看看时间,然后看着手机上这么多应用,愣神了3秒钟(该打开哪个呢),经过大脑3秒钟无意识思考,就你了,新浪微博。不看不要紧,一看——卧槽,吓一跳,怎么关注了这么多人(340多号),我记得就关注了5个人(小智、小漠。。。),怎么一下子多了这么多,连头像都被换成一个美女,根本不像程序猿嘛。

第一反应就是,不行 ,我要取消关注,先把头像给换回来(我可爱的路飞)。然后我百度了一下为什么新浪微博莫名其妙的关注了好多人,原来是把授权给第三方应用出的问题,接下来就简单了,先是把第三方应用授权全部删除掉,再去把关注的人取关呗。

如果你以为事情到这里就结束了,那就不是一个程序猿该有的取关姿势。340多号人,虽然有批量处理功能,但每次只能选中30个,还得一个个选,不够实用,操作麻烦。再一想,这中业务场景怎么这么熟悉,MD,作为前端开发,这不是我吃饭的东西吗!果断要用代码解决。下面就开始了JS实现新浪微博批量取消关注之不归路。。。

干货来了,上代码

运行环境:浏览器控制台

测试只在chrome上测过

首先要通过新浪微博首页点击头像下方的关注,进入全部关注列表

version:1

let e=document.createEvent("MouseEvents");e.initEvent("click",true,true);$('[action-type="batselect"]').dispatchEvent(e);let allItems=$$('[node-type="user_item"]');for(let item of allItems){item.dispatchEvent(e)};$('[action-type="cancel_follow_all"]').dispatchEvent(e);$('[action-type="ok"]').dispatchEvent(e);

最初版本,兼容性和实用性都不高,取关一次就要再跑一次脚本再取关一次

version:2

(function(){let e=document.createEvent("MouseEvents");e.initEvent("click",true,true);let intervalId=0;var cancel=function(){$('[action-type="batselect"]').dispatchEvent(e);let allItems=$$('[node-type="user_item"]');if(allItems.length===0){console.log('取消关注完毕');clearInterval(intervalId);return}for(let item of allItems){item.dispatchEvent(e)};$('[action-type="cancel_follow_all"]').dispatchEvent(e);$('[action-type="ok"]').dispatchEvent(e)};cancel();intervalId=setInterval(cancel,4000)})();

豪华升级-对ie貌似不兼容。

做到这的时候发现一个问题,新浪微博对取消关注也有限制,估计是取消的太多了,后边测的都取消关注不成功,改天再测下。

version:3

(function(){let e=document.createEvent("MouseEvents");e.initEvent("click",true,true);let intervalId=0;var cancel=function(){$('[action-type="batselect"]').dispatchEvent(e);let allItems=$$('[node-type="user_item"]');if(allItems.length===0){console.log('取消关注完毕');clearInterval(intervalId);return}let txt=$$('.S_txt1');let inner=txt[txt.length-1].innerHTML;if(inner==="抱歉,取消关注失败(>_<) ,稍后再试啦。"){console.log(inner);clearInterval(intervalId);return}if(inner==="操作失败"){console.log(inner);clearInterval(intervalId);return}for(let item of allItems){item.dispatchEvent(e)};$('[action-type="cancel_follow_all"]').dispatchEvent(e);$('[action-type="ok"]').dispatchEvent(e)};cancel();intervalId=setInterval(cancel,4000)})();

取消关注次数过多报错优化

 

感觉像自动化测试,先到这里了。。。

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部