社群媒體行銷的反偵測瀏覽器:實用設定指南

完整呈現代理商的工作流程:每位客戶一個工作區、每個帳號一個設定檔並搭配對應的代理與時區、以角色進行交接,以及 API 自動化。
社群媒體代理商的營運難題,很少出在內容本身,而是在管線:橫跨多個平台的一大堆客戶帳號、一個必須在這些帳號上協作又不互相絆腳的團隊,以及會讀取每個工作階段環境的平台。本文介紹如何讓這條管線保持平淡無奇的完整設定,並以 PowerOps 作為實際範例。
結構:工作區、群組、設定檔
不要誘惑自己把所有設定檔放進一份長長的清單。結構才能讓這套設定在規模變大時依然撐得住,三個層級就夠了。
- 每位客戶一個工作區。客戶的設定檔、代理與備註都放在一起,在處理某一位客戶時,畫面上不會出現其他客戶的任何內容。結束合作時只需處理一個工作區,而不是一場考古工程。
- 工作區內每個平台一個群組。客戶的 Facebook 設定檔放一組,Instagram 放另一組,TikTok 再放一組。批次操作是以群組為對象,因此這樣的劃分,讓你一個動作就能啟動或停止某個平台的所有設定檔。
- 每個帳號一個設定檔。其他一切都建立在這條規則上。一個設定檔只存放一個帳號的儲存資料、身分與網路路徑,而它的名稱就說明了是哪一個帳號。
命名值得花三十秒訂個規則:客戶、平台、帳號名稱,依此順序。設定檔有編號且可搜尋,所以在忙碌的辦公室裡,任何人喊一聲「開 41 號」,同事就確切知道指的是哪一列。
結構也在別人開口詢問之前,就先回答了稽核的問題。當客戶想知道誰在何時動過他們的帳號,成員明確、設定檔一次只開一個的工作區,本身就已經有答案。
每個設定檔的身分與網路路徑
每個設定檔都會取得一組協調一致的裝置身分並儲存下來,因此每次開啟都回報同一台合理的機器。這部分是自動完成的。需要人來判斷的是網路路徑。
- 在客戶帳號實際運作的國家購買固定位址,每個帳號一個。
- 把它們加入代理庫並測試。測試會回報實際觀測到的位址與國家,這才是平台看到的內容,不管發票上寫什麼。
- 在第一次登入前,為每個設定檔指派一個代理,並在同一次作業中,把設定檔的時區與語言設為該路徑所屬的國家。
- 定期重新測試代理庫。端點會悄悄劣化,而劣化的路徑會比連線錯誤更早以帳號異常的形式浮現。
不必分享密碼的交接
代理商經常在人員之間交接帳號:實習生負責排程,經理負責核准,週末有人代班。傳統做法是一份密碼試算表,結果就是客戶的帳號登入在一台沒人找得到的筆電上。
角色可以取代這種做法。工作區成員只取得其工作所需的權限:團隊成員可以開啟並使用設定檔;經理還能編輯設定檔與網路路徑;擁有者還能管理成員資格本身。帳號的憑證只需存放在設定檔中一次,把帳號交給新同事就是授予權限,而不是寄出密碼。有人離開時,撤銷其成員資格就能一次關閉他在所有地方的存取權,而他從未見過的密碼也不需要更換。
讓交接順利的習慣是關閉設定檔。設定檔同一時間只會在一台機器上開啟,所以同事可以看到目前是誰持有它,而不是以痛苦的方式發現工作階段衝突。做完一輪作業就關閉設定檔,下一個人開啟時,工作階段已經乾淨地寫出。
新客戶上線,逐步說明
上線是結構要嘛建立起來、要嘛被跳過的時刻,所以值得有一套專屬的流程。新客戶應該花一個下午完成設定,不需要任何英雄式的救火。
- 在碰任何帳號之前,先建立工作區與各平台群組。
- 向客戶收集帳號清單:帳號名稱、平台、每個帳號服務的國家,以及目前由誰持有憑證。
- 為每個帳號購買並測試一個固定路徑,國家要正確,並讓代理庫的測試確認實際抵達的是什麼。
- 建立設定檔,依客戶、平台、帳號名稱命名,並在同一輪作業中指派網路路徑、時區與語言。
- 在各自的設定檔內重新登入每個帳號,由客戶隨時在旁處理兩步驟驗證與確認信。
- 授予團隊各自的角色,向團隊說明客戶的發文節奏,並淘汰憑證當初傳遞的管道。
重新登入是團隊最想走捷徑的一步,他們會想從帳號原本所在之處匯入 Cookie。請忍住。匯入的工作階段會帶著它來源機器的歷史,而上線的重點,是讓客戶帳號從此持有的每一個工作階段,都是在持續使用它的環境內建立的。
自動化重複性的工作
一條實用的界線是:人負責判斷的工作,腳本負責巡迴的工作。查看十幾個收件匣的未讀數、為週五的報告收集追蹤者數字、開啟早上要處理的那一批設定檔,這些都屬於巡迴工作。本機 API 可以處理這些,而不必有人重新解決環境問題,因為透過 API 啟動的設定檔,帶有的身分與網路路徑,和有人從列表中開啟它時完全相同。
const { profiles } = await api(`/profiles?groupId=${clientInstagramGroup}`);
for (const profile of profiles) {
const { ws } = await api("/browser/start", { profileId: profile.id });
try {
const browser = await chromium.connectOverCDP(ws);
const context = browser.contexts()[0];
const page = context.pages()[0] ?? await context.newPage();
// The profile's identity, storage and route are already attached.
await collectForReport(profile.name, page);
} finally {
await api("/browser/stop", { profileId: profile.id });
}
}
一次只跑幾個,中間留有停頓,並配合帳號所在地的工作時段。像坐在辦公桌前的人那樣行動的自動化,才能長久好用;猛敲平台的自動化,只是為同一個教訓付兩次學費。
這套設定下的一週
這套結構帶來的好處,體現在日常作業中。週一早上,團隊開啟客戶的 Instagram 群組,逐個設定檔處理收件匣。週五的報告由 API 自動跑完,團隊則把下午拿去做更有價值的事。結束合作時,只是把工作區封存。沒有一件事是聰明的花招,而這正是重點:這套設定的任務,就是讓環境問題不再有趣。
有兩個數字可以告訴你這套設定是否穩固。第一個是有多常需要輸入平台密碼,上線完成後應該趨近於零。第二個是有多常因為驗證而讓人措手不及,這應該很少見,而且能追溯到原因:網路路徑變更、異常的大量操作,或是太新的帳號被催得太快。當任一數字上升,答案就在網路路徑與作業節奏中,最先要看的就是最近改變最多的地方。
規則,說清楚
這套工作流程中的每個平台,都有關於帳號與自動化的條款,而這套設定不會改變其中任何一條。隔離讓客戶之間不會互相汙染,角色讓憑證不會留在試算表裡,API 則省去繁瑣。這一切都不能為被禁止的帳號、被禁止的自動化,或平台所禁止的行為背書,我們也不對自己無法掌控的平台上的任何結果作出承諾。能長久經營的代理商,會把平台規則視為客戶工作的一部分,把工具視為乾淨完成這項工作的方式。
設定檢查清單
- 每位客戶建立一個工作區,工作區內每個平台建立一個群組。
- 每個帳號購買一個固定位址,位於該帳號的營運國家,並測試代理庫中的每個端點。
- 每個帳號建立一個設定檔,依客戶、平台、帳號名稱命名,並在第一次登入前指派好網路路徑。
- 把每個設定檔的時區與語言設為其網路路徑所屬的國家。
- 授予每位團隊成員一個角色,而不是寄給任何人一組密碼。
- 透過本機 API 自動化巡迴性工作,節奏要像真人一樣。
- 每輪作業結束時關閉設定檔。


