自動加載評論之代碼註釋

上一篇介紹瞭如何在電腦的瀏覽器裏自動爬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//定義存儲當前評論列表父容器有多少子元素
//定義清空評論的方法
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(() => {//定義定時器
        if (stopFlag) {//在定時器裏,如果停止變量爲1了
            clearInterval(timeId);//停止定時器
        }
        newGetMoreButton = document.getElementsByClassName("WB_cardmore")[0]//獲取最新的加載更多按鈕
        if (!newGetMoreButton) {//當找不到加載更多按鈕時
        //重新獲取評論列表父容器有多少子元素,如果比上一次自動點擊加載更多時少/一樣,說明wb服務器返回有問題,需要重新再來一次
            if (commitNumber >= listBox.children[0].childElementCount) {
                continueRun()//執行出錯之後恢復查詢的方法
            } else {//否則就是真的翻到沙發了
                clearInterval(timeId);//取消定時
                console.log("找不到加載更多按鈕"); //提示用戶找不到加載更多按鈕了
            }
        } else {//當找得到加載更多按鈕時,說明上一次的自動點擊“加載更多”拿到了新的數據
            commitNumber = listBox.children[0].childElementCount//更新當前評論列表的子元素數目
            getMore(newGetMoreButton)//執行一次自動點擊的方法
        }
    }, 1000); //每1000毫秒重複一次定時器裏的行爲
}
//定義當出錯之後,手動繼續的方法
function continueRun() {
    console.log("繼續");//提醒用戶程序有執行這個方法
    clearInterval(timeId);//停止原來的定時器
    listBox.children[0].appendChild(getMoreButton)//恢復上一次的“加載更多”按鈕
    getMore(getMoreButton)//執行一次自動點擊的方法
    begin()//開啓定時器
}
//定義停止運行的方法
function stop() {
    stopFlag = 1//將停止運行變量賦值爲1
}
//運行開始定時拉評論
begin()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章