CLI vs 腳本,以及 opencli 在偵察時省的 token

一份內部筆記。為什麼「看懂頁面」這段我優先用 opencli,而不是直接寫 Playwright 腳本盲改。

一、CLI 是什麼

CLI 跟「執行一支腳本」差在哪
CLI(Command-Line Interface,命令列介面):你在終端機打一行文字指令,程式就回你一段文字結果。跟用滑鼠點按鈕的圖形介面(GUI)相對。opencligitpython 都是這樣叫用的。
💬 CLI 逐條問答opencli …
一次問一個小問題,馬上拿到一個精簡答案,再決定下一步。像跟瀏覽器一句一句對話。
$ opencli browser find --css input
→ {ref:90,id:CardId} {ref:101,id:IDL4} …  # 5 行
$ opencli browser eval "…#DateTimeBegin.readOnly"
→ true  # 1 個值
即時可逐步回應精簡不用整支重跑
📜 執行腳本 整批跑python xxx.py
把整套流程先寫成一支程式,跑下去一氣呵成,結果一次全吐。要改就整支重跑。
$ python trace_ipass.py
→ (跑完整流程) 一坨輸出
  整頁 HTML / 截圖 / 一長串 dump  # 全部
整批要先全寫好輸出龐大改了 edit→run→read
同樣是驅動瀏覽器,差別在介面:CLI 像隨問隨答、一句一句;腳本像交一份作業、跑完才看到全部。

二、這次我怎麼分工兩個工具

🔬
偵察
opencli ・看懂頁面
✍️
編碼
把知識寫進腳本
🏭
交付
Playwright ・可重用
⚠ 跳過偵察、直接生產 = 那兩次 timeout 失敗
opencli — 顯微鏡
即時偵察 ・唯讀 ・不持久
  • find / state / eval 回結構化 JSON,不用自己爬 DOM
  • compound 自動解碼表單(日期、下拉)
  • 一條 eval 挖出 datepicker+500ms 自還原雷
  • 看 iframe 就確認 reCAPTCHA 是 v2
Playwright — 生產線
可重用 ・持久 ・能交付
  • 你的真實瀏覽器,過得了 reCAPTCHA
  • 存成腳本,每月一行重跑
  • 最終把結果表格抓下來落檔
  • 會失敗,是我盲寫、沒先偵察
重點:解析其實分兩層,差別就在這
結構解析
頁面長怎樣、欄位在哪、機制如何
→ opencli 大幅代勞
語意解析
進站↔出站配對、系統分類、車資判定
→ 我的邏輯,換哪個工具都一樣
反事實沒有 reCAPTCHA 的話,最乾淨的解析根本不是爬表格,而是 opencli browser network 直接攔下背後 API 的 JSON,跳過整個 DOM。這次被 captcha 擋在門外,才退回 Playwright 進你的瀏覽器抓畫面。

三、同一任務,四種方式看到什麼

任務:看懂 iPASS 表單有哪些欄位、怎麼運作
opencli find
回精簡結構化 JSON
[{ref:90, id:CardId, type:text},
 {ref:101, id:IDL4, type:password},
 {ref:97, id:gridRadios4, type:radio}]
≈ 0.2k token
瀏覽器 MCP 快照
可讀 DOM/AX 樹,中等
textbox "背面卡號" #CardId
radio "近三個月" #gridRadios3 checked
textbox "開始日期" #DateTimeBegin readonly
button "送出"   …(數十行)
≈ 2–5k token
Playwright page.content()
整頁原始 HTML
<input id="CardId" placeholder="請輸入號碼">
<input type=hidden name="__RequestVerification
Token" value="HGAD37J-ZE2CKxve…一長串…">
… 整頁含 nav/script/隱藏欄位,約 100KB+ …
≈ 25–35k token
截圖
人看得懂,我得花圖像 token
🖼 1280×900 PNG
看得到畫面,但無法 grep/解析,常還要再配文字
≈ 1–1.5k token
*條長為示意、數字為粗估(整頁 HTML 約 100KB ÷ 3.5 字元/token)。重點是量級差距:opencli 一條 find 約是整頁 dump 的不到百分之一,而且我還能 grep;截圖好看但解析不了。
opencli 還有一招沒被 captcha 擋的話,browser network 直接拿背後 API 的乾淨 JSON,連 DOM 都不用碰,那才是最精準又最省的。

四、沒有 opencli,我會怎麼做(以及為什麼更耗 token)

token 用量
opencli本次用
token 低
互動 ✓看得到 JS ✓
精簡 JSON envelope,還能 network 直接攔 API。
瀏覽器 MCP
claude-in-chrome / chrome-devtools
token 中~高
互動 ✓看得到 JS ✓
能互動,但 DOM 快照、截圖 payload 偏大。
Playwright 自己偵察
寫拋棄式腳本去 dump
token 高
互動 ✗看得到 JS ✓
edit→run→讀,整頁 HTML+截圖,多次來回。
curl + grep
不開瀏覽器
token 低 *
互動 ✗看得到 JS ✗
便宜,但只看到靜態,看不到 datepicker、500ms 雷,反而誘發失敗 loop。
沒有 opencli 時,token 主要燒在這四處
  • edit → run → 讀 反覆迴圈,每輪都吐腳本+讀輸出。
  • page.content() 把整頁 HTML(約 100KB)塞進 context。
  • 截圖 是圖像 token,單張最貴,但結構理解常不需要它。
  • 看不到 JS,寫錯,再 debug,這次兩次 timeout 就栽在這條。
結論沒了 opencli,「看懂頁面」這段會從幾條精簡 JSON 膨脹成整頁 dump + 截圖 + 多次來回。但語意解析那層(配對、分類)的 token 還是一樣,因為那是推理,不是抓取。
Ordilux 內部筆記 ・偵察為什麼優先用 opencli