跳轉到

tw-house-ops 專案遷移:Taiwan → Ireland + agent-browser 改 Playwright CLI(含愛爾蘭版首次 E2E 測試)

文檔資訊

  • 分類: architecture
  • 難度: intermediate
  • 預估閱讀時間: 10 分鐘
  • 標籤: playwright-cli, house-ops, ireland, real-estate-pipeline, project-migration, 591, daft-ie, agent-browser, cloudflare-captcha, dublin-rental

摘要

將台灣版房產搜尋 pipeline(tw-house-ops)完整遷移為愛爾蘭版,同時將抓取層從 agent-browser 改為 Playwright CLI。涵蓋市場規則轉換(Central Bank 4x/3.5x LTI、HTB、FHS、RPZ)、8+ 個核心 mode 文件重寫、591 價格系統性落差發現、以及愛爾蘭版首次 E2E 測試結果(Daft.ie Cloudflare 封鎖、€1,300 預算只能租 studio/room share、BER 資料實際可取得但 pipeline 未能擷取的 bug、PDF URL 錯誤、merge-tracker.mjs 手動步驟讓用戶不滿要求自動化)。

關鍵學習

  • 591.com.tw 搜尋結果顯示的價格與實際刊登頁面租金存在系統性落差(12,000-20,000 vs 23,000-46,000/月),必須透過瀏覽器實際造訪才能取得正確價格

  • agent-browser 方式效率差(每物件需 70-90 次 tool calls,8-12 分鐘/物件),改用 Playwright CLI 可大幅提升批次抓取效率

  • 房產評估 pipeline 架構可跨市場移植:scan → pipeline → evaluate → compare → visit 的模式適用於台灣與愛爾蘭

  • 愛爾蘭市場關鍵規則:FTB 4x income / Non-FTB 3.5x income(Central Bank LTI)、HTB 最高 EUR 30k、FHS 最高 30% shared equity、RPZ 租金每年漲幅上限 2%

  • 建築風險評估需針對市場調整:台灣(921 地震、輻射屋)→ 愛爾蘭(pyrite IS 398、mica IS 465、pre-1970s 石棉、無授權擴建)

  • Daft.ie 部署 Cloudflare Turnstile CAPTCHA,agent-browser 完全無法通過,必須退回 WebSearch(Level 3)抓取快取結果,導致資料不完整

  • 都柏林 €1,300/月預算範圍內,整租市場幾乎只剩 studio 或 room share,這是市場現實而非資料問題

  • BER 資料實際已顯示在 Daft.ie 物件頁面(用戶親眼確認),但 pipeline 未能正確擷取,是待修復的 bug 而非資料缺失

  • 評估邏輯(分數維度、報告格式、pipeline 流程)是市場無關的,市場知識(法規、稅制、portal URL)是可替換的參數層

  • merge-tracker.mjs 需手動執行的問題讓用戶明確表達不滿,自動化整合是高優先修復項

技術細節

專案架構

tw-house-ops 是一個以 Markdown mode 文件驅動的房產評估 pipeline,核心文件包含:

  • modes/scan.md — 從 portal 抓取物件清單,產生 pipeline.md 條目
  • modes/pipeline.md — 批次處理待評估物件,呼叫 rent/buy mode
  • modes/rent.md / modes/buy.md — 個別物件深度評估
  • modes/afford.md — 購屋負擔能力試算
  • modes/switch.md — 換屋/換市場試算
  • modes/compare.md — 多物件比較
  • modes/visit.md — 看屋清單與談判策略
  • config/profile.yml — 用戶偏好與財務條件
  • portals.yml — 各 portal URL template

愛爾蘭市場轉換重點

# 台灣 → 愛爾蘭 關鍵映射
currency: TWD → EUR
area_unit: 坪 → m²
mortgage_rule:
  TW: 貸款成數由銀行自訂,約 8成
  IE_FTB: 4x gross income, 10% deposit (Central Bank)
  IE_mover: 3.5x gross income, 20% deposit
government_schemes:
  TW: 青安貸款(2%優惠利率)
  IE: HTB (up to EUR 30k refund) + FHS (up to 30% shared equity)
rent_regulation:
  TW: 無強制限制
  IE: RPZ (Rent Pressure Zone) 每年漲幅上限 2%
price_reference:
  TW: 實價登錄(government registry)
  IE: PPR (Property Price Register)

591 價格抓取問題

WebSearch 抓取的 591 搜尋結果顯示價格(12,000-20,000/月)與 agent-browser 實際造訪頁面確認的租金(23,000-46,000/月)存在顯著落差,7 個物件中有 6 個因此被 SKIP。推測原因: 1. 搜尋結果可能顯示社宅補助後價格或已下架物件快取 2. 591 搜尋 API 回傳資料可能有延遲或不完整

Playwright CLI 遷移動機

agent-browser 每次物件評估需要 70-90 次 tool calls,耗時 8-12 分鐘/物件。Playwright CLI 可將抓取層獨立出來,批次執行後輸出結構化資料,再交給 Claude 進行評估邏輯,大幅降低 token 消耗與延遲。

愛爾蘭版 E2E 測試結果(2026-04-13)

Dublin 租屋掃描:預算 €1,300/月、Dublin 1 附近 1 小時通勤範圍

  • Daft.ie Cloudflare Turnstile CAPTCHA 封鎖 agent-browser,全數退回 WebSearch(Level 3)
  • 找到 24 筆物件,預算內(≤€1,300)只有 4 筆:Rathcoole 獨棟(3.⅗)、Clongriffin room share(3.7/5)、Mark's Lane D2 room share(3.8/5)、Rathmines studio(3.9/5)
  • BER 資料在物件頁面實際可見(用戶親眼確認),但 pipeline 未正確擷取(待修復)
  • PDF 輸出功能存在物件 URL 錯誤問題
  • merge-tracker.mjs 需手動執行,用戶明確表達不滿

What Changed

Phase 1:台灣版 pipeline 運作驗證

先在台灣青埔(A18/A19 區)跑了 7 個租屋 + 5 個買屋物件的完整 pipeline,確認架構可運作。發現 591 搜尋顯示價格與實際頁面價格系統性落差,青埔新大樓含車兩房實際行情 23,000-30,000/月,遠超 20,000 預算。唯一完整評估物件(001 青商路)得 3.⅘,買屋唯一評估物件(008 永泰路明日朗朗)得 3.7/5。

Phase 2:agent-browser → Playwright CLI 遷移決策 + 台灣版 → 愛爾蘭版完整重寫

用戶發現 agent-browser 效率差(70-90 tool calls/物件)後,決定遷移至 Playwright CLI。同步進行台灣版 → 愛爾蘭版重寫,共 8+ 個核心文件全部改寫:CLAUDE.md、README.md、modes/_shared.md、config/profile.example.yml、portals.yml、modes/rent.md、modes/buy.md、modes/afford.md、modes/switch.md、modes/scan.md、modes/pipeline.md、modes/compare.md、modes/visit.md、templates/states.yml。

Phase 3:愛爾蘭版首次 E2E 測試(確認與新增發現)

以 Dublin 租屋(€1,300/月預算)進行首次完整測試。確認三個問題:(1) Daft.ie 的 Cloudflare CAPTCHA 封鎖所有 agent-browser 存取;(2) 用戶親眼確認 BER 資料在 Daft.ie 物件頁面可見,但 pipeline 未擷取(pipeline bug 確認);(3) PDF 輸出的物件 URL 有誤。用戶對 merge-tracker.mjs 需手動執行明確表達不滿,要求找出自動化解法。都柏林市場現實是 €1,300/月預算內整租選擇極為有限,3.9/5 的 Rathmines studio 是最佳選項。

So What

這個遷移案例展示了一個以 Markdown mode 文件驅動的 AI-assisted pipeline 如何跨市場移植。核心洞見是:評估邏輯(分數維度、報告格式、pipeline 流程)是市場無關的,市場知識(法規、稅制、portal URL)是可替換的參數層

愛爾蘭版首次 E2E 測試揭露了幾個關鍵問題:Daft.ie Cloudflare 封鎖使 Level 1 抓取完全失效,需要替代方案;BER 資料可取得但未被擷取是需要修復的 bug(已由用戶親眼確認);€1,300 預算在都柏林的市場現實(只有 studio/room share)是真實市場資訊而非爬蟲問題。

591 和 Daft 的爬蟲障礙(價格快取落差 vs Cloudflare CAPTCHA)說明:任何依賴 portal 搜尋頁面的 pipeline 都需要多層備援(agent-browser → WebSearch → 手動),且搜尋結果必須透過實際造訪物件頁面二次驗證。

用戶對 merge-tracker.mjs 手動步驟的強烈反應(「如果還要靠我手動,那我要你幹嘛?」)說明 pipeline 中任何需要手動介入的步驟都是嚴重痛點,自動化整合是高優先項目。

Trade-offs

  • agent-browser vs Playwright CLI:agent-browser 無需額外設定但 token 消耗大(70-90 tool calls/物件);Playwright CLI 需維護獨立腳本但可批次執行且 token 消耗低
  • Markdown mode 文件 vs 程式碼:Markdown 易於人工編輯與理解,但缺乏型別檢查、版本控制困難、容易出現格式不一致
  • 單一 repo 多市場 vs 分 repo:單一 repo 共用 pipeline 架構,但需要在文件中清楚區分市場特定內容,避免混淆
  • scraping 即時性 vs 快取:直接 scraping portal 取得最新資料,但速率限制和頁面結構變化是持續維護成本。Daft.ie 的 Cloudflare 封鎖使 Level 1 完全失效,WebSearch(Level 3)只能取得快取結果且資料不完整
  • Level 1(agent-browser)vs Level 3(WebSearch):Level 1 資料最即時但 CAPTCHA 是硬性障礙;Level 3 無 CAPTCHA 問題但資料可能過時且物件數量偏少

Try It Fast

# 快速驗證 Playwright CLI 是否可抓取 Daft.ie 物件
npx playwright install chromium
npx playwright screenshot --browser=chromium \
  "https://www.daft.ie/for-rent" \
  daft-test.png

# 或用 Playwright CLI codegen 記錄 BER 擷取路徑
npx playwright codegen https://www.daft.ie/for-rent
# portals.yml 愛爾蘭版範例結構
rent:
  daft:
    url_template: "https://www.daft.ie/{county}/rental/"
    search_params:
      min_beds: "{min_bedrooms}"
      max_rent: "{max_budget_eur}"
buy:
  daft:
    url_template: "https://www.daft.ie/{county}/residential-property-for-sale/"
  myhome:
    url_template: "https://www.myhome.ie/residential/search"
reference:
  ppr: "https://www.propertypriceregister.ie/"

Recommendation

  1. 優先修復 BER 擷取 bug:用戶親眼確認 BER 資料在 Daft.ie 物件頁面可見,需更新 rent.md/buy.md 的資料擷取邏輯以正確抓取 BER 欄位,這是影響評估準確性的重要 bug
  2. 自動化 merge-tracker.mjs 整合:用戶明確表達不接受手動步驟(「如果還要靠我手動,那我要你幹嘛?」),需在 pipeline 完成後自動執行 merge-tracker.mjs,解決 Bash 權限問題或改用其他整合方式
  3. 建立 Daft.ie Cloudflare 備援方案:Level 1 agent-browser 被 Cloudflare CAPTCHA 封鎖是硬性障礙,考慮:(a) 先在一般瀏覽器開啟 Daft.ie 建立 cookies 後給 agent-browser 繼承;(b) 使用 playwright-extra + stealth plugin 規避偵測;© 將 Level 3 WebSearch 提升為主要掃描路徑,補充 MyHome.ie 作為第二 portal
  4. 修復 PDF 輸出的 URL 問題:PDF 報告中的物件 URL 有誤,需在生成 PDF 前驗證 URL 是否與 pipeline.md 的來源 URL 一致
  5. 在 scan mode 加入二次驗證步驟:搜尋結果抓取後,對每個物件實際造訪頁面確認價格,避免 591/Daft 搜尋快取問題(台灣版已確認,愛爾蘭版亦存在類似風險)
  6. 將市場規則集中管理:Central Bank LTI、HTB 上限等規則散落在各 mode 文件中,集中到 config/ 目錄方便法規更新時集中修改
  7. 建立 BER 評級最低門檻的快篩邏輯:BER 低於 D 或無 BER 證書應在 Phase 1 直接 SKIP(類似台灣版的樓層/屋齡快篩)

本文檔由 Semi-Brain 自動生成

Session ID: 4daa79de-150a-4889-8cd9-df5382d02150

分析信心度: 92%