惜物網搶標助手
在結標前最後幾百毫秒自動出價,實戰兩次得標。

痛點
臺北惜物網是臺北市政府的二手拍賣平台,所有標案都在中午 12:00 整結標。規則是誰在結標那一刻出價最高誰得標,所以真正的勝負全擠在最後幾秒。
人手在這裡做不到三件事:
- 時間抓不準。 網頁上的倒數跟伺服器時間有落差,手動按下去的那一刻,可能早了兩秒讓對手有時間反應,也可能晚了一點就結標了。
- 只有一次機會。 截標前 5 秒內,同一個帳號只能出價一次。按錯、按早、算錯級距,都沒有重來。
- 級距要現算。 加價幅度隨目前價格分六段(10 元到 2,000 元),最後一秒還得心算下一級是多少。
為什麼要寫這個
我在惜物網找二手電腦與 3C。好的標的不缺人看,價格一路平靜,到最後幾秒才有人出手——用手搶,比的是誰手快,不是誰願意出比較多錢。
我想要的是:我願意出到多少,就交給程式在最後一刻、照規則、只出一次地替我出價。
解決了我什麼需求
- 不用守在電腦前。 設好上限、按下開始監控,中午 12 點前不必盯著倒數。
- 不會超出預算。 設了最高出價,下一級距超過上限就直接放棄,不會在最後幾秒被氣氛帶著加價。
- 不會違規。 截標前 5 秒只出一次的規則寫死在狀態機裡,出價後直接進入「已出價」狀態,不再重試。
實際功能展示
2026 年 10 月 1 日中午,兩個標案都在結標前不到 0.4 秒出價、兩次都得標:
搶標助手掛在惜物網的商品頁上,右下角是控制面板:
面板上能設定的:
| 欄位 | 作用 |
|---|---|
| 最高出價 | 預算上限,0 是不設限 |
| 我的出價 | 已經手動出過價就填進來,程式只在被超越時才搶 |
| 結標前 | 結標前多少毫秒出價,預設 500 |
| 跳級數 | 最後一刻一次跳幾個級距,例如填 10 就直接加十級;超過預算時自動降到預算內能跳的最大級數 |
依「我的出價」有沒有填,自動切換兩種策略:
- 已經出過價:監控自己是否被超越,被超越才以下一級距搶回來。
- 還沒出價:一路不動聲色,到設定的那一刻直接狙擊。
技術做法
不寫死任何 API。 直接呼叫惜物網頁面上本來就有的 getJson()、webSocket_send_callback() 等函式,換到任何一個商品頁都能直接用。
以伺服器回應為唯一的資料來源。 攔截頁面的 onMessage,所有價格、時間、出價紀錄都以伺服器回傳為準,不去讀畫面上的數字——DOM 更新有延遲,最後幾百毫秒的決策不能建立在延遲過的資料上。
時間軸是排好的。 每 100 毫秒輪詢一次最新出價(加鎖防止請求重疊),每 50 毫秒檢查一次倒數;結標前 5 秒先取好 reCAPTCHA v3 的 token,前 3 秒校正一次伺服器時間——只校一次,避免在最關鍵的時刻多送不必要的請求。時間運算全程用毫秒,不用秒。
同一套邏輯有兩個版本:Tampermonkey 使用者腳本直接跑在瀏覽器裡、沿用已經登入的狀態,是平常用的版本;Node.js + Puppeteer 版本則適合排程自動執行。
使用技術
JavaScriptTampermonkeyNode.jsPuppeteerWebSocketreCAPTCHA v3
看原始碼