指南

Everything I Need to Know

Agent Browser 自動化 X 發文

№ 01 / 2026 An Internal Field Manual Tenten · Engineering Notes 2026.05.18 · Taipei Reading time: 18 min Classification: 🟢 SHARE-OK Everything I Need to Know Agent Browser 自動化 X 發文 用瀏覽器自動化取代 X API,在 Mac Mini 上以 Browser-...

LinkedIn、Threads、Facebook、IG 的發文已透過 API 自動化。X 的 Basic API 費用為 $200/月,Browser-Use 提供以瀏覽器自動化取代 API 的替代方案。本文涵蓋架構設計、安裝步驟、Reddit 社群案例,以及合規風險評估。

閱讀時間
13 分
更新日期
開啟原始報告
X API 月費(我們要省下的)
$0
browser-use 的 GitHub 星數
93.3k★
Mac Mini · 24/7 · 不關機
1 台

01章節

Agent Browser 自動化 X 發文

用瀏覽器自動化取代 X API,在 Mac Mini 上以 Browser-Use 從 Blog 發佈推文

№ 01 / 2026 · An Internal Field Manual · Tenten · Engineering Notes

2026.05.18 · Taipei · Reading time: 18 min · Classification: 🟢 SHARE-OK

02章節

TL;DR — 如果你只有 60 秒

  1. **結論先講:可行,但有風險。**用 Agent Browser 操作已登入的 X 帳號發推,技術上 2026 年已經是 turnkey 等級,整個社群有大量現成方案。

  2. **推薦堆疊:**Browser-Use(93k★)+ Claude Sonnet 4.6 + 持久化 Chrome Profile + n8n trigger。整套 BYOM 月成本約 $30–50。

  3. X 官方政策明確禁止「非 API 形式的自動化」,違反者「可能被永久停權」。這條紅線你必須知道。

  4. **實務上的安全做法:**單帳號、低頻率(1–3 推/天)、人類化延遲、避開自動按讚/追蹤、用主帳號而非新建帳號。

  5. **Plan B 已備好:**若被風控,立刻切回 X API Basic($200/mo)或用 Typefully 半自動排程。

03Chapter One · The Problem

為什麼 X 的發文自動化比其他平台複雜?

其他平台的整合已完成。當 Blog 發佈新文章,LinkedIn、Threads、Facebook、Instagram 的 API 或 OAuth 接收 token 並將貼文送至各平台時間軸。流程穩定、可預測、有 SLA 保障。

X 在 Elon Musk 接手後調整 API 定價,最低方案 Basic 為 $200/月,Free tier 每月僅允許極少量寫入。對於只需要發佈自家 Blog 文章的需求,這筆費用不符比例:我們需要的只是一個發文動作,而非抓取百萬則資料。

替代方案由此產生:*直接讓 AI 操作已登入的瀏覽器,點擊「Post」按鈕送出推文。*X 帳號在 Mac Mini 上保持常駐登入狀態,不需要每次重新驗證。

這個做法在 2024 年屬於實驗性 hack,到了 2026 年,**Browser-Use 已累積 93,000+ GitHub 星,成為具備社群支持的穩定方案。**這類工具統稱 Agent Browser。

Agent Browser 以 LLM 解讀整個頁面,識別元素意圖,而非依賴固定的 CSS selector 或 XPath。

Browser-Use 設計原理

傳統的 Selenium、Playwright 依賴 CSS selector 和 XPath,X 前端一旦改版,腳本即失效。Agent Browser 以 LLM 解讀整個頁面,識別元素的語意意圖。當 X 調整「Post」按鈕的位置或 class 名稱,AI 仍可透過文字語意定位目標,不需要手動更新 selector。

04Chapter Two · The Landscape

2026 年 Agent Browser 工具比較

以下比較表涵蓋 GitHub、Reddit r/AI_Agents、Hacker News 上討論度較高的選項,篩選條件為:具備持久化 session 支援、有活躍維護紀錄、可自架部署。

工具核心模式適合場景GitHub支援登入 Cookie / Session?
Browser-UsePython · 開源 · BYOM(自帶模型)程式化工作流、自架部署、Mac Mini 24/793.3k★✅ 內建 profile.sh 工具
SkyvernLLM + 電腦視覺 · 多 Agent 架構跨網站、頁面常變動、需 OCR / 2FA~25k★✅ 可連既有 Chrome(chrome://inspect)
StagehandTypeScript · Playwright extension偏 deterministic、想要 selector caching15k★✅ Browserbase 雲端持久化
Vercel Agent BrowserRust CLI · 給 coding agent 用跟 Cursor / Claude Code 整合的腳本12.1k★✅ Session profile
Claude for ChromeAnthropic 官方 · Chrome 擴充個人桌面助理、不適合 server 化—✅ 直接用你登入的 Chrome
Perplexity Comet消費型 AI 瀏覽器人類陪同操作,不是無人值守—✅ 但無 headless 模式

**建議選用 Browser-Use。**GitHub 星數 93k,文件完整,支援 BYOM(可接 Claude、GPT、Gemini、Ollama 本地模型),在 Mac Mini 上以 Python venv 即可部署,無需額外基礎設施。

Skyvern 適合需要處理 2FA 或 captcha 的場景,其多 agent 架構(Planner → Actor → Validator)更為穩定。但 Skyvern Cloud 為付費方案,自架設定複雜,對單一發文用途而言成本偏高。

05Chapter Three · The Architecture

從 Blog Publish 到 X Post 的端對端流程

整個系統由六個步驟組成:從 Blog 系統發出 webhook 到 X 出現推文,中間由 n8n、Claude、Browser-Use 分別負責觸發、生成與執行。

Blog → X Auto-Post Pipeline · v1.0
  1. 1 · Trigger · Blog Webhook

    Ghost / WordPress 發布新文章時,觸發 webhook 到 n8n。Payload 包含標題、摘要、URL、封面圖。

  2. 2 · Generator · LLM 寫推文

    n8n 把內容丟給 Claude Sonnet 4.6,按照 prompt 模板(見 Ch 05)產生一則 ≤ 280 字的推文 + 1–2 個 hashtag + 短連結。

  3. 3 · Queue · 任務寫進 Redis / SQLite

    把 tweet 字串 + 文章 URL + 預定時間寫進輕量隊列。預設延遲 5–30 分鐘(避免「網站發文 → 推特同時跳出來」的機械感)。

  4. 4 · Worker · Mac Mini 上的 Browser-Use

    Python script 從隊列取任務 → 啟動有持久化 profile 的 Chromium → 已登入 X 帳號狀態 → Claude 視覺判斷介面 → 點 Compose → 貼上文字 → 點 Post。

  5. 5 · Verify · 截圖回報

    發完後等 3 秒,截圖、抓 URL,回寫到 Notion / Slack。如果失敗,retry 一次後丟錯誤到 Slack。

  6. 6 · Cooldown · 進入冷卻

    該帳號至少 90 分鐘內不再發推。每天硬上限 3 則。週末延遲到平日。這些是降低風控的關鍵。

架構中有兩個關鍵設計:持久化的 Chrome profile 與 冷卻機制。前者避免每次重新登入(頻繁重新登入是觸發帳號風控的常見原因),後者讓發文行為符合人類使用頻率,降低被自動偵測的機率。

06Chapter Four · The Setup

Mac Mini 上的安裝步驟

以下步驟適用於 M4 Mac Mini(macOS 14+)。在乾淨環境中約需 45 分鐘完成安裝並送出第一則推文。

步驟一 · 環境準備

用 uv 建專案、灌 browser-use、預載 Chromium:

bash
# 0. 安裝 uv(Python 套件管理器,比 pip 快 100x)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 1. 建專案目錄
mkdir ~/x-poster && cd ~/x-poster
uv init && uv add browser-use anthropic redis python-dotenv

# 2. 預載 Chromium(browser-use 自帶下載)
uvx browser-use install

# 3. 建一個 .env 放金鑰
cat > .env <<EOF
ANTHROPIC_API_KEY=sk-ant-...
X_USERNAME=tenten_co
USER_DATA_DIR=/Users/$(whoami)/x-poster/chrome-profile
EOF

步驟二 · 第一次手動登入 X

此步驟僅執行一次。用以下腳本開啟專屬 Chrome profile,手動登入 X 帳號(包含 2FA)。完成後 profile 持久化於硬碟,後續可直接以 headless 模式啟動:

python
# bootstrap.py · 只跑一次,做完就刪
from browser_use import Browser
import asyncio

async def bootstrap():
    browser = Browser(
        user_data_dir="./chrome-profile",
        headless=False,  # 你要看得到瀏覽器才能手動操作
    )
    page = await browser.new_page()
    await page.goto("https://x.com/login")
    print("👉 請在瀏覽器手動登入 X,包含 2FA")
    print("   登入完成後,按 Enter 繼續...")
    input()
    await browser.close()
    print("✅ Profile 已存好。之後可以 headless 跑了。")

asyncio.run(bootstrap())

完成後,chrome-profile/ 目錄將儲存 cookies、session storage、local storage,下次啟動 Chrome 即為已登入狀態。

步驟三 · 建立主要 worker

python
# worker.py · 這是會被 24/7 跑的主程式
from browser_use import Agent, Browser, ChatAnthropic
import asyncio, os, time, random

async def post_to_x(tweet_text: str):
    browser = Browser(
        user_data_dir=os.getenv("USER_DATA_DIR"),
        headless=True,  # 正式跑時 headless
    )
    agent = Agent(
        task=f"""
        前往 https://x.com/home
        確認已登入(如未登入,停止並回報錯誤)。
        點擊「Post」或「發文」按鈕(左側面板上的鉛筆 icon)。
        在彈出的編輯框內輸入以下文字(不要修改任何字元):
        ---
        {tweet_text}
        ---
        確認字數沒有超過 280。
        點擊「Post」送出按鈕。
        等待 3 秒後截圖回報。
        """,
        llm=ChatAnthropic(model="claude-sonnet-4-6"),
        browser=browser,
    )
    # 人類化延遲:在這個任務真正執行前先等 30-180 秒
    await asyncio.sleep(random.uniform(30, 180))
    result = await agent.run()
    await browser.close()
    return result

# 從 Redis 隊列取任務
if __name__ == "__main__":
    import redis
    r = redis.Redis()
    while True:
        _, payload = r.blpop("x:queue")
        tweet = payload.decode()
        try:
            asyncio.run(post_to_x(tweet))
            print(f"✅ Posted: {tweet[:60]}...")
        except Exception as e:
            print(f"❌ Failed: {e}")
        time.sleep(90 * 60)  # 強制冷卻 90 分鐘

步驟四 · 以 launchd 設為系統服務

建立 plist 檔,使 worker 在 Mac Mini 開機時自動啟動,並在異常退出後自動重啟:

xml
<!-- ~/Library/LaunchAgents/co.tenten.xposter.plist -->
<?xml version="1.0"?>
<plist version="1.0">
<dict>
  <key>Label</key> <string>co.tenten.xposter</string>
  <key>WorkingDirectory</key> <string>/Users/tenten/x-poster</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Users/tenten/.local/bin/uv</string>
    <string>run</string>
    <string>python</string>
    <string>worker.py</string>
  </array>
  <key>RunAtLoad</key> <true/>
  <key>KeepAlive</key> <true/>
  <key>StandardOutPath</key> <string>/tmp/xposter.log</string>
</dict>
</plist>

# 載入
launchctl load ~/Library/LaunchAgents/co.tenten.xposter.plist

07Chapter Five · The Prompt

推文生成 Prompt 設計說明

推文品質直接影響整個系統的輸出效果。AI 生成的推文若語氣機械或過於行銷化,即使成功發布也難以獲得互動。以下是給 Claude Sonnet 4.6 使用、歷經多次調整的 prompt 範本:

system_prompt.md · v3.2 · PRODUCTION

text
## 角色
你是 Tenten(tenten.co)的社群編輯。你的任務是把一篇剛發布的 Blog 文章,改寫成一則 X 推文。

## 輸入
- 文章標題:{{title}}
- 文章摘要(150 字內):{{summary}}
- 文章 URL:{{url}}
- 文章 tag:{{tags}}

## 寫作風格
- 用第一人稱「我們」或第三人稱觀察者口吻,不要用「您」或「親愛的讀者」
- 開頭一句要有 hook:一個反直覺的觀察、一個具體數字、或一個尖銳的問題
- 結尾不要寫「點擊閱讀更多」「歡迎留言」這類客套話
- 避免:「在這個快速變化的世界」「讓我們一起」「值得一讀」這類 AI 口吻
- 允許:粗口(輕度)、自嘲、技術梗

## 硬規則
1. 總字數含 URL ≤ 270 字元(給 X 預留 buffer)
2. URL 直接放結尾,不要用 markdown 包
3. 最多 2 個 hashtag,放在最後一行
4. 不要用 emoji(除非文章主題真的需要,例如音樂或表情包)
5. 如果文章是技術教學,第一行直接破題講重點;如果是觀點文章,第一行用一句斷言

## 輸出格式
直接輸出推文內容本體,不要前綴、不要解釋、不要 markdown code block。一個換行代表一個段落。

## 範例
輸入標題:「為什麼我們把 UnoPim 放在 AWS Lightsail」
輸出:
我們花了兩週把整個 PIM 從 self-hosted Kubernetes 搬到 AWS Lightsail。
帳單從 $340 變 $40,部署時間從 12 分鐘變 90 秒。

寫了一份 19 章節的 self-hosting guide,包括我們踩過的所有坑。

https://tenten.co/blog/unopim-lightsail

#PIM #AWS

此 prompt 的結構要點:(1) 提供充分上下文(風格、規則、範例)、(2) 以「硬規則」+ 「軟風格」雙層約束輸出、(3) 附上一個高品質範例讓 LLM 對齊目標調性。依內部測試,此版本推文的人工 reviewer 修改率約 15%,多數情況可直接通過。

08Chapter Six · The Reddit Wisdom

社群討論摘要:已知問題與替代方案

以下整理自 r/AI_Agents、r/LLMDevs、r/n8n、Hacker News 過去 6 個月的相關討論,選取出現頻率較高且具參考價值的案例:

$40 月成本就能跑全套

▲ 389 · r/n8n · n8n workflow

一個爆紅的 n8n 模板:Content Ingestion → AI Research → Platform-Specific Writing → Publishing。整套自架月成本 $20(n8n cloud)+ $5–15(Claude API)。有人把它包成 $18 賣模板,也有人收 $600 幫客戶部署。

Eliza 1.0.6 可繞過 X API

▲ 1.2k · r/AI_Agents · Eliza

Eliza agent 框架的舊版本 plugin-twitter 1.0.6 曾支援直接發 X 不依賴 API,後因 X 要求而修改。部分用戶仍使用 1.0.6 版本,屬於社群已知的非官方用法。

M4 Mac Mini 作為常駐 agent 主機

▲ 567 · r/Mac · Mac Mini 24/7

r/Mac 過去半年出現多個 24/7 agent 部署案例。Clawdbot 累積 9k★,以 Mac Mini 作為 Telegram/Slack/iMessage agent host。相較 VPS,Mac Mini 無月費、功耗低、可在本地保管登入憑證。

死刑通常是大量自動互動

▲ 234 · r/Twitter · 被封號的人

翻了 30 篇「被封號」的事後檢討,共通點是:自動按讚、自動追蹤、自動回覆、相似內容多帳號發布。單純「自動發自己的原創推文」被封的案例極少,但仍有風險。

Nitter 可作為讀取側替代方案

▲ 178 · r/AI_Agents · Nitter

需要讀取 X 內容(例如自動回覆 mentions)時,Nitter 替代前端可抓取資料,無需使用 X API。寫入(發推)仍需瀏覽器自動化,但讀取側可節省 API 費用。

用「explore → replay」省 LLM 錢

▲ 91 · HN · Skyvern thread

Skyvern 的設計:第一次跑用 LLM 學會流程、產生 Playwright code,後續直接 replay。2.7x 便宜、2.3x 快、deterministic。如果你發推流程穩定,跑久了根本不需要每次都呼叫 LLM。

托管型方案比較

以下列出社群討論度較高的托管型選項,各有不同限制:

方案說明
PostbaseSaaS · 訓練 AI agent 用你的 brand voice 自動發 X / LinkedIn / IG。是付費黑箱,你看不到底層怎麼處理 X。
OpenTweetRSS-to-X 自動發文 SaaS。它走的是 X 官方 API,所以合規,但要付 X API 的錢。
Apify Post Tweet Actor$10/月 · 用 Cookie 模擬登入發推。本質就是個瀏覽器自動化,跟我們要做的事一樣,只是託管在 Apify 雲上。
Typefully + Zapier半自動:AI 寫、Typefully 排程、人類審 → 自動發。合規、安全、但需要每天花 5 分鐘按按鈕。
GeeLarkAntidetect 雲端手機。主要給多帳號 farming 用,正規企業用不太上,提一下讓你知道有這種東西。

結論:**單一帳號、僅發自家 Blog 的場景,自架 Browser-Use 成本最低、控制權最高。**若需要托管方案且不想支付 X API 費用,Apify Post Tweet Actor 以 $10/月提供相同功能,但合規風險與自架相同。

09Chapter Seven · The Risk

X 自動化政策與合規風險

執行前必須了解 X 的官方政策立場。本章說明政策條文、實際執行強度,以及降低風險的具體做法。

X 官方政策原文(中譯)如下:

「禁止使用非 API 形式的自動化, 例如腳本化操作 X 網站。 使用這些技術可能導致 你的帳號被永久停權。」

— X Help Center · Automation Rules · 2026 版本

**Browser-Use 操作已登入的 Chrome 點擊按鈕,符合 X 政策所定義的「腳本化操作 X 網站」,屬於明確禁止的行為。**政策條文無模糊空間。

X 的風控系統優先針對傷害平台健康度的自動化:自動按讚、自動追蹤、自動 DM 推銷、多帳號協同發布相同內容。單一帳號、低頻率、發布原創內容的場景雖技術上違規,依社群案例被主動執法的機率相對較低,但此評估可能隨 X 政策調整而改變。

風險評估儀表

針對「Tenten 用 Browser-Use 從 Mac Mini 發自家 Blog 推文」這個具體場景:

項目評估
違反 ToS100%
被技術偵測~25%
短期被停權~8%
永久停權~4%
能否申訴很低

以上數字為根據社群案例的估算,非科學數據。**需特別注意的是「永久停權且申訴成功率極低」的尾部風險。**一旦觸發,Tenten 的 X 帳號及累積的 followers 將全數歸零。

降低風險的 7 條操作規範

  • **單帳號:**不建立副帳號互相轉推或按讚

  • **低頻率:**每天最多 3 則,每則間隔至少 90 分鐘

  • **原創內容:**僅發 Tenten 自家 Blog 推廣,不轉貼其他來源

  • **隨機延遲:**Blog 發布至 X 發文之間隨機等待 5–30 分鐘

  • **發文時段:**集中在台北時間 9am–9pm,避開週末深夜

  • **不做互動自動化:**禁止自動回覆、自動追蹤、自動按讚

  • **保留人工使用:**每天仍需手動使用 X,使自動與手動行為交替出現

10Chapter Eight · The Backup Plan

備援計畫:帳號被封時的處理流程

建議提前將以下 incident response 步驟寫成 runbook,而非等到帳號被封時才處理:

Incident Response Playbook
  1. A · 偵測 · Worker 失敗 3 次

    如果 Browser-Use 連續 3 次回報「找不到 Post 按鈕」或「需要驗證」,立刻 Slack 警報、暫停隊列。

  2. B · 判斷 · 是技術問題還是封號

    用手機(非 Mac Mini IP)打開 X 看帳號狀態。如果還活著,可能是 X 改了 UI,等 24 小時或更新 prompt 即可。

  3. C · 如果是封號 · 立刻申訴

    X 對「自動化違規」的申訴成功率很低,但仍要試。準備話術:「個人帳號,所有內容皆為原創,無法解釋為何被停權」。

  4. D · 過渡 · 切到 Typefully 半自動

    用同個帳號(或新帳號)接 Typefully。AI 仍然產推文,但人類點「Post」。發布不會中斷,只是慢一點。

  5. E · 長期 · 評估付 API 錢

    若 X 對 Tenten 真的重要(高流量轉換、品牌曝光),$200/月買 Basic API 換合規與穩定,從商業 ROI 看可能划算。

11Chapter Nine · The Verdict

給 Tenten 的決策矩陣

以下將本文件重點濃縮為決策矩陣,供 go / no-go 評估使用:

項目決策
建議方案Browser-Use + Claude Sonnet 4.6 + Mac Mini M4 + 既有 n8n
月成本估算$0 X API + $15 Claude API + $20 n8n + $0 Mac Mini(沉沒成本)= ~$35/月
建置時間1 個工程師 · 2 個工作天 · 含 dry-run 兩週後上線
合規評等⚠ 違反 X ToS · 個人帳號低頻原創內容,被執行的機率低但非零
技術成熟度2026 年具備 turnkey 等級的部署體驗 · GitHub 93k★ · 有活躍社群支援
建議施行是,前提是:(1) 接受尾部風險、(2) 嚴守 Ch 07 的 7 條紀律、(3) Plan B 寫成 runbook 放在 Notion

下一步具體 action item

  • 本週:訂一台 M4 Mac Mini(基礎款 16GB 即可)

  • 本週:在 Notion 開一個專案頁,把這份文件貼進去,加 7 條紀律當 SOP

  • 下週:1 個工程師花 2 天跑 Ch 04 的步驟,建立 dry-run 環境

  • 第 3 週:dry-run 觀察期,每日 Slack 看 AI 寫的推文品質

  • 第 4 週:切上線。同時把 Typefully 的 Plan B 預先設好

  • 第 8 週:第一次回顧,評估 prompt 是否需要調整,以及是否擴展至其他平台。

12章節

結語 務實評估再行動

X API Basic 方案每月 $200,對規模較小的團隊而言費用不成比例。Browser-Use 提供了一個可行的替代路徑。

這條路徑違反 X ToS,存在帳號被停權的尾部風險。技術本身在 2026 年已成熟,能否長期運行取決於操作紀律與風險承受度。

低頻率、單帳號、原創內容,是降低執法風險的三個關鍵條件。在此範圍內使用,風險可控。

— Tenten Engineering · 2026.05

Internal field manual · For Tenten team use only · Not legal advice · Version 1.0 · May 2026