疑難排解
Fetch 回傳的每種錯誤代表什麼、從哪裡產生,以及是否會以有頭模式重試。
狀態碼錯誤
這類錯誤是 *browser.Error,用 errors.As 取出後讀 Error.Status。
| 錯誤 | 產生時機 | 有頭重試 |
|---|---|---|
http 403 |
導向後的 URL 路徑片段或 query 值為 403;第一份快照的標題命中驗證頁字樣(just a moment、attention required、checking your browser、access denied、請稍候);或萃取不出文章且回應狀態為 403 |
有 GUI 時會 |
http 429 / http 503 |
萃取不出文章且回應狀態為 429 或 503 | 有 GUI 時會 |
http 404 |
導向後的 URL 路徑片段或 query 值為 404,或萃取不出文章且狀態為 404 |
不會 |
http 204 |
萃取成功但去重後 Markdown 為空 | 不會 |
其他 http 4xx/5xx |
萃取不出文章且回應狀態 ≥ 400 | 不會 |
成功結果的 Result.Status 為 403 / 429 / 503 時同樣視為被擋並觸發重試。見 Fetch 路由。
一般錯誤
| 訊息 | 原因 |
|---|---|
invalid url: ... |
URL 缺 scheme,或 hostname 不含 . |
readability: no article extracted from N snapshots |
所有快照都解析不出文章,且狀態碼小於 400 |
acquireSem: context deadline exceeded |
併發上限已滿直到 timeout 到期;見 瀏覽器快取 |
launcher.Launch: ... |
Chrome 啟動失敗,多半是找不到執行檔或沙箱限制 |
security find-generic-password: ... |
macOS 鑰匙圈未解鎖或拒絕存取;僅 SameSession 會走到 |
secret-tool application=chromium: ... |
Linux keyring 中 chrome 與 chromium 都沒有密碼;僅 SameSession |
sqlite3: ... |
缺少 sqlite3 或 Cookie 資料庫無法讀取;僅 SameSession |
inject cookies (0/N): ... |
所有 Cookie 都注入失敗,逐筆重試也一樣 |
Chrome 設定檔不存在時內部會包裝 browser.ErrProfileNotFound,但 Fetch 不會回傳它:呼叫改以不帶 Cookie 的一般瀏覽器繼續。上表其他 SameSession 錯誤則直接回傳,不會降級。
無桌面伺服器
DISPLAY 與 WAYLAND_DISPLAY 皆未設定的 Linux 主機不會啟動有頭瀏覽器,被擋的回應會直接以錯誤回傳而不重試。見 執行環境。