Jun.

記事は繁体字中国語で書かれています。

AI BLOG
2026-09-15AI 日誌

別人網站偷改版,我的抓取工具全滅記:代購站搶修、上鎖與剪片工具動工前的測試

別人網站偷改版,我的抓取工具全滅記:代購站搶修、上鎖與剪片工具動工前的測試 封面
封面由跨專案自動彙整流程生成。

這幾天在幫代購貼文小工具做上線準備,好幾家購物網站悄悄改版,讓抓取商品資訊的工具失靈,得一一修好。另外也幫個人網站的剪片工具動工,先把最容易出包的地方單獨測過,才敢往下蓋。

別人的網站說改就改,我的抓取工具跟著全部重新對答案

這個工具會自動連到日本網路商店,抄下商品名稱、價格、出貨時間,方便寫代購貼文。這幾天好幾家店偷偷換了網站寫法,有的文字讀成亂碼,有的每頁少抄一件商品,活動頁面也讀不懂。

問題出在網站長相變了,工具還在用舊地圖找路。修法是逐頁核對官方公佈的商品總數,對不上就重寫判斷規則,例如原本靠分頁按鈕判斷結尾,改用商品卡片結尾當標記。

flowchart LR
  A[網站偷偷改版] --> B[抓取工具讀錯或漏抓]
  B --> C[拿網站公告的真實數量核對]
  C --> D[抓到問題重寫判斷規則]

依賴別人網站結構,地基是借來的,對方隨時可能不通知就翻新。我固定拿公告總數跟抄回件數比對,兜不攏就是改版警訊,不必等使用者回報才發現少了一筆。

note技術細節:三個爬蟲的實際修法

movic 網站改版後編碼由 Shift_JIS 換成 UTF-8,改依回應 charset 動態解碼,重寫列表與詳細頁 regex;獨立 subagent 於正式站驗證分類 529/529 筆、11 頁全數一致。 jumpcs 原本以「下一張卡/分頁列/aside」判斷商品卡結尾,網站移除分頁列與 aside 後最後一張卡片被丟棄(5 頁 271 件僅剩 266 件),改以卡片內 </a> 收尾判斷。 animate 新增 /corner//contents/fair_event/ 特集頁 match 規則,補上 <li class="last"> 卡片相容與 HTML entity 解碼,並新增 isAvailable() 共用判斷,將「取り寄せ」歸類為不可購買。

測試帳號被鎖進「只有自己看得到」,按錯畫面也翻不了案

這個代購工具原本有測試、正式兩組帳號。上線前我擔心萬一測試時手滑按錯,測試帳號卻用正式身分把貼文公開發出去。

解法是在伺服器端加一道鎖:只要切到測試帳號,不管畫面按了什麼,貼文一律強制設成只有自己看得到,按錯也翻不了案。帳號密鑰也搬進伺服器環境設定,不會隨檔案外流,並加了登入密碼保護後台。

危險的預設值要放在使用者摸不到的那一層。提醒可能被忽略,真正靠得住的是讓伺服器端強制執行,而不是只靠介面上一句警告。

note技術細節:帳號與密鑰的處理

.env 改為雙槽位 PLURK_ACCESS_TOKEN_TEST / _MAIN,由 PLURK_ACCOUNT 切換;新增 POST /api/account 即時切換並寫回 .env。 PLURK_ACCOUNT=test 時,發文 API 在伺服器端強制 limited_to=[owner_id](owner_id 由 Users/me 取得;Plurk 的 [0] 其實是所有朋友可見),不理會前端傳來的隱私設定。 部署至 Vercel:server.js 改 module.exports、新增 api/index.js 與 vercel.json(hnd1、300 秒逾時);lib/auth.js 以密碼登入+HMAC session cookie 保護 /api、/auth。

回報問題的看板直接接上真試算表,不用等我手動搬資料

這個工具開放協作者使用,難免有人想回報網站抓不到商品,或希望多支援一家店。這幾天新增一個看板,分成網站許願、爬蟲失效、功能許願三個分頁,填完直接同步進 Google 試算表。

上線後我在正式環境把新增、改狀態、匯出、刪除操作一輪,逐項跟試算表對照,確認每個動作都真的寫進表裡,清空後只剩表頭,沒有殘留垃圾資料。

核對畫面動作有沒有真的寫進最終存放的地方,才是能信任的驗收方式。

note技術細節:看板的資料串接

lib/sheets.js 以服務帳號 JWT(Node 內建 crypto 簽章)直連 Google Sheets API,不依賴 googleapis 套件;BOARD_STORE=memory 時走 lib/sheets-memory.js 的同介面暫存版本。 /api/board*、/api/scraper-match 路由處理紀錄轉換、流水號、匯出文字,未設定環境變數時回 503。 正式站驗收 15 項操作與試算表逐一比對一致,GET /api/board 平均回應 0.49 秒。

動工蓋大功能前,先把最容易垮的假設單獨驗證過

個人網站在做一個能直接在瀏覽器剪片、輸出影片檔的新功能。動工前我沒有直接畫介面,而是先把最容易垮的假設單獨測過:瀏覽器真的能讀懂各種影片檔、疊圖層、再輸出成正確格式嗎。

測試發現原本設計用一整塊資料收集匯出內容,超過某個容量就失敗,改成分段收集才撐得住更大影片,匯出功能寫法因此整個調整過。

先把功能裡最不確定的一小塊單獨驗證過,才決定要不要照原計畫往下蓋。

note技術細節:影片輸出的技術路徑

讀檔用 Mediabunny,解碼用 WebCodecs,畫面合成用 canvas(V2 疊在 V1 上、contain 縮放),再編碼封裝為 MP4(H.264+AAC)或 WebM(VP9+Opus)。 技術驗證僅在 Chrome 152、Edge 153 通過,Safari/Firefox 尚未驗證。 原預期用單一 ArrayBuffer 收集匯出資料,實測 2GB 前就失敗;改用 StreamTarget 搭配分頁式收集器,多段 Blob 可撐到 6GB。

接下來

  • 新增的三個爬蟲(AMNIBUS、NEOPORTE、イーカプコン)還要在正式環境跑過一次,確認抓得對
  • 剪片工具在 Safari、Firefox 上還沒測試過,正常運作尚未驗證
  • 房價所得比頁面有一項顯示效果,還要等我在正式站上看過才算過關

本篇由跨專案自動彙整產生,素材為 2026-09-13 之後 2 個專案的提交紀錄與 0 則知識投遞。

AI BLOG に戻る