自动加载评论之代码注释

搬迁到语雀啦,地址在这
上一篇介绍了如何在电脑的浏览器里自动爬wb的评论楼层到最早的评论,这里单独把代码拿出来给出每行代码的意义,尽量证明这不是一段恶意代码(╥╯^╰╥)

代码的逻辑总结如下:
通过定时器每1s触发一次自动点击“获取更多”按钮,以获取新的15条微博。
当wb服务器返回错误的的数据的时候,评论列表的dom的子元素数目会小于等于上次自动点击时的数目,所以将上次的“获取更多”按钮插入到dom中,然后继续自动点击。
当找不到“获取更多”按钮,并且点击前的子元素数目小于点击后时,可以判断为wb返回的数据中有评论,但没有获取更多按钮,即翻到沙发了。当然,也在上篇文章中给出了手动判断是不是沙发的方法。

//下面这行是用来标记当前查询了几次
var i = 0;//定义标记当前查询了几次的变量
var getMoreButton = document.getElementsByClassName("WB_cardmore")[0]//定义变量存放获取“加载更多”按钮
var newGetMoreButton//定义变量存放新的“加载更多”按钮
var timeId  //定义定时器
var stopFlag = 0//定义是否停止定时查询的变量
var listBox = document.getElementsByClassName("list_box")[0]//定义评论列表的父容器的变量
var commitNumber = listBox.children[0].childElementCount//定义存储当前评论列表父容器有多少子元素
var audio = new Audio("https://t.cn/A6Ag3iqY");//这里是结束后播放的音乐链接,《好运来》

//定义清空评论的方法
function clearCommit() {
    var getMoreButton = document.getElementsByClassName("WB_cardmore")[0]//获取最新的“加载更多”按钮
    if (!getMoreButton) {//如果没有加载更多按钮
        console.log("请重新输入一次clearCommit()")//提示用户重新运行
        return//跳出方法,不清空,以防止判断是否加载到沙发的逻辑失效
    }
    var newContent = document.createElement("div")//创建一个div元素
    newContent.setAttribute('node-type', "comment_list")//为div元素添加node-type属性
    newContent.setAttribute('class', "list_ul")//为div元素添加class属性,这两个属性即评论列表父容器下第一层子容器的属性。
    listBox.removeChild(listBox.children[0])//将评论列表父容器清空
    newContent.appendChild(getMoreButton)//为div元素添加“加载更多”按钮,因为上面清空评论列表父容器,把按钮也去掉了,这里加回来
    listBox.appendChild(newContent)//将这个div元素给评论列表父容器作子元素
    console.log("清理完成")//提示用户清理完成
}
//定义自动点击的方法,接受参数为加载更多按钮的dom
function getMore(newButton) {
    getMoreButton = newButton//更新getMoreButton为接受的参数。
    i++;//次数加1
    getMoreButton.click();//点击"加载更多"按钮
    window.scrollTo({ top: document.body.scrollHeight, behavior: "smooth" });//自动滚动到底部
    console.log("第" + i + "次");//提醒用户现在是第几次自动查询
}
//定义定时拉评论的方法
function begin() {
    stopFlag = 0//将停止变量置为初始值
    timeId = setInterval(() => {//定义定时器
        newGetMoreButton = document.getElementsByClassName("WB_cardmore")[0]//获取最新的加载更多按钮
        if (!newGetMoreButton) {//当找不到加载更多按钮时
            if (commitNumber > listBox.children[0].childElementCount) {//重新获取评论列表父容器有多少子元素,如果比上一次自动点击加载更多时少,说明wb服务器返回有问题,需要重新再来一次
                continueRun()//执行出错之后恢复查询的方法
            } else {//否则就是真的翻到沙发了
                clearInterval(timeId);//取消定时
                console.log("找不到加载更多按钮,看看是不是翻到沙发啦?"); //提示用户找不到加载更多按钮了
                audio.play();//播放提示音乐
            }
        } else {//当找得到加载更多按钮时,说明上一次的自动点击“加载更多”拿到了新的数据
            commitNumber = listBox.children[0].childElementCount//更新当前评论列表的子元素数目
            getMore(newGetMoreButton)//执行一次自动点击的方法
        }
         if (stopFlag) {//在定时器里,如果停止变量为1了
            clearInterval(timeId);//停止定时器
        }
    }, 1000); //每1000毫秒重复一次定时器里的行为
}
//定义当出错之后,手动继续的方法
function continueRun() {
    console.log("继续");//提醒用户程序有执行这个方法
     i--;//使计数器的值不算上这次查询
    clearInterval(timeId);//停止原来的定时器
    listBox.children[0].appendChild(getMoreButton)//恢复上一次的“加载更多”按钮
    getMore(getMoreButton)//执行一次自动点击的方法
    begin()//开启定时器
}
//定义停止运行的方法
function stop() {
    stopFlag = 1//将停止运行变量赋值为1
}
//定义停止提示音乐的方法
function stopMusic() {
    audio && audio.pause();//停止播放提示音乐
}
//运行开始定时拉评论
begin()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值