並非為了設陷阱,而是為了結果。
七個網址。七次失敗。
我的 Hashnode 個人資料缺少 H1 標籤。三個 freeCodeCamp 教程的元描述缺少或超過 160 個字元。兩篇 DEV.to 文章的標題太長,導致 Google 無法正確顯示。
我搭建了這個代理程式。我先用自己的內容進行了測試。這是演示的真實版本。
每個數位行銷機構都有人專門負責這項工作:打開電子表格,存取每個客戶的網址,檢查標題標籤、描述、H1 標籤,記錄失效連結,並將所有資訊貼到報告中。每週重複此動作。
那個人要花錢。工作內容是確定性的。之所以現在還是手工操作,唯一的原因是沒人能發展出替代方案。
我周末就把它建好了。
瀏覽器使用-基於 Python 的原生瀏覽器自動化工具。此代理程式會在可見的 Chromium 視窗中瀏覽真實頁面,而非無頭爬蟲。它支援持久會話、真實渲染,呈現與人類使用者相同的頁面。
Claude API(Sonnet) ——讀取頁面快照並傳回結構化的 JSON 資料:標題狀態、描述狀態、H1 標籤數量、規格標籤、標誌。每個 URL 需要呼叫一次 API。
httpx-用於偵測死連結的非同步 HEAD 請求。每頁最多 50 個連結,支援並發,每個請求超時時間為 5 秒。
扁平化的 JSON 檔案state.json檔案用於記錄已稽核的內容。即使執行過程中中斷,重新啟動後,它也會從中斷處繼續執行。無需資料庫。
七個Python文件,共956行程式碼,可在Windows筆記型電腦上運作。
代理程式遇到登入問題,拋出異常,執行終止。
大多數自動化教程都是如此。
這個行不通。
當代理程式偵測到非 200 狀態碼、重新導向登入頁面或標題包含「登入」或「存取被拒絕」時,它會暫停。在互動模式下,可以選擇跳過、重試或退出。在--auto模式下,它會自動跳過,將 URL 記錄到needs_human[]陣列中,然後繼續執行。
一個了解自身限制的智能體比一個默默失敗的智能體更有用。這是大多數人不會做出的設計決策,因為教程裡沒有涵蓋這方面內容。
我用它在三個平台上發布了自己的內容進行了測試:
| URL | 失敗欄位 |
|-----|----------------|
| hashnode.com/@dannwaneri | H1 缺失 |
| freeCodeCamp — 如何建立自己的 Claude 程式碼技能 | 元描述 |
| freeCodeCamp — 如何阻止人工智慧代理猜測 | 元描述 |
| freeCodeCamp — 建構生產環境的垃圾系統 | 標題 + 元描述 |
| freeCodeCamp — 作者/dannwaneri | 元描述 |
| dev.to — 守門恐慌 | 標題過長 |
| dev.to — 我搭建了一個生產環境垃圾系統 | 標題太長 |
freeCodeCamp 的描述問題部分是平台層面的-freeCodeCamp 控制模板,有時會截斷或省略元描述。 DEV.to 的標題問題則由我負責。適合作為標題的文章標題通常會超過<title>標籤內的 60 個字元。
代理程序並不在意。它檢查了標準並報告了結果。
python index.py --auto
新增一個.bat文件,用於設定 API 金鑰並呼叫該指令。將其新增至 Windows 任務規劃程式中,安排在週一早上 7 點執行。喝咖啡的時候,記得查看report-summary.txt 。
這就是代理商的工作流程。無需人工幹預。特殊情況需人工審核,會在needs_human[]清單中列出。其他所有情況都會自動處理和報告。
每個 URL 呼叫一次 Sonnet API,每頁約 0.002 美元。每週審核 20 個 URL 的費用不到 0.05 美元。 Playwright 瀏覽器在本地執行,無需支付雲端瀏覽器費用,也無需訂閱 Browserbase。
整個營運模式都秉持著每月5美元的理念。我做其他所有事情也都遵循同樣的原則。
GitHub: dannwaneri/seo-agent
複製它,將你的 URL 加到input.csv ,在你的環境中設定ANTHROPIC_API_KEY ,執行pip install -r requirements.txt ,執行playwright install chromium ,然後執行pip install -r requirements.txt ,執行playwright install chromium ,然後執行python index.py 。
freeCodeCamp 的教學會逐一講解每個模組——瀏覽器整合、Claude 提取提示、非同步連結檢查器、HITL 邏輯。教程上線後會在評論區提供連結。
瀏覽器自動化工具已經存在十年之久。 Playwright、Selenium、Puppeteer——功能強大,但都需要編寫和維護選擇器。一旦按鈕的類別名稱發生變化,腳本就會出錯。
這個代理不使用選擇器。它像 Claude 一樣讀取頁面——透過語義,經由可存取性樹進行讀取。即使 CSS 類別發生了變化,「提交」按鈕仍然是「提交」按鈕。
提取邏輯在提示符中,而不是在程式碼中。
舊方法:頁面變更時,自動化流程會中斷。
新方法:推理過程會適應變化,程式碼無需如此。
這才是真正的轉變。不是“人工智慧包攬一切”,而是“脆弱性轉移了”。從選擇器到提示,從維護到推理。故障模式不同了,恢復方式也不同了。
這是我為機構運營搭建實用本地 AI 代理系列教程的第一篇。 freeCodeCamp 的分步教學即將推出。程式碼庫現已上線。