上周五,我發了篇文章:
文章中我承諾: 當天留言的朋友,都可以拿到邀請碼
很快留言破千
按計劃,周一的時候,Fellou 的朋友,會通過「評論回復」的方式發碼。
在這個過程中,我踩了很多坑,也摸索出如何「自動回復評論區」的方法。
最終,今天用腳本,成功在評論區發放激活碼 1262 個。
教訓與經驗,在此分享
最初設想
在公眾號里,管理員是可以設置評論區的顯示/隱藏規則。
對于留言和回復規則,管理員可以設定
于是,我有了這樣一個方案:
周五當天的評論 公開評論 + 公開回復 周六及之后的評論 評論隱藏 + 回復隱藏 到了周一 Fellou 的小伙伴開始逐條回復
設想中,這樣做就可以確保:
只有評論者本人能看到激活碼
第一次踩坑
激活碼,是人工手發的,一共發了四天。
周四總算發完,我松了口氣,問了幾位朋友:“你們收到激活碼了嗎?”
結果清一色回復:沒有
我當場傻眼。
后臺一查,好家伙:系統把所有回復標成垃圾信息,全部隱藏了。
回復被標成了垃圾
想一下也合理:每條評論內容都是“隨機字符”,數量巨大,確實太像廣告。
嘗試用腳本解決
既然是系統折疊的,那我就自己拉出來!
我以前學過點前端知識,配合 ChatGPT 寫了個小腳本,把這些評論批量點開,恢復可見。
代碼大概長這樣
腳本運行,評論被逐條放了出來。
分為兩步:展開評論、放出隱藏
這下,我以為這回總沒問題了。
第二次踩坑
周五,我又去問了一輪:“現在收到激活碼了嗎?”
依然:沒有
我更迷惑了,只能逐一比對后臺數據,終于發現微信的一個奇妙規則:
回復者是管理員 + 設置為公開 → 所有人可見 回復者是管理員 + 設置為未公開 → 只有評論者本人可見 回復者是非管理員 + 設置為公開 → 所有人可見 回復者是非管理員 + 設置為不公開 → 沒人能看見
也就是說,我之前讓小伙伴幫忙發激活碼——完全無效。
最終方案:用腳本發碼
為了確保能送到,我自己寫了一個腳本,模擬以我的名義進行自動回復。
這個腳本可以做到:
? 自動翻頁;
? 逐條評論點擊“回復”;
? 自動填入激活碼;
? 回車發送。
代碼如下:
(async () => { const activationCodes = ["激活碼1", "激活碼2", "激活碼3", "激活碼4"...]; let currentCodeIndex = 0; const makeReplyText = (code) => ` 你的激活碼是:${code},祝使用愉快! 非常抱歉,在之前發碼過程中,系統檢測到大量相似內容,后半段的發送被誤判為垃圾信息,導致激活碼未能正常送達。我在整理后臺時發現了這個問題,特地補發給你。 為了避免將來錯過推送,建議將本賬號「星標」置頂,這樣即使推送量較大,也能第一時間收到通知,也歡迎推薦本賬號給身邊的朋友,感謝支持! 「賽博禪心」是我個人運營的 AI 行業垂直媒體,面向 AI 從業者、產業研究者,以及一級/二級市場關注者,專注于提供準確、及時、深度的行業資訊。 「賽博禪心」有一定的行業背景,也是目前國內唯一受邀參與 OpenAI 發布活動的中文媒體,常以首發稿的方式,供給第0手內容。 `.trim(); async function processPage() { const replyButtons = Array.from(document.querySelectorAll( '#commentlist .comment-list__item-opr .icon-reply' )); for (let i = 0; i < replyButtons.length; i++) { if (currentCodeIndex >= activationCodes.length) { console.warn(`? 激活碼已發完,停止于第 ${i + 1} 條評論`); return false; } const replyBtn = replyButtons[i]; const activationCode = activationCodes[currentCodeIndex]; const container = replyBtn.closest('#commentlist > div > div'); if (!container) continue; const siblings = Array.from(container.parentNode.children); console.log(` 正在處理第 ${nthIndex} 條評論 / 激活碼 ${currentCodeIndex + 1}:${activationCode}`); const nthIndex = siblings.indexOf(container) + 1; // 點擊回復按鈕 if (typeof replyBtn.click === 'function') { replyBtn.click(); } // 等待輸入框出現 let editor = null; for (let t = 0; t < 30; t++) { // 最多等3秒 await new Promise(r => setTimeout(r, 100)); editor = document.querySelector( `#commentlist > div > div:nth-child(${nthIndex}) > div.comment-reply-box .ProseMirror` ); if (editor && getComputedStyle(editor).display !== 'none') break; } if (!editor) { console.warn(`?? 第 ${nthIndex} 條評論未找到輸入框,跳過`); continue; } // 清空舊內容(避免上次殘留) editor.focus(); editor.innerHTML = ""; await new Promise(r => setTimeout(r, 100)); // 輸入新的激活碼文本 document.execCommand('insertText', false, makeReplyText(activationCode)); console.log(`? 已發放:${activationCode}`); // 等待 0.1 秒,確保輸入框內容穩定 await new Promise(r => setTimeout(r, 100)); // 再次確認內容是否正確(確保不是空白) if (!editor.innerText.includes(activationCode)) { console.error(`? 輸入異常,激活碼 ${activationCode} 內容未寫入,重試此評論`); continue; // 不前進激活碼索引,重新處理這條評論 } // 發送(回車) const enterEvent = new KeyboardEvent('keydown', { bubbles: true, cancelable: true, key: 'Enter', code: 'Enter', keyCode: 13, which: 13 }); editor.dispatchEvent(enterEvent); console.log(`? 第 ${nthIndex} 條評論已發送`); // 成功發送后才移動到下一個激活碼 currentCodeIndex++; // 評論間隔 await new Promise(r => setTimeout(r, 2000)); } return true; } async function goToNextPage() { const navLinks = document.querySelectorAll( '#app > div.weui-desktop-layout__main__bd > section > div.comment-list-wrp > div.weui-desktop-pagination > span.weui-desktop-pagination__nav > a' ); const nextBtn = Array.from(navLinks).find(a => a.innerText.includes('下一頁') || a.getAttribute('title')?.includes('下一頁')); if (nextBtn && typeof nextBtn.click === 'function') { nextBtn.click(); console.log('?? 翻到下一頁...'); await new Promise(r => setTimeout(r, 3000)); return true; } return false; } while (true) { const continueTask = await processPage(); if (!continueTask) break; const hasNext = await goToNextPage(); if (!hasNext) { console.log(' 已無下一頁,任務結束'); break; } } console.log(` 激活碼發放任務完成,總共成功發放 ${currentCodeIndex} 個`); })();
腳本寫完是下午五點半。
方法和之前一樣,F12 打開調試,運行。
很好,我在微信通知里,收到了回復。
點進去之后,是原評論區
理論上,3 秒發一個,1 小時能跑完。
但中途調試還是花了點時間,最終在晚上八點左右才正式發完。
你也想這樣發碼?
其實也不難:
1. 打開公眾號后臺的評論管理;
2. 按下
F12
進入控制臺;3. 粘貼腳本,把激活碼列表填進去;
4. 運行腳本即可,程序會自動處理每條評論。

發生上面的事情,問題在我:
? 沒意識到激活碼在形式上像垃圾信息;
? 規則想得太樂觀,沒有提前測試或核實;
? 沒有第一時間跟用戶確認收碼情況,導致問題持續了幾天。
希望我的教訓,成為大家的收獲
? 評論區是一個非常好用的精準回復渠道;
? 只要是管理員,就可以通過 JS 腳本,來高效完成批量回復;
? 可以請程序員朋友,或者 AI 可以幫你從 0 寫出能跑通的腳本;
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.